Agent 记忆的四层栈与「梦境」回路:读 Anthropic 的记忆组件研究
Anthropic 把 agent 记忆拆成原始记录、笔记、表征与注入四层,并让「梦境」在离线时回看记录、纠错、建 wiki、把重要笔记顶到每轮开头。这篇按四层栈与五组实验数据逐层拆解,并给出可落地的工程清单与中英文精选讲解视频。
一句话 记忆不是把聊天记录存下来,而是在四层之间搬东西:下层真而难用,上层好用而易错;「梦境」(dreaming)就是那个在离线时段负责搬运、纠错与修补的工人。
本文的图按原文的数据与结构重绘;原文自带的十余张图表与截图,见文末的出处链接。
一、痛点:它能看见的只有这一次#

长期对话里的记忆问题有两个方向会同时发作:一是忘——每个新会话从零开始,上周的决策、踩过的坑、验证过的规则全没了;二是胀——为了不忘,把历史一股脑塞进上下文,于是注意力被稀释、成本上升、旧信息还和新事实打架。
Anthropic 在这篇文章开头借了克尔凯郭尔一句:生活只能倒着理解,却必须正着过。记忆设计撞上的是同一件事——在写下一条记忆的那一刻,你并不知道未来会不会需要它。所以真正难的是判断「此刻什么值得记」,以及「记错之后怎么改」。
文章对「agent 记忆」的定义很克制:只指 Claude 从经验(与用户的交互、被交代的任务)中获得、并能跨会话保留下来、作为上下文再读到的知识。它明确排除了另外三样:改权重、单次会话内的 in-context learning、以及压缩(compaction,用摘要替换旧轮次以便在新窗口继续)。
二、四层记忆栈#

把文章里的做法摞起来,是这样四层(这是本文的归纳,原文按主题分节,未画成这样的栈):
| 层 | 是什么 | 谁写它 | 关键约束 |
|---|---|---|---|
| 1 原始层 | 会话记录(transcripts)、日志 | 系统自动 | 唯一的 ground truth;dreaming 拿它校验上面每一层 |
| 2 笔记层 | 规则、验证过的事实、踩过的坑 | 模型在会话中判断着写 | 写什么靠自己判断,比外部规则更有效(见第四节) |
| 3 表征层 | wiki:页 + 链接,相当于一张地图 | dreaming 离线建、改、剪 | 会越写越大,甚至超过原文 |
| 4 注入层 | 每轮开头自动装载的常驻上下文 | 系统装载 + dreaming 上提 | 必须很小:Claude Code 只注入 MEMORY.md 前 200 行 / 25 KB |
第四层的约束是全文最实用的一个工程结论:Claude Code 的自动记忆并不把全部记忆塞进每个会话,只加载 MEMORY.md 的前 200 行(或 25 KB),把这部分当作索引——告诉 Claude「你知道什么、去那里找」。原文还引了自己文档里的一条警告:指令文件越长,遵循度越低。所以顶层要小,dreaming 在顶层的主要工作其实是保持它小:把细节往下挪,只留链接。
三、Dreaming:离线回看,做五件事#

人类的版本是睡眠:海马体在离线时段重放近期经验,逐步蒸馏进新皮层。机器的版本借了 Letta 与 UC Berkeley 提出的 sleep-time compute(arXiv 2504.13171),在两次交互之间的空档里,用算力回看记录、修正错误、产出新的笔记与表征。
五种用法,各有代价:
- 纠错。宝可梦那次最典型:Claude 把 PokéCenter 记在了东侧(错了),走出门宣布「Mt. Moon 已经过了」,几步之后掉下单向台阶,回到原路上。dreaming 拿这条笔记和会话记录对了一遍,抓到错误并重写;修正后它径直走回洞里,最终到达 Cerulean City。没修正的那次,它掉了三次,写下「我要停下来,不想再循环了」,最后退回前一个城镇,整轮没到目标。
- 建表征。在 Stainless 的约 35 万个文件、约 4.2 亿 token 的语料上,让 128 个会话轮流写 wiki:分数随着轮数从 13% 涨到 48%。wiki + 搜索的组合把总分从 54% 推到 61%(只有搜索时 53%),每个问题还省了约 2 万 token。
- 上提注入。把重要笔记顶到每轮开头,Claude 就不用去搜、甚至不需要知道有东西可搜。代价同样明确:注入吃 token,一条错的笔记会被带进每一次会话。
- 聚焦目标。同一批任务,指令不同,长出来的 wiki 完全不同。合同审查那次,最初的共享表被多个 agent 同时改写、丢了关键条款,生成的简报只覆盖了 57 条事实里的 41 条(72%)。让 Claude 反思失败、改写「怎么建 wiki」的指令之后,每份合同独立成页、逐条引用原文,覆盖率达到 100%。
- 补缺口。一次会话里写下的链接可能指向还没建的页;第二轮 dreaming 把 9 个断链改指到已有页面,另补了 3 个新页(含一个索引)。
dreaming 把「记错」从一个不可修的问题变成一个可以用算力修的问题,代价是按轮计费,且只在离线生效,修完的东西不会立刻回到当前会话。
四、五组实验,把直觉换成数字#


CL-Bench 1.0:能不能自己闭环。 任务是一个查库答题的序列,每题答完都被告知正确答案,并允许写记忆。四代模型的差别落在记忆的形状上:Sonnet 4.6 写下一堆未经验证的猜测;Opus 4.7 把笔记合并成一份参考文档,开始标注哪些核实过、哪些还没;Sonnet 5 在评分器确认后才标「已确认」,答错就写更正;Opus 5 第一个闭上环——多数条目同时包含一条规则、它怎么知道这规则成立、以及提前发现的陷阱。Opus 5.5 与 Sonnet 5.5 同样闭环。
宝可梦 Red:什么才算值得记。 同一个起点,Sonnet 3.7 写了 413 个记忆文件、225 个文件夹,只拿到 1 枚徽章;Fable 5 写了 9 个文件、2 个文件夹加一个 global.md,拿到 4 枚。差别在判断力:屏幕上每轮都能读到的信息(钱多少、人在哪)记下来是冗余且迅速过期的;而策略、计划、试出来的规则,不写就会消失。Sonnet 3.7 在第 1 万步附近开始建第四套「master」记忆,接下来 17 步里建了 6 个文件、删了 9 个,游戏里一步没走。
固定规则会削弱强模型。 文章试过给模型一条条规定「该记什么」。把规则设成「只记失败」时,Opus 5 与 Opus 4.7 从记忆里拿到的增益都掉了不少。结论是反直觉的:对强模型,给判断的自由比给固定的规则更有效。反过来,引导对老模型最有用:Sonnet 4.6 常常根本不读记忆目录,提示它「先读记忆、再验证假设」几乎让它的分数翻倍;而 Sonnet 5 不用提示,十次里有九次会先读记忆。
表征有时不值。 在 Harvey LAB 的一份并购文档任务上,24 个问题里有超过一半需要跨文档找信息、做判断或算数:consult wiki 时 87%,只用搜索 73%。但在另一份任务上,简报要点都能从单份文档里检索到,wiki 没有明显增益;还有一次,wiki 长得比原文还大——博尔赫斯那篇《论精确科学》里的地图,终于出现在了上下文里。
五、落地指南与避坑#
- 先分清四层,再动手。把「原始记录(不可改)」和「投影(可重建)」分开。分不开的时候,先加一层存储,不要先加一层模型。
- 常驻层要小到能当索引。参考 200 行 / 25 KB 这个量级:顶层放「我知道什么、去哪找」,细节往下沉,只留链接。
- 告诉它记忆用来干什么,别规定怎么记。CL-Bench 上,只说「有一个记忆文件夹可用」就足以让强模型用起来;写死的规则(比如「只记失败」)反而把增益打掉。
- 给记忆一个能对账的底本。dreaming 之所以能纠错,是因为原始记录还在、且不可改。没有这一层,纠错就变成了两个摘要互相印证。
- 把「上提」当发布流程。一条笔记一旦进入注入层,就等于进了每一次会话;上提前要有校验,错一条的成本是全体会话。
- wiki 要设预算。它会自我膨胀;给页数与体积设上限,或者按访问频率决定保持力度。
- 算出这笔算力账。dreaming 按轮计费。文章的建议是:把 dreaming 聚焦在容易变化的信息上,或者按「记忆被访问的频率」调节奏。
- 多 agent 共享要防写冲突。合同那次的失败很具体:多个 agent 同时改一张共享表,互相覆盖。改成「一份合同一页、一个 agent 写、逐字引用」就好了。
六、精选视频扩展解读#
以下四个视频都经过链接校验。若嵌入播放器无法加载(网络原因),点标题旁的直链可在新窗口打开。
[英文视频 | Anthropic 官方讲解 · 50 分钟]「Agents that remember」——Anthropic 工程师 Kevin 现场演示如何给 agent 挂一个可 grep 的记忆存储,以及 dreaming 这个后台任务如何像睡眠一样自我整理。 核心要点:① 记忆存储按文件系统组织,读写走 bash/grep;② dreaming 在会话之间批处理最近的 transcript;③ 演示落到「你的第二大脑其实是你和 AI 共享的那份长期记忆」。
[英文视频 | 架构拆解 · AI Native DevCon]「Learning while you sleep: Beyond memory to dreaming」——Anthropic 技术 staff Lamis Mukta 讲上下文工程如何演进到自主记忆架构:从 CLAUDE.md、Skills 的渐进披露,到生产级多 agent 记忆与 out-of-band 的 dreaming。
核心要点:① 生产环境里真正的难点是权限与可移植性;② 组织级上下文适合只读,agent 自己的草稿区才该可写;③ dreaming 的价值在于「在任务之外批处理」,而不是更聪明的提示词。
[中文视频 | 实战架构 · 14 分钟]「构建生产级 Agent Memory 的系统架构」(讲大模型的老杨)——从工程视角把记忆系统当成一套要运维的组件来讲:怎么组织写入、怎么检索、怎么与主流程解耦。 核心要点:① 先把「记什么」和「怎么取」拆成两个模块;② 检索质量决定记忆是否被采纳;③ 先在单机跑通再谈共享。
[中文视频 | 分层机制拆解]「自动记忆来了 - Claude Code 记忆系统详解」(01Coder)——把 Claude Code 的记忆机制从头讲清:CLAUDE.md 这类「你教它的规矩」与 auto memory 这类「它自己写的笔记」分别怎么加载、怎么用才合理。
核心要点:① 两套记忆是互补的,不是替代关系;② 分层加载决定了上下文的成本;③ 用法上要区分「项目约定」与「临时发现」。
七、总结与展望#
这篇研究真正给出的,不是「记忆 = 向量库」这种流行答案,而是一套分层 + 离线审计的工程范式:
- 分层解决容量与成本的矛盾:真而难用的放底下,好用而易错的放顶上,顶层只做索引。
- 离线审计解决正确性的矛盾:模型在会话里只能凭当场判断写记忆,那就让它在会话外用算力对账。
- 判断力优先于规则:越强的模型,越应该把「记什么」交给它自己判断;规则是给老模型的拐杖。
对要构建长周期 agent、或所谓「AI 员工」的团队,这里最值得抄的三条是:不可改的原始层、小而稳的注入层、按访问频率调度的 dreaming。文章末尾也把三个开放问题摊开了:记忆应该在会话内写还是离线写(前者牺牲注意力、后者延迟可用性)、如何保持记忆不过期(全量校验不现实,那就挑易变的)、以及能不能把「会话检索」直接当作记忆的地基。
至于「模型会自己学会记」这件事,这篇文章的态度很克制:判断力确实在变好,但没有模型能真的知道下一轮会发生什么。
参考#
- Anthropic,The components of agent memory:https://www.anthropic.com/research/components-of-agent-memory
- Letta & UC Berkeley,sleep-time compute:https://arxiv.org/abs/2504.13171
- CL-Bench 1.0:https://continual-learning-bench.com/news/cl-bench-1-0/
- Claude Code 记忆文档:https://code.claude.com/docs/en/memory
- Cookbook(dreaming):https://platform.claude.com/cookbook/managed-agents-cma-dreaming-with-a-dynamic-workflow
- 知识 wiki 示例:https://github.com/anthropics/claude-quickstarts/tree/main/managed-agents/knowledge-wiki