第 8 章 AI AgentAgentic Patterns记忆

第 8 章 记忆体系:让 Agent 记得住过去

没有记忆的 Agent,每次见面都是陌生人

你有没有这种感觉:用某个 AI 助手,明明上次它已经知道你的项目结构、你的偏好、你踩过的坑,下次开个新会话,它全忘了,又从零开始问你同样的问题。

这就是"无状态"(stateless)的代价。每个会话从零开始,Agent 一次次重新发现那些它早就该知道的事:决策、约束、踩过的坑。多会话的工作流里,这导致大量重复劳动、行为不一致、规划肤浅。

这一章讲记忆体系,核心问题是:怎么让 Agent 记住过去?

  1. Episodic Memory(情景记忆):把"过去的经历"存起来,新任务时检索相关的注入。
  2. Working Memory via TodoWrite(Todo 工作记忆):把"当前进行到哪了"显式记下来。
  3. Memory Synthesis(记忆合成):从执行日志里提炼出可复用的经验。
  4. Filesystem-Based Agent State(文件系统状态):把中间状态落到文件,崩溃了能续上。

模式一:情景记忆(Episodic Memory Retrieval & Injection)

问题

无状态的 Agent 每次处理请求都像失忆:反复发现同样的决策、约束、之前的失败。在多会话工作流里,这带来重复劳动、行为不一致、规划肤浅——因为每一轮都缺少持久的历史背景。

方案

加一个向量库支撑的情景记忆存储

  1. 每次经历后写一条"记忆块":事件、结果、理由,结构化成短记录存进数据库。
  2. 新任务时检索:把当前 prompt 做嵌入(embedding),检索最相似的 top-k 条记忆,作为"提示"注入上下文。
  3. 清理:用 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 一样,很难在脑子里同时追踪超过一把抓得住的条目

要追踪的内容:

  1. 任务状态:待办、进行中、已完成
  2. 阻塞关系:什么卡住了什么
  3. 验证步骤:需要跑的测试或检查
  4. 下一步:接下来做什么

真实数据也支持:分析 88 个会话发现,TodoWrite 用得多的项目(52 次、60 次调用),会话质量普遍更高。

证据

  • 基于 88 个真实会话的分析(emerging,但观察数据实在)。
  • 认知科学的经典理论(Baddeley、Miller)提供了根基。

怎么用

  • 任何多步骤、多轮的任务都该用——这是"最便宜的记忆"。
  • 状态要及时更新:完成了就标完成,别让清单和现实脱节。
  • 把阻塞关系也记下来,让 Agent 知道"为什么停在这"。

取舍

  • 好处:几乎零成本;Agent 和用户都清楚进行到哪了。
  • 代价:需要 Agent 养成及时更新的纪律;清单和现实脱节就没意义了。

模式三:记忆合成(Memory Synthesis from Execution Logs)

问题

每一次任务执行的对话记录里,都有值得沉淀的经验。但直接用它们当记忆,有两个问题:

  • 太具体:"把这个按钮改成粉色"——这不能当通用经验。
  • 相关性未知:很难预测哪些经验对未来任务有用。

日志散落在几百个会话里,洞察被埋没;而全记住是噪音,全忽略又丢了宝藏。

方案

从执行日志里"合成"记忆——不是照抄日志,而是提炼出可复用的经验:

  1. 定期对执行日志做一次"回顾"。
  2. 从中提炼出抽象到合适粒度的经验:不是"按钮改粉色",而是"这个项目里 UI 改动的惯例是 X"。
  3. 把提炼后的经验存成结构化记忆,供未来检索。

关键难点是找到"合适的抽象层级":太具体没用,太笼统也没用。这本身就是一次提炼——通常由另一个模型(或定期的回顾任务)来做。

证据

  • 来自 Anthropic 内部用户和 Claude Code 团队的实践分享。
  • 与"记忆即提炼"的思想一致:记忆的价值在于抽象,不在于堆积。

怎么用

  • 定期(比如每周或每完成一个重要任务)跑一次"日志回顾"。
  • 明确提炼标准:这个经验在什么场景下会复用?抽象到哪一层?
  • 合成后的记忆走第 8 章模式一的检索注入流程。

取舍

  • 好处:把散落的经验变成可复用资产。
  • 代价:回顾本身花成本;抽象层级把握不好会产出没用的记忆。

模式四:文件系统状态(Filesystem-Based Agent State)

问题

很多 Agent 工作流是长时间运行、随时可能被打断的——报错、超时、用户中途介入。如果把所有中间状态都放在模型的上下文窗口里,一旦失败或撞上上下文上限,工作就丢了,得从头再来

方案

让 Agent 把中间结果和工作状态落到文件里,形成持久化的检查点。这样:

  • 工作流可以恢复——崩溃了从检查点继续,而不是从零开始。
  • 失败恢复是确定性的——重跑一遍能看到同样的中间产物。
  • 支持超出单次会话上限的长任务。

文件状态还带来一个额外的好处:可观测性。人可以检查检查点、对比多次重试的中间输出、诊断运行在哪里分叉了。

有个有意思的现象叫"主动状态外化":一些 Agent 在接近上下文上限时,会主动写 SUMMARY.mdCHANGELOG.md——不等人提示,自己就把文件系统当成"扩展的工作记忆"。

证据

  • 来自 Anthropic 工程团队的实践(established,成熟)。
  • "用文件系统当状态"是几乎所有长跑 Agent 的通用做法。

怎么用

  • 长任务、可能被打断的任务,都要考虑状态外化。
  • 设计好"检查点"的格式和落盘时机——什么算一个检查点?
  • 配合第 4 章的委派:子 Agent 的状态也可以落文件,父 Agent 从文件续。

取舍

  • 好处:可恢复、可观测、支持超长任务。
  • 代价:需要设计状态格式和落盘逻辑;文件管理有开销。

四个模式怎么选

场景 推荐模式
跨会话记住"过去的经历" 情景记忆
记住"当前进行到哪了" Todo 工作记忆
把日志沉淀成经验 记忆合成
长任务崩溃了要能续 文件系统状态

四个模式覆盖了记忆的不同层面:当前会话内(Todo、文件状态)和跨会话(情景记忆、记忆合成)。它们组合起来,就是一个从"记一次会话"到"记一生经历"的完整体系。

实践清单

  • 跨会话场景:加向量情景记忆,结构化记录(决策/证据/结果/置信度)
  • 检索用 top-k + 元数据过滤 + TTL 清理
  • 多步骤任务:用 TodoWrite 维护状态、阻塞关系、下一步
  • 定期从执行日志提炼经验,找到合适的抽象层级
  • 长任务:中间状态落文件,形成可恢复检查点
  • 追踪"记忆是否真的改善了结果"

本章小结

  • 情景记忆:过去的经历存起来,需要时检索注入——HumanEval 91% vs 80%。
  • Todo 工作记忆:显式记下"进行到哪了",最便宜的记忆。
  • 记忆合成:从日志里提炼可复用的经验,而不是照抄。
  • 文件系统状态:状态落盘,崩溃可续,可观测。
  • 从"记一次会话"到"记一生经历",这就是记忆体系的进化路径。

下一章,我们讲学习沉淀的最后一环——让 Agent 和团队一起变聪明:跨 Agent 分享经验、技能库进化、身份积累、兑现式信用。

📑 Agent 模式实战:生产级 AI Agent 的工程模式

1 第 1 章 什么是 Agent 模式 2 第 2 章 规划-执行-观察:先想清楚,再动手 3 第 3 章 反思闭环:让 Agent 学会检查自己的作业 4 第 4 章 委派:让主 Agent 学会把活分出去 5 第 5 章 上下文预算治理:把 token 当成钱来管 6 第 6 章 上下文压缩与精选:装不下怎么办 7 第 7 章 上下文最小化:别让脏东西留在脑子里 8 第 8 章 记忆体系:让 Agent 记得住过去 9 第 9 章 学习沉淀:让 Agent 和团队一起变聪明 10 第 10 章 工具接口哲学:让 Agent 能用、好用、用得起 11 第 11 章 工具发现:让 Agent 在几百个工具里找到对的 12 第 12 章 执行环境:Agent 在哪动手、怎么动手 13 第 13 章 代码执行与沙箱:先写码,再跑码 14 第 14 章 结构化输出与契约:让 Agent 的输出能接住 15 第 15 章 验证循环:Agent 怎么检查自己的作业 16 第 16 章 评测基建:怎么系统地检验 Agent 17 第 17 章 可观测性:看见 Agent 在想什么、在干嘛 18 第 18 章 韧性工程:扛得住部分失效 19 第 19 章 威胁模型:先看风险长什么样,再谈防御 20 第 20 章 控制流隔离:把"谁做决定"和"谁执行"分开 21 第 21 章 权限与审批:谁有权干什么、谁点头 22 第 22 章 凭据与出口:Agent 手里的钥匙和门 23 第 23 章 多智能体信任:多个 Agent 之间怎么互信、怎么审计 24 第 24 章 反馈信号设计:给 Agent 的是信号,不是更大的提示词 25 第 25 章 评测驱动的改进:让 Agent 在真实使用和对抗测试里变强 26 第 26 章 强化学习:把反馈变成训练信号 27 第 27 章 复合式进化:让 Agent 系统越用越值钱 28 第 28 章 多智能体协调:让一群 Agent 一起干活不掉链子 29 第 29 章 模型路由:谁用哪个模型,怎么用得起 30 第 30 章 推理搜索结构:让 Agent 多想想,而不是一条道走到黑 31 第 31 章 控制谱系:从自动补全到完全自主的滑动条 32 第 32 章 团队与产品:把 Agent 变成团队资产,而不是个人玩具
← 返回本书大纲