Agent 记忆系统:上下文窗口之外,知识如何留下来
短期状态、工作记忆、长期记忆和检索策略,决定 Agent 是否真的会成长。
Agent 记忆系统:上下文窗口之外,知识如何留下来
如果说规划决定 Agent 如何行动,那么记忆决定它是否能积累。
没有记忆的 Agent,哪怕单次表现很好,也更像一次次重新开机的工具;有记忆但不会管理的 Agent,则很容易被过期信息和错误摘要拖垮。
所以我现在越来越把记忆系统看成 Agent 研究里最容易被低估、但最影响长期体验的部分。
记忆不等于向量数据库
很多讨论一提到 Agent memory,就直接跳到向量检索。
但向量数据库只是存储和召回的一种技术形式,不是完整的记忆设计。
一个更完整的记忆系统,至少要回答四个问题:
- 什么值得写入
- 以什么粒度写入
- 什么时候取回
- 什么时候应该忘掉
如果这四件事没有想清楚,系统就会很快堆满“似乎有用、实际上没人再看的碎片”。
我更认可的分层记忆结构
1. 工作记忆
这是最靠近当前任务的一层。
它不追求长期保存,而是帮助 Agent 在当前链路里维持状态,比如:
- 正在处理的目标
- 已经完成的步骤
- 临时约束
- 本轮工具输出的关键结果
这一层更像白板,不像档案室。
2. 情节记忆
情节记忆记录的是“发生过什么”。
它适合保存一次任务的关键轨迹,例如:
- 用户提出过什么偏好
- 某个方案为什么被放弃
- 某个工具在哪类任务里经常失败
这类信息对后续同类任务特别重要,因为它提供的是经验,而不是知识点。
3. 语义记忆
语义记忆更稳定,适合保存被抽象过的事实与规则。
比如:
- 项目结构
- 术语定义
- 长期有效的配置约束
- 某个用户的稳定偏好
这一层如果写得好,Agent 的“熟悉感”会明显增强;写得不好,就会把旧事实当真理一直带下去。
真正困难的是写入策略
我现在对记忆系统最强烈的判断是:
检索问题固然重要,但写入问题更先决定上限。
因为一旦写错,后面每次检索都可能把错误重新带回来。
这类错误比单次 hallucination 更麻烦,它会呈现出一种“系统很自信地持续记错”的状态。
所以写入策略至少要有这几个原则:
- 默认少写,而不是默认全写
- 先压缩成摘要,再进入长期层
- 只写对未来任务有复用价值的信息
- 对不确定信息打上来源和时间标记
检索不该只是“相似度最高”
相似度召回很方便,但很多任务并不真的需要“最像”的内容,而是需要“最相关的那一层”。
比如同样是写文章:
- 有时需要最近一次相关任务的风格偏好
- 有时需要项目的长期分类规范
- 有时只需要当前会话刚刚确认过的一句话
如果所有记忆都丢进同一个池子里,Agent 看起来像“有很多资料”,实际却很难在正确的时刻拿到正确的东西。
忘记也是能力的一部分
我们习惯把记忆做成越多越好,但长期系统里,忘记几乎同样重要。
原因很简单:过期偏好、过时架构、已失效的任务上下文,都会在后续交互中制造噪声。
我比较看重下面几种“可控遗忘”机制:
- 基于时间衰减的降权
- 基于验证失败的标记失效
- 基于覆盖更新的旧版本归档
- 基于任务范围的自动清理
这类设计的目标不是让 Agent 记得少,而是让它记得更干净。
结尾
很多人希望 Agent 像一个越来越懂你的助手,但如果没有可靠记忆,这种“越来越懂”只会停留在想象里。
而如果记忆机制设计得草率,它又会很快从“懂你”滑向“自信地误解你”。
所以在我看来,记忆系统不是 Agent 的附属模块,它几乎就是长期智能体验本身。
Discuss this log
这篇文章的评论会同步到 GitHub Discussions。