正文 · AI 翻译
索伦·克尔凯郭尔写道,生活只能回顾过去才能被理解,但必须面向未来去经历。我们在为 AI 智能体设计记忆时,也遇到了类似的困境。
作为人类,我们在日常生活中不断编码记忆。海马体在其中发挥着核心作用,实时记录经历,使记忆迅速形成并立即可用。但只有一部分经历会被巩固为长期知识。
这种巩固似乎大多发生在大脑处于离线状态时。我们睡眠或安静休息时,海马体会重放近期的经历。人们认为,这会逐渐提炼这些经历,并将其整合进新皮质——大脑中储存我们所认为的大部分知识的区域。
智能体记忆也可以采用类似的分工。智能体会将大量工作记录在日志或对话记录中。Letta 和加州大学伯克利分校的研究人员提出了“睡眠时间计算”,让模型利用交互之间的空闲时间重新组织已有上下文。同样的思路也能帮助智能体通过回顾日志来整理记忆、纠正错误,或生成新的笔记和表征。这个过程通常称为“做梦”(图 1)。
我们发现,“做梦”是帮助我们赋予 Claude 有效记忆的有用工具。在本文中,我们将分享自己如何逐步形成对智能体记忆的认识,并介绍我们用于探索智能体记忆的几项评估,包括“做梦”的运用,以及各个组成部分对记忆组织的贡献。
记忆笔记
我们所说的“智能体记忆”,是指 Claude 从经历中获得、并在不同会话之间保留的知识,包括与用户的互动和它被分配的任务;这些知识会保存为它日后可以读取的上下文。这不包括模型学习或管理上下文的其他方式,例如权重的变化(训练期间确定的内部参数)、上下文内学习(在单次对话中获得的知识),以及上下文压缩(由 Claude 编写、用来替换其较早对话轮次的摘要,使它能够在新的上下文窗口中继续工作)。
在人脑中,经历发生之前、期间或之后释放的化学信号可以将一段记忆标记为重要。在离线期间,被标记的记忆往往比未被标记的记忆更频繁地被重放。这一过程称为重放,有助于稳定这些记忆,并将其整合进长期记忆。
类似地,Claude 可以在会话进行时给日志中的重要事件加上标记,以便日后查找;也可以将它们写入记忆存储区,例如存放记忆笔记的文件夹(图 2)。但在尚不知道接下来会发生什么时,Claude 如何当场判断什么是重要的?
记忆可以是对未来需求的预测
记忆有时是一种预测。智能体写下一条规则,就是在预测它所描述的模式将再次派上用场。例如,写下一条经过核实的事实,就是在预测未来某次会话中的智能体会希望无需再次核查就能依赖这条事实。随着时间推移,Claude 越来越擅长做出这类预测。
以持续学习基准(Continual Learning Bench,CL-Bench)1.0 中的一项任务为例。该基准衡量智能体运用记忆来应对长期任务的能力。这项任务要求 Claude 通过查询数据库中的信息来回答一系列问题。Claude 给出答案后,会获知正确解答,并可以写下一条记忆,帮助回答今后的问题。
记忆可以在这里支持一个学习循环。如果 Claude 答错了问题,它可以记录这次失败,提出出错原因的假设,检验这些假设,并将发现归纳为今后如何作答的规则。
我们使用 Claude Managed Agents 运行了 CL-Bench 1.0 的这项任务。Claude 回答每个问题时都会从一个全新的会话开始,但有一个例外:它可以从一个跨会话保留的记忆目录中检索文件。
不同模型在建立自己的学习闭环方面取得了不同程度的成功。Claude Sonnet 4.6 已能提出理论,解释某个答案为什么错了。它的记忆目录里零散地存放着一些文件,每个文件都列出了几个未经检验的猜测。
Claude Opus 4.7 将笔记整合成一份参考文档,并开始标记哪些事实已经核查、哪些仍未确认。Claude Sonnet 5 在评分器检查过每个答案后,将其标记为已确认;如果答错了,它还会写下更正。
Claude Opus 5 是这些模型中第一个完成学习闭环的。它的大多数条目都包含一条规则(以及它如何知道这条规则是正确的)、先前问题的答案,以及对它在过程中发现的陷阱的明确警告(图 3)。
与 Opus 5 一样,Claude Opus 5.5 和 Claude Sonnet 5.5 都完成了学习闭环,利用记忆记录经过验证的规则,以便更好地回答未来的问题。有记忆时,两者的得分都与 Opus 5 大致相同,尽管它们在没有记忆时的基线表现略高。
Claude 已学会判断哪些信息重要
我们还评估了 Claude 玩《宝可梦 红》的能力。这款游戏要求 Claude 应对复杂的长期任务,我们用它来检验 Claude 对哪些内容值得存入记忆的判断。在每次运行开始时,我们都给每个模型一个记忆文件夹,让它在游戏过程中可以读取和写入其中的文件(图 4)。
我们比较了 Claude Sonnet 3.7 和 Claude Fable 5 各自一次运行中的记忆文件夹,当时两者在游戏中都已进行到约第 10,000 步。我们注意到的一个关键差异是,各模型认为什么值得记住。Sonnet 3.7 认为任何事情都可能重要,因此不加筛选地写入记忆。它的记忆文件夹存着遭遇记录,往往每场战斗、找到的每件物品、遇到的每个非玩家角色都有单独的文件。最终,Sonnet 3.7 在 225 个文件夹中写下了 413 个记忆文件,并获得了 1 枚徽章(徽章标志着玩家在游戏中的进度)。
相比之下,Fable 5 在 2 个文件夹中写了 9 个文件,另有 1 个名为 global.md 的顶层文件,并获得了 4 枚徽章。
Sonnet 3.7 的做法之所以有问题,主要是因为《宝可梦》的游戏状态不断变化,导致 Sonnet 3.7 的详细记录不断过时。因此,随着 Claude 推进游戏,它不得不花更多时间和资源翻查记忆,而不是玩游戏。例如,在第 10,000 步左右,Sonnet 3.7 开始创建第 4 个存放“主”记忆文件的文件夹。在接下来的 17 步中,它创建了 6 个文件,删除了另外 9 个文件,却没有在游戏中采取任何行动。
Fable 5 的做法是用记忆存储游戏没有明确告诉它的信息。Sonnet 3.7 写入记忆的某些信息,例如玩家有多少钱或玩家在地图上的位置,每个回合都能从屏幕上读到,因此存储这些信息是多余的。相比之下,关于策略、计划和经过检验的规则的记忆文件,只有 Claude 自己推导出来才会存在;如果 Claude 不把它们写下来,它们就会消失。
Fable 5 据此组织记忆。它的 global.md 文件充当信息总览,记录当前目标、预先写好的挑战道馆计划(道馆是赢得徽章的挑战),以及模型自己制定的记忆使用规则。locations 文件夹存放沿特定路线行进的计划,gameplay 文件夹则存放根据它对游戏运作方式的了解制定的策略。例如,在连续 7 个精灵球都没能抓住鲤鱼王(最容易捕捉的宝可梦之一)后,Claude 写道:“如果连续 3 个以上的球都失败,就改变时机(在菜单操作步骤之间额外按几次‘等待’)——这样做后立刻就抓到了。”
凭借小得多的记忆文件夹,Fable 5 在游戏中的进度远远超过了 Sonnet 3.7。Opus 5.5 采用了类似的做法:它保留了一个小型记忆笔记文件夹,用来跟踪当前目标和后续步骤,在游戏过程中不断重写这些笔记,并通关了游戏。
引导 Claude 写入记忆
我们发现,告诉 Claude 记忆的用途会有所帮助,但不必告诉它如何使用记忆。在 CL-Bench 上,我们只是告诉 Claude 有一个记忆文件夹可供使用。这种笼统的指引足以让 Opus 4.7 和 Opus 5 有效地使用记忆,并使两者的表现都有明显提升(图 3)。
我们还测试了为模型提供关于它们应该将什么写入记忆的具体规则,每次测试使用一条规则。我们比较了在有每条规则和没有该规则的情况下,记忆分别给每个模型带来了多大提升。当我们设定“只记录失败”的规则时,Opus 5 和 Opus 4.7 都失去了记忆原本带来的大部分表现提升(图 5,右)。对于能力更强的模型,让它们自行判断什么值得记住,比预先设定固定规则更有效;这些规则最终还可能削弱表现。
我们还注意到,引导对较旧模型的帮助最大。例如,Sonnet 4.6 经常不读取其记忆目录中的文件,也不检验自己关于答案为何错误的推测。
在这种情况下,提示 Claude 在回答前读取记忆文件,然后明确检验自己的推测,使其基准测试得分几乎翻倍(图 5,左)。Sonnet 5 会自行这样做。即使没有收到提示,它也有 10 次中的 9 次会在回答前读取记忆。相比之下,Sonnet 4.6 这样做的次数不到一半。
对于前沿 Claude 模型,我们通常只提供简单指引:当有人要求它们创建记忆笔记,或某件事明显值得记住时,就创建笔记;是否值得记住则交由 Claude 判断。
做梦可以纠正记忆
由于 Claude 会根据自己在会话中判断出的重要内容写入记忆,一条起初就有误、或随着环境变化而逐渐失准的笔记,可能在后续会话中被 Claude 读到并信以为真。
做梦让 Claude 能够对照原始会话记录检验自己的笔记(图 6)。我们在 Claude 使用 Managed Agents 玩宝可梦游戏、并为其记忆挂载了一个目录时,看到了一个正面例子。
在游戏的某个环节,玩家必须穿过月见山:这是一个洞穴系统,入口位于地图西侧,出口位于东侧。入口附近有一个陷阱:一处只能单向通过的台阶,玩家从那里落下后会回到来时的道路,而且没有明显的办法爬回去。Claude 把位于山的入口处的宝可梦中心当作路标,因此它是否会从台阶落下,取决于它认为宝可梦中心位于山的哪一侧。
有一次,Claude(错误地)记下宝可梦中心位于东侧。走出宝可梦中心时,它宣称:“月见山在我身后”,并更新笔记:“月见山已完成。”但月见山并不在它身后。几步操作后,Claude 越过台阶,落回了它来时的道路上(图 7)。它的导航工具没有显示落差,因此 Claude 得出结论:“我向西走过头了”,并认为自己一直都在正确的那一侧。事实并非如此。
随后,我们测试做梦能否帮助 Claude 避开这个陷阱。我们对那个记载了宝可梦中心错误位置的记忆文件夹运行了做梦流程:Claude 对照会话记录检查笔记,发现错误并重写了笔记。会话记录为 Claude 提供了可用于核实记忆的事实依据。凭借修正后的记忆笔记,Claude 直接返回月见山,并最终抵达华蓝市。
在使用未修正笔记的那次运行中,Claude 有 3 次落回先前的道路。第 3 次失败后,Claude 似乎放弃了,写道:“我打算停下来,不再继续兜圈子。”我们设置的自动回复指示它继续。于是它继续前进,一路返回了月见山之前的深灰市,希望在那里治疗并补充物资。那次运行结束时,Claude 始终没有到达华蓝市。
做梦可以构建新的记忆表征
通过“做梦”,Claude 可以构建表征,帮助自己浏览记忆(图 9)。它使用的一种记忆表征称为 wiki:由 Claude 编写和维护的一系列页面,汇集 Claude 对某个主题的了解,并将其与其他笔记链接起来。这些链接实际上为 Claude 提供了一张地图,使它能够梳理记忆,并在需要时高效地找到相关记忆。
wiki 之类的表征可以帮助 Claude 浏览不断增长的知识库。我们使用软件公司 Stainless 的内部文档语料,研究了将 wiki 用作记忆表征的益处;我们于 5 月收购了这家公司。这批语料约有 350,000 个文件,合计约 420M 个 token。我们围绕这批语料创建了一套包含 25 个问题的评估题,并给 Claude 提供了一个搜索工具,供它探索语料。我们还指示 Claude 通过“做梦”,根据这些文件构建 wiki。在 128 个会话中,我们提示 Opus 5 智能体探索文件、编写或修正相互链接的 wiki 页面、合并重复页面,并对照来源核查说法。
每个会话都在此前会话中智能体取得的进展上继续推进,并通过共享日志协调工作。随着我们将“做梦”的规模从 2 个会话扩大到 128 个,Claude 在这 25 个问题上的表现从达到 13% 的评分标准提高到 48%(图 10)。
Claude 逐步构建其 wiki。创建初始 wiki 后,它会在随后的“做梦”轮次中增补、编辑或删减内容。在“做梦”的早期轮次,Claude 的知识就像新员工一样,仅凭 wiki 回答问题的能力有限。它“做梦”越多,知识图谱就越丰富,如同经验丰富的员工。在测试中,我们发现,同时提供搜索工具时,wiki 对 Claude 的帮助最大。当 Claude 同时使用搜索工具和 wiki 时,随着 wiki 不断扩充,其总分从 54% 升至 61%;相比之下,仅能使用搜索工具时,得分为 53%。仅使用 wiki 回答问题时,Claude 的最高得分为 48%。同时使用搜索工具和 wiki 还使每道题节省了约 20,000 个 token。
我们想测试哪些任务能从 Claude 拥有 wiki 中受益。为此,我们使用了 Harvey LAB 基准测试和一组关于某项合并交易的文件。该基准测试向 Claude 提供一组文件,要求它根据文件内容起草法律意见书,然后依据一系列标准对意见书评分。虽然这些评估或许比不上一次宝可梦通关那么有趣,但它们为我们提供了各种各样的文件集合,可用于构建 wiki。
我们指示 Claude 根据这些文件构建 wiki。随后,我们让 Claude 分别利用 wiki 和直接文件搜索来回答有关合并交易的问题,或生成法律意见书(LAB 基准测试)。其中一项测试提出了 24 个有关该合并交易的问题(图 11,左);超过一半的问题要求 Claude 从多份文件中查找信息,许多问题还要求它作出判断或进行计算。在这些题目上(红线和橙线),Claude 查阅 wiki 时得分为 87%,仅使用搜索时为 73%。
在其他情况下,wiki 的作用较小。在一项 LAB 任务中(图 11,右),法律意见书的评分标准所需内容往往可以通过文本搜索从单份文件中找到,因此与搜索相比,wiki 没有带来明显的表现提升。在另一项 LAB 任务中,wiki 的篇幅甚至超过了文件本身(图 12)。就像博尔赫斯的一段式短篇小说《论科学的精确性》中的制图师,他们绘制的地图详尽到与其描绘的帝国一样大;Claude 也制作了一份极其详尽的 wiki,实际上没有对信息作任何抽象概括。
“做梦”可以将笔记提升至记忆层级的更高层
“做梦”也可以将笔记提升到记忆层级的顶层,智能体运行框架则可以在每次会话开始时预先将它们加载到 Claude 的上下文中(图 13)。这意味着 Claude 无需搜索这些笔记,甚至无需知道有东西需要搜索。
将记忆提升并带入新会话(一种上下文注入形式)必须谨慎进行。注入的记忆会占用宝贵的 token,而一条错误的笔记可能被带入每次会话。加载笔记也不能保证 Claude 会据此行动:我们关于 Claude Code 的文档提醒,指令文件越长,遵循程度越低。因此,记忆层级的顶层必须保持相对精简,而“做梦”在这方面的大部分工作就是通过将一些细节移到层级的较低层,并留下链接,来维持这种精简。
Claude Code 的自动记忆以同样的方式保持其注入层精简,由 Claude 在会话期间维护。Claude 不会将全部自动记忆加载到每次会话的上下文窗口中。它只加载 MEMORY.md 的前 200 行或前 25 KB。这一文件开头部分充当索引,让 Claude 知道自己掌握了什么信息,以及在哪里可以找到这些信息。
“做梦”可以让记忆聚焦于特定目标
“做梦”还可以塑造记忆的增长方式。例如,像 Claude Duet 这样的助手通常能从围绕其服务对象组织的记忆中受益,而“做梦”可以经过调整,以构建服务于特定目标的记忆。
指导记忆如何增长的指令因任务而异,并告诉 Claude 哪些信息真正重要。例如,LAB 基准测试中的一项任务模拟公司收购,并提供一组合同。对简报的评分取决于它是否正确描述了合同条款。
一开始,我们使用了生成维基的基本指令,但没有告诉 Claude 如何使用维基。这项任务高度依赖合同条款。在构建维基时,几个智能体同时向一张共享的合同条款表写入内容(图 14,左)。
结果,维基缺失了关键事实。我们对根据该维基生成的简报进行评分时,Claude 只纳入了 57 项事实中的 41 项(72%)。调查问题出在哪里时,我们发现共享表格对合同条款的概括不佳,有些条款甚至完全缺失,因为智能体互相覆盖了对方的工作。
合同条款是维基中最重要的部分,但指令没有说明这一点。为了找到更好的指令,我们运行了一个循环:Claude 反思自己的失败,提出对指令的修改,然后重新构建维基。这个循环让 Claude 认识到遵循合同条款有多重要,并据此重写了构建维基的指令。
每份合同在维基中都有自己的页面,由单个智能体撰写,逐字引用条款,而不是将其概括到一张共享表格中。我们对根据改进后的维基生成的简报进行评分时,100% 的评分标准都能够得到满足,高于此前的 72%。
“做梦”可以填补会话留下的空白
Claude 撰写记忆笔记时,只能看到该次会话中的上下文。“做梦”则可以跨多个会话搜索,找出共同模式或纠正反复出现的错误。
在为 LAB 基准测试构建维基时(例如,见图 14),Claude 有时会链接到尚未创建的页面。第二轮“做梦”填补了其中许多空白。在一项任务中(图 15),“做梦”发现维基中有 9 个链接指向一个缺失的页面,并将它们重新指向同一文档的现有页面。它还新增了 3 个页面,其中包括一个索引,以改进维基。
回顾过去,展望未来
关于如何为智能体设计记忆系统,仍有许多悬而未决的问题。其中一个问题是 Claude 应该何时创建记忆。当 Claude 处理一项任务时,它可以写入记忆存储区(例如文件夹、文件或数据库),在信息产生之处捕捉其重要性,并让重要细节立即可供未来的对话轮次或会话使用。但即时记录笔记不可避免地会分散 Claude 对主要任务的注意力。相比之下,做梦可以将记忆创建转移到后台,但做梦产生的任何结果可能无法立即供 Claude 使用。
另一个问题是如何可靠地让记忆保持最新。Claude 可能做出错误的预测,或将从一开始就是错误的规则写入记忆。随着环境变化,记忆也可能逐渐偏离实际、变得无关紧要。做梦是纠正这些错误的一种方式(图 8),但它需要计算资源。让 Claude 持续检查其所有记忆可能并不切实际。更重要的做法可能是让做梦聚焦于可能发生变化的信息,或仔细调整做梦的频率(例如,根据记忆被访问的频率)。
将对话记录搜索视为 Claude 记忆的基础也是合理的。将表征形式(例如维基)与搜索相结合(图 10)有时可能有效。但 Claude 需要使用计算资源来维护记忆表征,并确保其中不会积累错误或幻觉。
尽管 Claude 对信息重要性的判断有所提高,但没有任何模型能够真正知道未来的对话轮次会发生什么。做梦让 Claude 有机会回顾过去,并利用计算资源整理记忆、纠正错误,以及维护便于未来会话获取记忆的表征。随着 Claude 能力增强,记忆系统也将不断演进;关于如何设计 Claude 的记忆系统,我们仍有很多需要学习。
请参阅我们的实践指南,了解如何开始使用做梦和知识维基。
作者与致谢
致谢
本文由 Lance Martin 撰写,Caitlin Love、Tom Chivers、Rebecca Hiscott、Jake Eaton 和 Blake Wilson 提供编辑指导。感谢 Barry Zhang、Theodora Chu、Daliang Li、Mahesh Murag、Jake Noble、Ravi Trivedi、Tina Vachovsky、Brad Abrams、Henry de Valence、Jeremy Fox、Matt Bell、Allen Li、Chris Gorgolewski、Eugene Yan、Artur Renault、Wei Zhang 和 Kevin Chen 的有益讨论与贡献,也感谢 David Hershey 创作 Claude Plays Pokémon。插图由 Monika Tuchowska 绘制。