Agent记忆四组件与dreaming:128轮达标率13%到48%,建一次wiki约19美元
官方把做梦写成可跑的代码:128 轮之后达标率才从 13% 爬到 48%
给智能体加记忆,最常见的做法是让它把要紧事写进文件,下次开会话先读一遍。Anthropic 在 11 月 6 日发布的《The Components of Agent Memory》把这条路的几个想当然挨个推翻了一遍:写得多不等于记得牢,定死规则会把增益吃掉,而把记忆整理到位需要的轮数比直觉多出两个数量级。

文章给出的几组数都是自家的实验,没有第三方复核,这一点它自己在图注里也写了。值得花时间读的原因是它没有只停在方法论上——同一周,配套的可跑代码落进了官方 quickstart 仓库,notebook 里每一格都带着真实运行的输出,花了多少钱、写出多少个文件、哪些链接是断的,全都摊开在页面上。
四层东西,加一个离线机制
文章先把「记忆」这个词的边界划清:指 Claude 从经验里得到、跨会话留存、以之后能读到的上下文形式保存的知识。改权重不算,单次对话里的 in-context learning 不算,把旧回合换成摘要好腾出上下文窗口的 compaction 也不算。
剩下的部分被拆成四层,从下往上是可检索的逐字记录(transcripts)、Claude 自己写的记忆笔记(memory notes)、由笔记和记录算出来的知识表征(wiki 属于这一层)、以及每次开会话都直接装进上下文的注入内容(injected context)。

跨在这四层上的离线动作就是 dreaming:拿会话的逐字记录回头检查已经写下的笔记,改错的、合重复的、补链接、把要紧的往上层提。名字的来处是人的记忆固化——海马体在睡眠和安静休息时重放白天的经历,把经验蒸馏进新皮层。这个类比不是装饰,它决定了整套设计的骨架:记忆是在当下写下的预测,而预测需要拿事后才知道的结果来复核。写下「这条规则以后还用得上」是一个预测,写下「这个事实已经核实过、不用再查」也是一个预测。既然会错,纠错就得是必需品而不是补充件。
文章在这套架构上做了六组实验,反直觉的结果大多出在这六组里。
六个模型用记忆的六种姿势
CL-Bench 1.0 里有个数据库任务:让模型连续答一批题,每题答完告它正确答案,它可以往记忆目录里写东西帮自己答后面的题。每道题都开一个全新会话,唯一的例外是能读一个跨会话留存的目录。
这条尺子量出来的不是「谁更准」,而是谁真的把记忆用成了学习回路。

Sonnet 4.6 停在「猜」这一步,目录里散着几个文件,每个列了几条没验证过的想法。Opus 4.7 把笔记合进一份参考文档,开始区分哪些事实查过、哪些还没确认。Sonnet 5 在判卷核对之后把每条答案标成 confirmed,答错就写更正。Opus 5 是第一个闭环的:多数条目里有规则、有它凭什么知道这条规则为真、有早前题目的答案,还有沿途踩到的坑的警告。Opus 5.5 和 Sonnet 5.5 同样闭环,带记忆时分数和 Opus 5 差不多,但它们不带记忆的基线更高一些。
图上的具体数值是 Opus 5.5 从 0.655 到 0.838、Sonnet 5.5 从 0.644 到 0.833、Opus 5 从 0.564 到 0.828、Opus 4.7 从 0.383 到 0.700、Sonnet 5 从 0.306 到 0.610。六组里唯一几乎没动的是 Sonnet 4.6,0.330 到 0.364。
这里有个读图上的坑值得单独说一句:正文只给了定性描述,所有精确分数都只在图里。想引用「涨了多少」,只能去读柱状图上的数字标签,正文里找不到。
413 个文件和 10 个文件
判断「什么值得记」这件事,用宝可梦来测比用问答更直观,因为游戏状态一直在变,记下来的东西多快过期一目了然。每次开局给模型一个可以读写的目录,跑到第 1 万步左右看那个目录长什么样。

Sonnet 3.7 假设一切都可能有用,于是见什么都写,225 个目录里堆了 413 个文件、977,930 个字符,打赢的每一仗、捡到的每一件道具、碰到的每个 NPC 都单独成篇,最后拿到 1 枚徽章。Fable 5 在同一个第 9,989 步只有 10 个文件、43,406 个字符,两个子目录加一个顶层的 global.md,拿到 4 枚徽章。
Sonnet 3.7 的问题主要不在啰嗦,在于它记的东西一直在过期。玩家身上有多少钱、此刻在地图哪个位置,这些每屏都能读到,存下来是冗余;而它记的偏偏就是这类。到第 1 万步前后,它开始建第四个「master」记忆目录,之后 17 步里新建 6 个文件、删掉 9 个,游戏里一个动作都没做。整理记忆吃掉的步数,直接就是没打的关卡。
Fable 5 只写游戏不会明说的东西:策略、计划、验证过的规则。global.md 是仪表盘,装着当前目标、打馆的预案、以及它自己定的记忆使用规则;locations 目录放路线规划,gameplay 目录放从机制里总结的策略。连丢 7 个球没抓住鲤鱼王之后,它写下的是「连续 3 个以上球失败时,改变时机(在菜单步骤之间多插几次 wait)——这样试过之后球就落在了」。Opus 5.5 走的是同一条路,一个小目录记当前目标和下一步,边打边重写,最后通关。
把规则定死,增益就没了
文章在引导方式上做了两组对照,结论对做 agent 的人更实用。

一条都没给的时候,Sonnet 4.6 在数据库任务上 0.330;只告诉它「有个记忆目录可用」,涨到 0.364;再补一句「答题前先读记忆文件,然后把你的猜想拿去验证」,跳到 0.641,三次的均值,标准差画在误差棒上。这个提示对老模型帮助最大,因为 Sonnet 4.6 本来就不大去读目录里的文件,也不验证自己的猜想。Sonnet 5 不用提示就自己会读,10 次里有 9 次答题前先读记忆,Sonnet 4.6 做不到一半。
另一组反过来:给每个模型定一条硬规则,每次一条,看这条规则让记忆增益变好还是变坏。「只记录失败」这条规则把 Opus 5 的增益削掉 0.234(3 次),Opus 4.7 削掉 0.150(3 次),Sonnet 4.6 只削 0.020(1 次)。越强的模型被固定规则伤得越重。
于是官方给前沿模型的做法收敛成一句话:告诉它记忆是干什么用的,别告诉它怎么用。默认只给一条简单引导——别人要求它记、或者明显有值得记的东西时才写,剩下的判断留给模型自己。
一个单向下落台
dreaming 修记忆的例子挑得很具体,因为它同时说明了两件事:错记忆怎么把人带沟里,以及为什么必须拿逐字记录当基准。
月亮山顶是条隧道,入口在地图西侧、出口在东侧,入口附近有个陷阱:一处只能往下跳的单向下落台,跳下去就回到你来的那条路,没有爬回来的办法。Claude 把入口边的宝可梦中心当地标,所以它往哪边走,取决于它认为宝可梦中心在山的哪一侧。
某一次它把宝可梦中心记错了,写成在山东侧。走出宝可梦中心时它宣布「月亮山在我身后」,顺手更新笔记「月亮山已过」。但月亮山不在它身后。几步之后它走过下落台掉回原路,而导航工具没显示那处落差,于是它判定「我往西走过头了」,认定自己一直在正确的一侧。它并没有。

把这条笔记拿去 dreaming 一轮,Claude 对照会话逐字记录发现了错处并重写。拿着修正后的笔记,它说的是「现在得找到月亮山的洞口重新进去」,进了洞,最后到了 Cerulean City。没修正的那次,它掉回原路三次,第三次失败后写下「我停下来,别再循环了」,而自动回复指令让它继续,于是它一路退回山前的深灰市去补血补给,整个 run 结束都没到 Cerulean City。完全不给记忆的那次,同样没能过山。
这个案例里最要紧的不是记忆写错,而是它把错记忆当成了既定事实来更新。第一句「月亮山在我身后」立刻被写进笔记变成「已过」,之后所有推理都在这个前提上跑。逐字记录在这里的作用是提供了一个不经过模型叙述的事实基准——工具返回的结果记的是发生了什么,而模型的总结只记它愿意说的那部分。
wiki 值不值得建,四笔账
表征层的实验占了文章后半的篇幅,因为这是唯一需要持续烧算力的一层。语料来自 Stainless——Anthropic 五月收购的那家软件公司——约 35 万个文件、约 4.2 亿 token,配 25 道题的评测集,给 Claude 一个搜索工具,同时让它用 dreaming 基于这些文件建 wiki。128 个会话里,Opus 5 的智能体反复探文件、写或改带链接的页面、合并重复、把说法拿回原文核对,每个会话接着上一个的进度,靠一份共享日志协调分工。

第一笔账是轮数。从 2 轮扩到 128 轮,25 道题的达标率从 13% 爬到 48%。图上另外两条线更值得看:只用搜索不带 wiki 是 53%,wiki 加搜索从 54% 涨到 61%,而只用 wiki 答题最好成绩 48%。wiki 单独用是明显不如搜索的,它只在和搜索并用的时候才加分,顺带每问省掉约 2 万 token。左边那张 2 轮后的网络图 103 页 766 条链接,右边 128 轮后 222 页 12,893 条链接,中间那条曲线的横轴是生成 wiki 花的 token 数,对数刻度,图注里明写「每轮预算 100 万 token,非实测花费」。
第二笔账是任务类型。Harvey LAB 是第三方的法律智能体基准,拿一批并购文档让模型出法律摘要再按评分项打分。24 道并购题里过半需要跨多份文档、还要判断或算数,这部分 wiki 拿到 87%、纯搜索 73%。换一个 LAB 任务,多数评分项一次文本检索在单份文档里就能取到,wiki 看不出增益。
第三笔账最扎眼。

又一个 LAB 任务上,wiki 长得比原始文件还大:10 份文档 115 KB 文本,建完加一轮整理之后是 68 页 255 条链接 203 KB,1.77 倍。文章在这里引了博尔赫斯《论科学的精确性》里那张和帝国一样大的地图——一张细到什么都没抽象掉的地图,等于没有地图。这是全文最诚实的一句边界声明:表征不是免费的,它要在「压缩」和「复制」之间站得住才有意义。
第四笔账是并发写入。模拟收购那道题按合同条款描述得对不对来判,起初给 wiki 的构建指令没说这些条款重要,几个智能体同时往一张共享的条款表上写。判分要 57 条合同事实,wiki 里活下来 41 条,72%。查原因时发现问题在共享表:它把条款概括得很差,还整条漏掉了一些,因为智能体互相覆盖了。

后来跑了一个循环——让 Claude 反思失败、自己提出改指令、重建 wiki——它这才认识到合同条款的分量,把规则改成每份合同单独一页、一页只有一个作者、条款逐字引用而不是概括进共享表。再判分,57 条全在。
注入层还有一条硬约束。往上提记忆要谨慎,因为注入内容占 token,一条错笔记会被带进每一个会话;而且装进上下文不等于模型会照做——Claude Code 的文档明写着指令文件越长遵循度越低。所以顶层得保持小,dreaming 在这里的主要工作反而是把细节往下层挪、只留链接。Claude Code 的 auto memory 就是这么做的:每个会话只加载 MEMORY.md 的前 200 行或 25 KB,当索引看,让模型知道自己知道什么、去哪找。
把账本摊开的那次运行
文章发出去前后,anthropics/claude-quickstarts 仓库里那份 knowledge-wiki quickstart 在 11 月 6 日 19:37(UTC)被重写了一次,提交说明是「rebuild the quickstart on a dynamic workflow」。这个目录其实 8 月 3 日就在,11 月这次是把它整篇改成动态工作流的写法。
它干的事和文章第七节完全对应:读一遍语料,一次性蒸馏成一份知识 wiki,存成 Managed Agents 记忆目录里的普通 markdown,之后让智能体只挂读去问它。构建分四相——每批文档交给一个 extractor 摘录、一个 resolver 处理 extractor 标出的疑点、每批再来一个 analyzer 拿原文核对已归档的内容、最后一个 organizer 收拾整个目录。
README 开头给的账是这样的:有了 wiki,小模型答题能咬住不带 wiki 直接搜原文的大模型(差 1 分以内),单问价格约 1/15,同时比这个小模型自己去搜文档好约 3 分。建一次 wiki 在基准平均上约 19 美元,按基准的数字大约 240 问回本。

基准是 21 道带答案键的题、27 次运行、两个判卷模型打分,分数满分 100、加减号是 95% 区间。Haiku 5.5 从 wiki 答 91.9 ± 0.7,单问 0.0056 美元;Sonnet 5.5 搜原始文档 92.8 ± 0.5,0.086 美元;Sonnet 5.5 从 wiki 答 92.6 ± 0.6,0.064 美元;Haiku 5.5 自己去搜文档 88.9 ± 0.6,0.0066 美元。
notebook 里另有一次完整的录制运行,格子里全是真实输出。拿的是 core 档,8 份 SEC 文件、2.8 MB 文本,切成 25 批、约 788,835 token。构建前估 25.77 美元,平台实际计费 16.02 美元,工作流跑了 17 分钟,README 写的整个构建过程约 23 分钟。分线程的列表价是 lead 写工作流 0.21、25 个 extractor 共 3.50、resolver 0.28、25 个 analyzer 共 11.50、organizer 0.54,加起来 16.03;平台按整个会话计量的数是 16.02(各线程单独四舍五入,且会话时长另计)。

六道题的对照是这样:wiki 侧平均每题读进 68,886 token、其中新增 22,763、5 次读取、按 token 价 0.0045 美元;原始文档侧平均每题读进 109,791 token、新增 14,182、11 次读取、0.0702 美元。回本点用这次运行的数重算是 244 问(16.02 ÷ 0.0657),六问里 wiki 侧每题都更便宜,差价从 0.025 到 0.154 美元不等。
把两边的读数拆开看。原始文档侧读进总量是 wiki 侧的 1.6 倍、读取次数 2.2 倍,但新增 token 只占读进量的 12.9%,wiki 侧这个比例是 33.0%。搜原文的贵在于反复换新的段落进缓存,走 wiki 的省在于每次读的都是已经算好的短页面,代价是首次提问时缓存写入更多。README 里那句「节省会随语料变大而增加,因为原始搜索要读的东西更多」说的就是这个结构差。
产出物本身也留了清单:212 个文件、1,227,185 字节,按目录分成 entities 121 个、open_questions 29 个、relations 29 个、metrics 29 个、根目录 4 个;构建会话一共写下 1,096 个记忆版本,其中 884 次是改写、212 次新建。最大的单文件 entities/squarespace.md 有 102,386 字节、45 个小节。风险清单 escalations.md 94,901 个字符。lint 的结果没有粉饰:30 条指向不存在页的链接、6 组被多个文件共用的别名、12 个超过 20 KB 的文件,索引里既没有漏登记的项也没有指向不存在文件的项。文章对死链的态度是「有些是正常的,很多指向数据室里根本没有的文档,数量在不同轮次之间波动很大,先读一遍再决定是不是故障」。
notebook 末尾写了五条它自己的运行支持下来的设计规则:真相是在摘录阶段赢下的,所以规则要往那里堆;wiki 要写给只有 wiki 的读者看,因为答题的智能体拿不到别的东西;「文件里没有」这类断言要当假设处理,因为测试里摘录、答题、判卷、连他们自己写的答案键都出现过假的 not disclosed;检查实际跑了什么,别信描述了什么;wiki 要按「读者每读一行都要付钱」来排版,索引顶部放地图、长页顶部放现状、风险文件顶部放摘要。
门槛清单
这套东西能不能在你这儿跑起来,得先过六道门,README 和 cookbook 里都写明了。

服务侧要 Managed Agents(beta),API 组织默认开着,SDK 会带上 beta 头;如果 client.beta.agents.create 返回权限错误,得找组织管理员。依赖是 Python 3.11 以上加公开的 anthropic SDK,requirements.txt 钉的是 2.0 以上 3.0 以下,录制那次跑的是 SDK 2.3.0。鉴权走标准凭据链,ANTHROPIC_API_KEY、ant CLI 2.0 以上的 ant auth login,或者 Workload Identity Federation 都行。语料不用自备,示例是一次真实完成的私有化收购案,公开 SEC 文件由 fetch_data_room.py 从 EDGAR 现抓,但 SEC 要求 EDGAR_USER_AGENT 里留一个联系邮箱姓名。
钱的档位差别不小。默认配置是读文档的智能体(extractor、resolver、analyzer、organizer)全用 Haiku 5.5,lead 和搜原文的对照组用 Sonnet 5.5,core 档录制那次 16.02 美元;如果每个环节都换成 Sonnet 5.5,README 给的是约 62 美元,得先把 COOKBOOK_BUDGET_USD 抬上去——这个预算上限默认 40 美元,notebook 会在动手前打印一个列表价估算,超了就停。
两个限制值得先知道。记忆目录里单个文件上限 100 KB,语料一大,主实体页和那份风险清单会更早撞线,得拆成互相链接的多个文件。智能体直接往共享页上写,会互相覆盖,README 给的数是「最忙那张实体页上归档的行约 5% 会丢内容」,而官方的态度是接受它,因为共享页能把不同文档里的数字放到一处,让智能体有机会发现分歧并标出来。
数据这一侧要留意:Managed Agents 会话不适用零数据保留和 HIPAA,会话会存下智能体读过的一切直到你删掉它;收尾的清理动作是把会话归档(历史仍在平台上保留),需要彻底删除得自己调 client.beta.sessions.delete。运行记录写到系统临时目录下一个只有当前用户可读的新文件夹,多数机器重启就清,想留就设 COOKBOOK_RECORDS_DIR。
dreaming 那侧的 cookbook 单独给了它的成本:50 多份长会话逐字记录、约 12 MB 文本,一次 dream 按默认设置约 8 美元、约 10 分钟;不开那几项省钱的设置(消息里那句分组说明、analyzer 提示里少几轮的那段、纯文本逐字记录、organizer 用 Haiku 5.5)则是约 10 美元、约 9 分钟,分别跑了 60 次和 30 次。两种设置建出来的记忆目录保存固定事实清单的比例差不多。拿 11 份示例逐字记录(共 283 KB)跑,含会话时长约 0.36 美元、约两分半。
quickstart 里的账目我逐格重算过一遍,16.02 美元的四项拆分、244 问回本、1/15 与差 0.9 分都对得上。整套流程本身在这台机器上没有跑起来——没有可用的 API 凭据,Managed Agents 也要组织维度授权,所以上面这些门槛清单和成本数字都是官方录制运行的读数,不是我自己跑出来的。
还没解决的那几个
文章结尾列了三个它自己没定的问题,这三个问题恰好也是任何做知识库的人现在就得选的。
什么时候写记忆。当场写能保住原始情境、下一个回合立刻能用,代价是把注意力从手头的活上分走;dreaming 把写推到后台,代价是那轮产出未必马上用得上。
怎么让记忆保持新鲜。模型可能一开始就写错,环境变了笔记也会过期。dreaming 能修,但要算力;让模型持续复查所有记忆不太现实,更可能的做法是把 dreaming 聚焦在「大概会变」的信息上,或者按记忆的访问频次调周期。
逐字记录检索算不算地基。表征和搜索并用有时最有效,但表征需要持续花算力维护,否则错误和幻觉会堆起来。文章的原话是,尽管模型对「什么值得记」的判断力已经明显变强,没有任何模型真能知道未来几回合会发生什么。
这三条里第二条已经有可抄的答案了。官方给的 dreaming 周期是「夜间 cron 跑一遍」,而 cookbook 的做法是把已结束的会话导出成逐字记录、让 analyzer 加 organizer 的动态工作流去原地更新记忆目录,跑完再挂读进新会话。至于表征该建多大,1.77 倍那张图和 13% 到 48% 那条曲线已经把边界画出来了:一张比帝国还大的地图,只是把帝国重抄了一遍。
更多推荐



所有评论(0)