第 8 章 记忆体系:让 Agent 记得住过去
没有记忆的 Agent,每次见面都是陌生人
你有没有这种感觉:用某个 AI 助手,明明上次它已经知道你的项目结构、你的偏好、你踩过的坑,下次开个新会话,它全忘了,又从零开始问你同样的问题。
这就是"无状态"(stateless)的代价。每个会话从零开始,Agent 一次次重新发现那些它早就该知道的事:决策、约束、踩过的坑。多会话的工作流里,这导致大量重复劳动、行为不一致、规划肤浅。
这一章讲记忆体系,核心问题是:怎么让 Agent 记住过去?
- Episodic Memory(情景记忆):把"过去的经历"存起来,新任务时检索相关的注入。
- Working Memory via TodoWrite(Todo 工作记忆):把"当前进行到哪了"显式记下来。
- Memory Synthesis(记忆合成):从执行日志里提炼出可复用的经验。
- Filesystem-Based Agent State(文件系统状态):把中间状态落到文件,崩溃了能续上。
模式一:情景记忆(Episodic Memory Retrieval & Injection)
问题
无状态的 Agent 每次处理请求都像失忆:反复发现同样的决策、约束、之前的失败。在多会话工作流里,这带来重复劳动、行为不一致、规划肤浅——因为每一轮都缺少持久的历史背景。
方案
加一个向量库支撑的情景记忆存储:
- 每次经历后写一条"记忆块":事件、结果、理由,结构化成短记录存进数据库。
- 新任务时检索:把当前 prompt 做嵌入(embedding),检索最相似的 top-k 条记忆,作为"提示"注入上下文。
- 清理:用 TTL(过期时间)或衰减评分,淘汰过时的记忆。
关键设计:记忆要写成结构化记录(决策、证据、结果、置信度),而不是原始对话转储。结构化记忆能减少重复输出、提升推理质量(ParamMem 2026 的研究)。检索时按任务范围和时效过滤,让注入的记忆提升推理质量,而不是引入检索噪音。
一个漂亮的数据:结合自我反思的情景记忆,在 HumanEval 上达到 91% 的 pass@1,而基线只有 80%(Reflexion,NeurIPS 2023)。
证据
- Reflexion(Shinn 等人,NeurIPS 2023)给出了 91% vs 80% 的提升数据。
- Cursor、Windsurf 等生产工具都实现了类似机制(
validated-in-production)。
怎么用
- 适合多会话编码 Agent、支持助手、长跑研究型工作流。
- 从小
top-k开始,加严格的元数据过滤(任务、仓库、所有者、时间戳)。 - 加记忆质量复查任务,清掉低价值或互相矛盾的记忆。
- 追踪"检索到的记忆是否真的改善了结果"。
取舍
- 好处:更强的连续性,少犯重复错误。
- 代价:记忆没整理好会引入检索噪音;存储有成本。
模式二:Todo 工作记忆(Working Memory via TodoWrite)
问题
复杂的多步骤任务里,Agent 经常记不住进行到哪了:
- 哪些任务待办、进行中、已完成?
- 哪些任务被依赖阻塞?
- 有哪些验证步骤要跑?
- 上下文切换之后,下一步该干什么?
结果就是重复劳动、任务被遗忘、用户一头雾水。
方案
用 TodoWrite(或等价的状态外化工具)维护显式的会话工作记忆。这既是给 Agent 自己看的,也是给用户看的。
理论基础很扎实:外部化工作记忆,对应 Baddeley 的情景缓冲模型和 Miller 的 7±2 容量限制——人类和 LLM 一样,很难在脑子里同时追踪超过一把抓得住的条目。
要追踪的内容:
- 任务状态:待办、进行中、已完成
- 阻塞关系:什么卡住了什么
- 验证步骤:需要跑的测试或检查
- 下一步:接下来做什么
真实数据也支持:分析 88 个会话发现,TodoWrite 用得多的项目(52 次、60 次调用),会话质量普遍更高。
证据
- 基于 88 个真实会话的分析(
emerging,但观察数据实在)。 - 认知科学的经典理论(Baddeley、Miller)提供了根基。
怎么用
- 任何多步骤、多轮的任务都该用——这是"最便宜的记忆"。
- 状态要及时更新:完成了就标完成,别让清单和现实脱节。
- 把阻塞关系也记下来,让 Agent 知道"为什么停在这"。
取舍
- 好处:几乎零成本;Agent 和用户都清楚进行到哪了。
- 代价:需要 Agent 养成及时更新的纪律;清单和现实脱节就没意义了。
模式三:记忆合成(Memory Synthesis from Execution Logs)
问题
每一次任务执行的对话记录里,都有值得沉淀的经验。但直接用它们当记忆,有两个问题:
- 太具体:"把这个按钮改成粉色"——这不能当通用经验。
- 相关性未知:很难预测哪些经验对未来任务有用。
日志散落在几百个会话里,洞察被埋没;而全记住是噪音,全忽略又丢了宝藏。
方案
从执行日志里"合成"记忆——不是照抄日志,而是提炼出可复用的经验:
- 定期对执行日志做一次"回顾"。
- 从中提炼出抽象到合适粒度的经验:不是"按钮改粉色",而是"这个项目里 UI 改动的惯例是 X"。
- 把提炼后的经验存成结构化记忆,供未来检索。
关键难点是找到"合适的抽象层级":太具体没用,太笼统也没用。这本身就是一次提炼——通常由另一个模型(或定期的回顾任务)来做。
证据
- 来自 Anthropic 内部用户和 Claude Code 团队的实践分享。
- 与"记忆即提炼"的思想一致:记忆的价值在于抽象,不在于堆积。
怎么用
- 定期(比如每周或每完成一个重要任务)跑一次"日志回顾"。
- 明确提炼标准:这个经验在什么场景下会复用?抽象到哪一层?
- 合成后的记忆走第 8 章模式一的检索注入流程。
取舍
- 好处:把散落的经验变成可复用资产。
- 代价:回顾本身花成本;抽象层级把握不好会产出没用的记忆。
模式四:文件系统状态(Filesystem-Based Agent State)
问题
很多 Agent 工作流是长时间运行、随时可能被打断的——报错、超时、用户中途介入。如果把所有中间状态都放在模型的上下文窗口里,一旦失败或撞上上下文上限,工作就丢了,得从头再来。
方案
让 Agent 把中间结果和工作状态落到文件里,形成持久化的检查点。这样:
- 工作流可以恢复——崩溃了从检查点继续,而不是从零开始。
- 失败恢复是确定性的——重跑一遍能看到同样的中间产物。
- 支持超出单次会话上限的长任务。
文件状态还带来一个额外的好处:可观测性。人可以检查检查点、对比多次重试的中间输出、诊断运行在哪里分叉了。
有个有意思的现象叫"主动状态外化":一些 Agent 在接近上下文上限时,会主动写 SUMMARY.md 或 CHANGELOG.md——不等人提示,自己就把文件系统当成"扩展的工作记忆"。
证据
- 来自 Anthropic 工程团队的实践(
established,成熟)。 - "用文件系统当状态"是几乎所有长跑 Agent 的通用做法。
怎么用
- 长任务、可能被打断的任务,都要考虑状态外化。
- 设计好"检查点"的格式和落盘时机——什么算一个检查点?
- 配合第 4 章的委派:子 Agent 的状态也可以落文件,父 Agent 从文件续。
取舍
- 好处:可恢复、可观测、支持超长任务。
- 代价:需要设计状态格式和落盘逻辑;文件管理有开销。
四个模式怎么选
| 场景 | 推荐模式 |
|---|---|
| 跨会话记住"过去的经历" | 情景记忆 |
| 记住"当前进行到哪了" | Todo 工作记忆 |
| 把日志沉淀成经验 | 记忆合成 |
| 长任务崩溃了要能续 | 文件系统状态 |
四个模式覆盖了记忆的不同层面:当前会话内(Todo、文件状态)和跨会话(情景记忆、记忆合成)。它们组合起来,就是一个从"记一次会话"到"记一生经历"的完整体系。
实践清单
- 跨会话场景:加向量情景记忆,结构化记录(决策/证据/结果/置信度)
- 检索用 top-k + 元数据过滤 + TTL 清理
- 多步骤任务:用 TodoWrite 维护状态、阻塞关系、下一步
- 定期从执行日志提炼经验,找到合适的抽象层级
- 长任务:中间状态落文件,形成可恢复检查点
- 追踪"记忆是否真的改善了结果"
本章小结
- 情景记忆:过去的经历存起来,需要时检索注入——HumanEval 91% vs 80%。
- Todo 工作记忆:显式记下"进行到哪了",最便宜的记忆。
- 记忆合成:从日志里提炼可复用的经验,而不是照抄。
- 文件系统状态:状态落盘,崩溃可续,可观测。
- 从"记一次会话"到"记一生经历",这就是记忆体系的进化路径。
下一章,我们讲学习沉淀的最后一环——让 Agent 和团队一起变聪明:跨 Agent 分享经验、技能库进化、身份积累、兑现式信用。