如果每次对话都从零开始,Agent 很难持续理解用户和项目;如果把所有历史对话都塞回上下文,系统又会越来越慢、越来越容易受到旧信息干扰。记忆的本质不是“保存更多内容”,而是决定什么值得留下、什么时候取出、如何证明它仍然有效

一、短期上下文和长期记忆

短期记忆是当前任务的工作区:最近的用户消息、工具结果、计划和未解决问题。它服务于当下决策,过期后可以压缩或丢弃。

长期记忆则跨越多个会话保存稳定信息,例如用户明确确认的偏好、项目的架构决策或已经验证的业务规则。长期记忆不应该等同于聊天记录,因为聊天记录包含大量试探、错误和一次性信息。

一条记忆至少应该带有内容、来源、时间和置信度。对于可能变化的事实,还需要失效时间或版本信息:

内容:项目使用 pnpm 作为包管理器
来源:仓库 package.json
确认时间:2026-09-01
状态:当前有效

二、记忆什么时候写入

自动把每句话都存下来,通常会得到一个噪声数据库。更稳妥的写入规则是:

  • 用户明确要求记住的内容,进入候选记忆。
  • 多次重复且对未来任务有帮助的事实,可以提升为长期记忆。
  • 一次性的情绪、猜测和未验证结论,不应默认持久化。
  • 涉及隐私或权限的数据,必须有明确的保存范围和删除方式。

写入前可以让一个独立步骤判断“未来是否会用到”和“来源是否足够可靠”,写入后再去重、分类并关联项目。记忆系统应该允许用户查看和删除,而不是只提供一个不可见的黑盒。

三、RAG 的链路不止是向量搜索

一个可解释的检索流程通常包含:

原始资料 -> 解析与切分 -> 建立索引 -> 查询改写 -> 召回 -> 重排 -> 上下文拼装

切分时要保留标题层级、代码块、表格和来源位置。只按固定字符数切块很容易把定义和条件拆开,导致召回的片段没有足够语义。

向量检索适合寻找语义相近的表达,关键词检索适合精确匹配错误码、类名、版本号和专有名词。两者结合后,再用重排模型根据当前问题重新排序,通常比单一检索更稳定:

方法擅长常见问题
稠密向量同义表达、概念关联精确标识符不一定稳定
稀疏/关键词错误码、名称、版本对改写和隐含语义不敏感
混合召回同时覆盖语义和精确匹配参数和成本更多
重排结合完整问题判断相关性增加延迟和计算量

四、检索结果也必须经过验证

召回了片段,不代表它就是答案。Agent 应该知道每个结论来自哪个文档、哪一段内容,以及文档是否已经过期。对于高风险任务,可以要求它输出证据引用,并在生成后检查结论是否真的被证据支持。

如果多个文档互相冲突,系统不应静默选择其中一个。应该保留版本和时间,明确提示冲突,或者把决策交给用户。知识库的“新鲜度”也是质量指标:一条过期但相关性很高的内容,可能比没有召回更危险。

五、让记忆成为可治理的数据

记忆和知识库都需要生命周期管理:创建、更新、失效、删除和审计。至少应该记录以下指标:

  • 命中率:相关内容是否被召回。
  • 证据覆盖:最终答案中的关键结论是否有来源。
  • 新鲜度:使用的资料距离最后更新多久。
  • 删除完成度:被删除的信息是否从索引、缓存和摘要中一并消失。

在 Agent 中,记忆不是越多越好。好的记忆系统会让模型少问重复问题,却不会让旧结论在没有证据时支配新的事实。

参考阅读

  • 李博杰:《深入理解 AI Agent:设计原理与工程实践》,v1.3,2026-07-29。