fix: 用户隔离完整性 + 聊天去重
1. 启动时不加载历史消息(等第一条消息确定身份后按需恢复) 2. MemoryStore 改为 HashMap<user_id, Vec<mem>>,按用户隔离缓存 3. session.current_user_id 与外部 mutex 同步 4. chat_records.message_id 加 UNIQUE 索引 + ON CONFLICT DO NOTHING
This commit is contained in:
+7
-6
@@ -306,14 +306,11 @@ async fn cmd_listen(
|
||||
// 创建 Conversation
|
||||
let mut conv = match Conversation::new(cfg) {
|
||||
Ok(c) => {
|
||||
// 设置 db_pool 并加载历史消息
|
||||
// 设置 db_pool(启动时不加载消息,等第一条消息到达后再按需恢复)
|
||||
if let Some(db) = database {
|
||||
let session = c.session();
|
||||
{
|
||||
let mut s = session.lock().await;
|
||||
s.db_pool = Some(Arc::new(db.pool().clone()));
|
||||
s.load_recent_messages(20).await;
|
||||
}
|
||||
let mut s = session.lock().await;
|
||||
s.db_pool = Some(Arc::new(db.pool().clone()));
|
||||
}
|
||||
info!("LLM 已初始化: {} / {}", c.provider_name(), c.model());
|
||||
c
|
||||
@@ -541,6 +538,10 @@ async fn listen_loop(
|
||||
|
||||
// 更新当前用户(审批流程需要)
|
||||
*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();
|
||||
}
|
||||
|
||||
// LLM 回复(异步执行,避免审批阻塞主循环)
|
||||
if enable_llm {
|
||||
|
||||
Reference in New Issue
Block a user