Claude 学会了睡一觉再整理笔记

Anthropic 前两天发了一篇讲 Agent 记忆的工程博客,作者是 Lance Martin。开头引了克尔凯郭尔的一句话,大意是人生要倒过来才能理解,却只能往前过。Agent 写记忆也是这个处境,落笔的那一刻并不知道以后会用到什么。

人脑的办法是分两步走。白天海马体把经历随手记下,睡觉或发呆时再回放一遍,挑出值得留下的,慢慢沉淀到新皮层,成为长期知识。Anthropic 给 Claude 设计记忆时借用了这套分工:干活时先记进日志和笔记,闲下来再翻日志、改错、写新笔记。这个离线整理的过程,他们叫它 dreaming,也就是"做梦",思路来自 Letta 和 UC Berkeley 提出的 sleep-time compute。

文中的"记忆"范围定得很窄,特指 Claude 从经验里学到、跨会话保存、以后还能读到的东西。改权重、单次对话里的上下文学习、上下文压缩(compaction)都不算在内。

每写一条笔记,都是在押注未来

写下一条规则,等于预测这个规律以后还会出现;记下一个核实过的事实,等于告诉以后的自己这条不用再查。这种预测,Claude 一代比一代做得准。

测试用的是 CL-Bench 1.0 里的一个数据库问答任务。每道题都在全新的会话里开始,唯一能带过去的是一个记忆文件夹。答完会告诉它正确答案,它可以写点笔记留给后面的题。理想状态下,这里能跑出一个学习闭环:答错了记下来,猜原因,验证,最后变成一条规则。

各代模型走到的位置差得挺远。Sonnet 4.6 停在猜原因这一步,文件夹里散着一堆没验证过的猜测。Opus 4.7 把笔记合成了一份参考文档,开始标注哪些事实查实了、哪些还没有。Sonnet 5 会把判过分的答案标成"已确认",答错就写更正。到了 Opus 5,闭环才真正跑通,笔记里有规则、有这条规则为什么成立、有之前的答案,还有一路踩过的坑。Opus 5.5 和 Sonnet 5.5 也都能跑通,加上记忆后的分数和 Opus 5 差不多,只是它们不带记忆时的基础分本来就高一点。

玩宝可梦,看得出谁会记

判断什么值得记,另一个考场是让 Claude 玩《宝可梦 红》。每局开始给一个可读写的记忆文件夹,玩到大约一万步时,把 Sonnet 3.7 和 Fable 5 的文件夹拿出来对比。

Sonnet 3.7 觉得什么都可能有用,每场战斗、每件道具、每个 NPC 都单独建文件,最后攒了 225 个文件夹、413 个文件,只拿到 1 枚徽章。Fable 5 一共写了两个文件夹里的 9 个文件,外加一个 global.md,拿了 4 枚。

麻烦在于游戏状态一直在变,Sonnet 3.7 那份事无巨细的记录不停过期,越往后越多时间花在翻记忆上。一万步前后它新开了第四个"总记忆"文件夹,接下来 17 步里新建 6 个文件、删掉 9 个,游戏里一步没走。

Fable 5 只记屏幕上看不到的东西。身上有多少钱、人在地图哪儿,每回合看一眼屏幕就知道,存下来纯属多余;策略、计划、验证过的规则,只有自己琢磨出来才有,不写下来就没了。它的 global.md 像块仪表盘,放着当前目标、打道馆的计划,还有它给自己定的记忆规则,另外 locations 和 gameplay 两个文件夹分别放路线和玩法心得。有一次连扔七个精灵球都没抓到鲤鱼王,它总结了一条:连续失败三次以上,就在菜单操作之间多按几下等待,改完马上就抓到了。Opus 5.5 也是类似路数,记忆文件很少,边玩边改,最后通关了。

说清楚记忆是干嘛的就够了

在 CL-Bench 上,Anthropic 只告诉 Claude 有个记忆文件夹可以用,Opus 4.7 和 Opus 5 就能用好,分数明显上去。他们也试过给死规则,比如"只记失败",结果这两个模型从记忆里拿到的提升掉了一大截。对强模型来说,让它自己判断该记什么,比提前定规矩管用,规矩定多了反而拖后腿。

老模型就得多带一带。Sonnet 4.6 经常不读记忆,也不验证自己的猜测,提示它答题前先读记忆、再把猜测验一遍,分数差不多翻了一倍。Sonnet 5 不用提醒,10 次里有 9 次会先读记忆,Sonnet 4.6 连一半都不到。所以现在给前沿模型的提示都很简单:用户让记、或者明显值得记的时候就记,其余交给它自己拿主意。

做梦能把记错的改回来

会话里随手写下的笔记,可能一开始就错了,也可能随环境变化慢慢过时,下一个会话的 Claude 照样会信。做梦的一个作用,就是拿原始会话记录去核对这些笔记。

宝可梦里正好有个例子。月见山是一片洞穴,入口在西、出口在东,入口附近有个单向台阶,跳下去就回到来时的路,爬不回来。Claude 拿山口的宝可梦中心当路标,有一次把它记到了东边。走出中心时它说"月见山在我身后了",还在笔记里写上"月见山 搞定"。几步之后它就跳下台阶回到了老路,导航工具又显示不出这个落差,它便认定自己只是往西走过了头。

拿这份带错的记忆跑一次做梦,Claude 对照会话记录发现了问题,把笔记改了过来。带着改好的笔记,它直接回到洞里,最后走到了华蓝市。没改的那一局就惨了,连着掉下台阶三次,第三次之后它写道"我先停下,不再绕圈了",被自动回复催着继续,于是一路退回山前的尼比市想回血补给,到结束也没翻过这座山。

做梦还能搭一张知识地图

做梦也能给记忆换一种组织方式,比如 wiki:Claude 自己写、自己维护的一组页面,每页讲一个主题,页面之间互相链接。链接多了,就成了一张在记忆里找路的地图。

Anthropic 用 Stainless(今年 5 月收购的一家软件公司)的内部文档做了测试,约 35 万个文件、4.2 亿 token,出了 25 道题。他们让多个 Opus 5 Agent 在 128 个会话里接力做梦,探索文件、写和修 wiki 页面、合并重复、对照原文核实,靠一份共享日志协调进度。会话从 2 个加到 128 个,只靠 wiki 答题的得分从 13% 涨到 48%。效果最好的是 wiki 加搜索,分数随着 wiki 长大从 54% 升到 61%,只用搜索是 53%,每道题还能省下约 2 万 token。刚建好的 wiki 像新员工的认知,梦做得越多,越像个老员工。

wiki 也有不灵的时候。拿一份并购文档问 24 个问题,一半以上要跨多份文档拼信息,不少还得判断或算数,这类题用 wiki 能答对 87%,只用搜索是 73%。换到 Harvey LAB 基准里的一个法律文书任务,大部分要点在单份文档里就能搜到,wiki 就没带来什么提升。还有个任务里 wiki 写得比原始文档还大,像博尔赫斯小说里那张和帝国一样大的地图,等于什么都没提炼。

常用的放最上面

做梦还能把重要笔记往上提,放到记忆的最顶层,每次开新会话时由 harness 直接塞进上下文,Claude 不用去搜,甚至不用知道有这么一条。

这一层得很克制。注入的内容要占 token,记错一条会被带进每一次会话,而且加载了也不代表会照做,Claude Code 的文档就提醒过,指令文件越长,遵循得越差。所以做梦在这里主要是给顶层瘦身,把细节挪到下层,原地留个链接。Claude Code 的 auto memory 也是这个思路,每次只加载 MEMORY.md 的前 200 行或 25KB,当作索引,告诉 Claude 自己知道些什么、去哪里找。

让记忆围着目标长

做梦还可以按目标来调。像 Claude Duet 这样的助理,记忆最好围绕所服务的人来组织。LAB 里有个模拟收购的任务,给一堆合同,文书得把合同条款写对才得分。一开始建 wiki 的指令没说条款最重要,几个 Agent 同时往一张共享条款表里写,互相覆盖,57 条要点最后只剩 41 条,72%。

后来让 Claude 自己复盘失败、改指令、重建 wiki,几轮下来它意识到条款才是关键,把指令改成每份合同单独一页、由一个 Agent 负责、条款原文照抄。用新 wiki 生成的文书,要点全部覆盖。

做梦还能补上单个会话看不到的窟窿。写笔记时 Claude 只看得见当前会话,做梦却能横跨多个会话找共性、改通病。建 LAB 的 wiki 时,有些链接指向还没建的页面,第二轮做梦找出 9 个指向缺失页的链接,改指到同一份文档的现有页面,又补了包括索引在内的 3 个新页面。

还没想明白的地方

Anthropic 也坦白列了几个悬而未决的问题。什么时候写记忆:边干活边记,信息最新鲜,但会分心;留到做梦时再记,不打扰主任务,结果却没法马上用上。怎么让记忆不过时:做梦能纠错,但要花算力,不可能一直全量检查,也许该优先盯着容易变的信息,或者按访问频率决定多久做一次梦。还有一种思路,干脆把会话记录搜索当作记忆的地基,再配上 wiki 这类结构,只是维护结构本身也要算力,还得防着错误和幻觉越积越多。

写在最后

模型再聪明,也没法在当下知道以后会用上什么。Anthropic 给出的办法是让 Claude 有机会回头看,花点算力把笔记理顺、改错、建好索引。

原文:The components of agent memory

Logo

更多推荐