413 个记忆文件只换来 1 枚徽章,9 个文件换来 4 枚——而把笔记改对的那一步,发生在干完活之后
The components of agent memory
11 月 6 日,Anthropic 的 Engineering 栏目放出一篇讲 agent 记忆的长文。它不讨论该用向量库还是知识图谱,而是先把「记忆」切成两个完全不同的动作:干活当场判断什么值得写下来,和干完活之后回头拿原始录像核对一遍已经写下来的东西。后一个动作他们起了个名字叫「做梦」(dreaming),而全文的主张就是:第一个动作天生不可靠——你在当场不可能知道后面会发生什么,所以必须有第二个动作来兜底。
值得读有两层。第一层,它把「记忆」的边界划得很干净:这里说的记忆只指 Claude 从经历里得到、并且跨会话留下来的那部分上下文,不含改权重、不含单次对话里的上下文学习、也不含 compaction(把前面的对话轮次换成摘要以便接着干)。这条线一划,很多争论就落地了——记忆不是学习,它就是一份你自己管理的文件,会写错也会过期。第二层,这是少见的「反着给建议」的工程文章:模型越强,越不该给它记忆规则。这跟本栏第 18 篇「别急着上多智能体」、第 15 篇上下文工程是同一个调子,也跟第 67 篇对得上——那篇把 agent 走过的弯路存下来当模拟器,这篇把它存下来当错题本。
「做梦」不是比喻,是一个有出处的分工
文章开头引的是海马体:人在经历当场就把事情记下来,但只有一部分会被固化成长期知识,而固化大多发生在「离线」的时候——睡觉和安静发呆时,海马体反复回放近期经历,一点点蒸馏进新皮层。agent 可以照这个分工办:干活时随手写进一个记忆目录,整理、纠错、重组交给空闲时的另一趟运行。这想法有近亲:Letta 与加州大学伯克利提出的 sleep-time compute,让模型利用两次交互之间的空闲预先整理上下文;Google Research 今年则直接管这类离线固化叫 sleep 框架。这篇的贡献不在提出概念,在于把「做梦到底能干哪几件具体事」逐条做成了评测。
413 个文件 1 枚徽章,9 个文件 4 枚徽章
先看当场判断的那一半。他们让 Claude 玩《宝可梦 红》来测「什么值得记」:给一个可读可写的记忆文件夹,看它走到第一万步时攒出了什么。Sonnet 3.7 认定什么都可能有用——225 个文件夹、413 个记忆文件,每场战斗、每件道具、每个路人各存一份,最后拿到 1 枚徽章;Fable 5 写了 9 个文件、2 个文件夹,外加一个顶层 global.md,拿到 4 枚。差别不在勤快,在于分得清什么是屏幕上随时读得到的(钱、坐标)、什么是不写下来就会消失的(策略、计划、试出来的规律)。前者存下来就在过期,后者存下来才有复利。原文有个很刺的细节:Sonnet 3.7 在第一万步前后开始建它的第四个「master」记忆文件夹,接下来 17 步里建了 6 个文件、删了 9 个,游戏里一步没走。Fable 5 的 global.md 则是一张仪表盘:当前目标、打道馆的预案、以及它给自己定的记忆使用规则——其中一条是连续七个精灵球没抓住一条鲤鱼王之后写的:「如果连续 3 个球失败,就改变节奏,在菜单操作之间多插几次等待。」
另一半是「怎么让它去记」,结论反直觉。在 CL-Bench 1.0(专门测 agent 靠记忆完成长程任务的基准)的数据库问答任务上,每道题开一个全新会话,唯一跨会话留下来的就是那个记忆目录;他们只说「有个记忆目录可用」,不教怎么用。能力分层立刻清楚了:Sonnet 4.6 只到「为答错编几条猜想」,文件里全是没验证过的假设;Opus 4.7 会把笔记合并成一份总文档并标注哪条已核实;Sonnet 5 等打分器判定后回头把答案标成「已确认」;Opus 5 是第一个真正闭环的——每条记录里有规则、有「我凭什么知道这条成立」、有旧题答案,还有沿路踩到的坑的警告。而一给规则就坏事:把指令改成「只记失败」,Opus 5 和 Opus 4.7 从记忆里拿到的增益大半蒸发。给弱模型加指令反倒管用——提示 Sonnet 4.6「先读记忆再作答、然后去验证你的猜想」,分数几乎翻倍;而 Sonnet 5 不用提示,十次里九次自己先读了记忆,Sonnet 4.6 不到一半。所以操作建议只有一句:告诉它记忆是干什么用的,别告诉它怎么用。
做梦具体干四件事:纠错、建图、提拔、补洞
第一件是纠错。宝可梦里的月见山是个洞穴,西侧进东侧出,入口附近有个单向台阶,踩下去会掉回来路。Claude 拿入口的治疗中心当地标,却在笔记里把治疗中心写成了东侧,于是走出治疗中心时宣布「月见山在我身后」,顺手把笔记改成「月见山 DONE」,几步后掉下台阶回到原路;导航工具没显示落差,它的结论是「我往西过头了」。做梦这一趟的全部动作,就是拿笔记去跟当时的会话录像比对——录像是地面真相,于是错被抓出来、改掉。改过的那一版直接回洞里走到了下一座城;没改的那一版掉回去三次,最后写下「我不再这么循环下去了」。第二件是建地图:让 Claude 对着一堆文档自己写一个互相链接的 wiki。他们拿 Stainless 留下的内部文档试——约 35 万份、4.2 亿 token,出 25 道题。做梦轮数从 2 加到 128,只靠 wiki 答题从 13% 涨到 48%;但真正该看的是组合账:wiki 加搜索从 54% 涨到 61%,只用搜索是 53%,而且每题省下约 2 万 token。wiki 不是用来替代搜索的,是用来省搜索的。它也有不灵的地方:在 Harvey LAB(给一堆文件、要求生成法律摘要并逐条打分的基准)里,需要跨多份文件拼信息的题目上 wiki 拿 87%、纯搜索 73%,而答案都在单份文件里、一次检索就够的题目上 wiki 毫无优势;有一次 wiki 甚至长得比原始文档还大——原文拿博尔赫斯笔下那个把地图画成和帝国一样大的制图师作比,一份什么都不省略的摘要,等于没有摘要。
第三件是提拔:把重要笔记顶到记忆层级最上层,由 harness 在每个新会话开始时直接注进上下文,这样 Claude 连「要去搜什么」都不必知道。但这一层既贵又危险——注入要占 token,一条错笔记会被带进之后每一个会话,而且加载了不等于它会照做(原文援引 Claude Code 自己的文档:指令文件越长,遵守度越低)。所以做梦在这一层的主要工作不是往上堆,是往下赶:把细节挪到下层、上面只留链接。Claude Code 的自动记忆就是这个形状——只读进 MEMORY.md 的前 200 行或 25 KB,这一层是索引,不是内容。第四件是补洞:单个会话只看得到自己那点上下文,常会链到还没建的页面,第二趟做梦在一个任务里揪出 9 条指向缺失页面的链接重定向掉,还补了 3 个新页面(含一个索引)。同一节里还有个更值钱的发现:某个法律任务一开始让多个 agent 往同一张共享的合同条款表上写,互相覆盖,57 个该进去的事实只剩 41 个(72%);改成一份合同一个 agent、各写各的页面、条款逐字照抄不做总结,57 个全在,100%——而这套新指令不是人想出来的,是让 Claude 反省失败、提议改指令、重建 wiki,这样循环出来的。
本文为 AKL AI Club 原创撰写的导读,不是原文翻译;著作权归原文作者所有。 篇目由编辑独立选取,来源均经人工核实。