Back to Logs
Archive 2026年4月10日 3 min read

Agent 记忆系统:上下文窗口之外,知识如何留下来

短期状态、工作记忆、长期记忆和检索策略,决定 Agent 是否真的会成长。

AgentMemoryRAGState

Agent 记忆系统:上下文窗口之外,知识如何留下来

如果说规划决定 Agent 如何行动,那么记忆决定它是否能积累。
没有记忆的 Agent,哪怕单次表现很好,也更像一次次重新开机的工具;有记忆但不会管理的 Agent,则很容易被过期信息和错误摘要拖垮。

所以我现在越来越把记忆系统看成 Agent 研究里最容易被低估、但最影响长期体验的部分。

记忆不等于向量数据库

很多讨论一提到 Agent memory,就直接跳到向量检索。
但向量数据库只是存储和召回的一种技术形式,不是完整的记忆设计。

一个更完整的记忆系统,至少要回答四个问题:

  • 什么值得写入
  • 以什么粒度写入
  • 什么时候取回
  • 什么时候应该忘掉

如果这四件事没有想清楚,系统就会很快堆满“似乎有用、实际上没人再看的碎片”。

我更认可的分层记忆结构

1. 工作记忆

这是最靠近当前任务的一层。
它不追求长期保存,而是帮助 Agent 在当前链路里维持状态,比如:

  • 正在处理的目标
  • 已经完成的步骤
  • 临时约束
  • 本轮工具输出的关键结果

这一层更像白板,不像档案室。

2. 情节记忆

情节记忆记录的是“发生过什么”。
它适合保存一次任务的关键轨迹,例如:

  • 用户提出过什么偏好
  • 某个方案为什么被放弃
  • 某个工具在哪类任务里经常失败

这类信息对后续同类任务特别重要,因为它提供的是经验,而不是知识点。

3. 语义记忆

语义记忆更稳定,适合保存被抽象过的事实与规则。
比如:

  • 项目结构
  • 术语定义
  • 长期有效的配置约束
  • 某个用户的稳定偏好

这一层如果写得好,Agent 的“熟悉感”会明显增强;写得不好,就会把旧事实当真理一直带下去。

真正困难的是写入策略

我现在对记忆系统最强烈的判断是:
检索问题固然重要,但写入问题更先决定上限。

因为一旦写错,后面每次检索都可能把错误重新带回来。
这类错误比单次 hallucination 更麻烦,它会呈现出一种“系统很自信地持续记错”的状态。

所以写入策略至少要有这几个原则:

  • 默认少写,而不是默认全写
  • 先压缩成摘要,再进入长期层
  • 只写对未来任务有复用价值的信息
  • 对不确定信息打上来源和时间标记

检索不该只是“相似度最高”

相似度召回很方便,但很多任务并不真的需要“最像”的内容,而是需要“最相关的那一层”。

比如同样是写文章:

  • 有时需要最近一次相关任务的风格偏好
  • 有时需要项目的长期分类规范
  • 有时只需要当前会话刚刚确认过的一句话

如果所有记忆都丢进同一个池子里,Agent 看起来像“有很多资料”,实际却很难在正确的时刻拿到正确的东西。

忘记也是能力的一部分

我们习惯把记忆做成越多越好,但长期系统里,忘记几乎同样重要。
原因很简单:过期偏好、过时架构、已失效的任务上下文,都会在后续交互中制造噪声。

我比较看重下面几种“可控遗忘”机制:

  • 基于时间衰减的降权
  • 基于验证失败的标记失效
  • 基于覆盖更新的旧版本归档
  • 基于任务范围的自动清理

这类设计的目标不是让 Agent 记得少,而是让它记得更干净。

结尾

很多人希望 Agent 像一个越来越懂你的助手,但如果没有可靠记忆,这种“越来越懂”只会停留在想象里。
而如果记忆机制设计得草率,它又会很快从“懂你”滑向“自信地误解你”。

所以在我看来,记忆系统不是 Agent 的附属模块,它几乎就是长期智能体验本身。

Giscus

Discuss this log

这篇文章的评论会同步到 GitHub Discussions。