Skip to content

上下文压缩丢失近期对话,并注入其他 session 的内容片段

问题

当上下文达到 100% 触发自动压缩时,压缩后的摘要会丢失最近几轮对话,同时注入来自其他不相关 session 的内容片段。表现为:

  • agent 回复时不认识用户,或引用了不属于当前对话的信息
  • 刚才讨论的内容在压缩后消失
  • 偶尔出现"另一个 session 的记忆"被插入当前对话

复现步骤

  1. 进行多轮对话,使上下文接近 100%
  2. 等待上下文压缩自动触发
  3. 观察:agent 对当前用户身份和刚才讨论的内容失去记忆

解决方案

根本原因很可能在 run_agent.py:6790-6792

python
self._session_db.end_session(self.session_id, "compression")
old_session_id = self.session_id
self.session_id = f"{datetime.now().strftime('%Y%m%d_%H%M%S')}_{uuid.uuid4().hex[:6]}"

压缩时创建了新的 session_id,导致 session 分裂。旧 session 的完整 transcript 保存在原 session 下,但新 session 的记忆检索可能会误召回其他 session 的内容片段(向量相似度命中了不相关的历史)。

临时缓解方案

  • 手动执行 /new 命令在上下文满之前主动重置 session,避免触发自动压缩
  • 减少单次对话的上下文使用量(缩短系统 prompt、减少工具调用输出)

期待修复:压缩时应在同一 session_id 下继续,或确保新 session 只读取属于自身的记忆片段。

Issue#9413