From 88de5597b3398c55d2ab61db9f6dd460065953db Mon Sep 17 00:00:00 2001 From: wunianxiao Date: Tue, 2 Jun 2026 15:19:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=94=A8=E6=88=B7=E9=9A=94=E7=A6=BB=20?= =?UTF-8?q?=E2=80=94=20=E5=88=87=E6=8D=A2=E7=94=A8=E6=88=B7=E6=97=B6?= =?UTF-8?q?=E6=B8=85=E7=A9=BA=E4=B8=8A=E4=B8=8B=E6=96=87=20+=20=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit listen_loop 新增用户切换逻辑: - 跟踪 last_user_id - 用户变化时清空 ChatSession (messages/checkpoint/summaries) - 加载新用户最近 20 条聊天记录 - 隔离对话上下文、摘要、工作记忆 现在每个用户拥有独立的会话视图 --- src/main.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 6e29750..a3e8bf8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -468,6 +468,7 @@ async fn listen_loop( approval_manager: &ApprovalManager, current_user_id: Arc>, ) { + let last_user_id = Arc::new(tokio::sync::Mutex::new(String::new())); loop { match client.receive_messages().await { Ok(resp) => { @@ -535,11 +536,24 @@ async fn listen_loop( continue; } - // 更新当前用户(审批流程需要) - *current_user_id.lock().await = from.to_string(); - // 同步到 session(executor 从 session 读取 user_id) - if let Some(conv) = &conversation { - conv.session().lock().await.current_user_id = from.to_string(); + // 用户切换:清空上下文,加载新用户历史 + { + let mut last_user = last_user_id.lock().await; + if *last_user != from.to_string() && !last_user.is_empty() { + info!("用户切换: {} → {}", *last_user, from); + if let Some(conv) = &conversation { + let session = conv.session(); + let mut s = session.lock().await; + s.messages.clear(); + s.checkpoint = 0; + s.summaries.clear(); + s.last_user_at = None; + s.current_user_id = from.to_string(); + // 加载该用户最近 20 条历史 + s.load_recent_messages(20).await; + } + } + *last_user = from.to_string(); } // LLM 回复(异步执行,避免审批阻塞主循环)