Claude 官方的 Agent Memory 管理实践:为什么用文件系统保存记忆?
本文由 Lance Martin 编写,他目前就职于 Anthropic,是前 LangChain 工程师、Stanford PhD。他长期关注 AI Agent、RAG 和 Context Engineering 等方向,是当前 Agent 工程实践领域活跃的技术作者。 以下为他的分享,文末附有前 OpenAI 工程师、现 Google DeepMind 工程师 Leo Tavares 对本次分享的看法,以及相关 AI 研究员个人介绍。 现在 Claude Managed Agents(可在 Claude Platform 上使用)有了记忆(memory)能力。这些记忆以文件的形式保存下来,供单个 Agent 或者多个 Agent 在不同会话间继续访问和使用。简单来说,Agent 不再"只活在当下",能从过去执行任务的经验中学习。用户也可以通过 API 导出记忆,方便后续查看或使用。 同团队的 David SHershey 曾和我分享过关于 Agent 记忆的事。那时候,他在做 Claude Plays Pokémon 项目——也就是让 Claude 自己玩《宝可梦》的 AI Agent 实验项目。他给 Claude 配了一个工具,来读取某个文件夹中的记忆文件,或是写入新的记忆文件。他设计这些记忆文件的目的很简单:为了让 Claude 更好地探索、推进宝可梦游戏的剧情。 但在早期的 Claude 模型上,David 的这套方法效果并不好。比如 Sonnet 3.5 会把"记忆"当作一份游戏过程记录,认真记录 NPC(宝可梦游戏里的非玩家角色)说了什么,但抓不住真正影响后续行动的关键信息。Claude 在宝可梦游戏里走了 14,000 步之后,已经写出了 31 个记忆文件,但游戏进度几乎没怎么推进,还卡在第二个城镇里。 下面就是其中一个记忆文件的例子: 为了解决这类问题,许多论文都提出过利用专门的 Agent 运行框架和工具,来帮助 AI Agent 管理记忆。我个人很喜欢 tedsumers 的 CoALA 论文,以及 sarahwooders 和 charlespacker 的 memGPT 工作。它们都借鉴了认知科学和操作系统中的一些思想,以便更系统地构建 Agent 记忆。 有意思的是,Claude Plays Pokémon 这个项目后来有了戏剧化的结果:随着 Claude 模型能力的增强,后来的 Claude 模型开始学会更好地利用文件系统来组织自己的记忆。在 Opus 4.6 中,同样是走 14,000 步,Claude 只保留了 10 个文件,而且把这些文件整理进了不同目录。与此同时,它已经拿到了 3 枚道馆徽章,还把自己失败中学到的东西提炼了出来,变成了学习文件: 上面这个例子体现了一种趋势。我之前也发表过类似观点:我们应该给 Claude 一些通用工具,让它自行管理上下文和行动。随着 Agent 智能水平的提升,Claude 会逐渐学会使用这些通用工具来解决问题。Agent 记忆,便是其中一个典型例子。 当 Claude 拥有一个通用的文件管理工具后,我们发现,它自己学会了哪些内容值得保存,也会学会了组织自己的记忆。Letta_AI 也发表过类似结论:文件系统比专门的记忆工具更有用。 Pokémon 的例子解释了为什么 Claude Managed Agents 选择用文件系统来承载记忆。文件使用标准文件工具,以 Claude 想要的方式自由组织。Claude 平台自身要做的事情很简单:通过记忆存储,把这些文件跨会话持久保存下来。记忆文件的保存形式,是以 workspace 工作区为作用域的一组文本文件集合,它们不会随着某一次会话结束而消失。 当用户把一个记忆存储挂载到某个会话中时,Claude 平台会把它当作一个目录挂载进容器,路径是: 多个 Agent 可以访问同一个记忆存储,平台也会实时同步这些记忆:如果某个 Agent 修改了文件,挂载了同一记忆存储的其他 Agent 也能在自己的文件系统中看到本次修改。平台还会处理并发问题,确保 Agent 不会覆盖先前 Agent 写入的记忆更新。 文件系统还有一个额外好处:它们容易理解,也容易分享。在 Pokémon 的例子里,David SHershey 就可以直接下载、分享这些记忆文件。在 Claude Managed Agents 中,用户同样可以按照下面方式,来导出记忆: 这样一来,我们就可以用一个很简单的方式来理解 Managed Agents 里的上下文:一部分是会话日志(session log),另一部分是记忆存储(memory store)。正如 mc_anthropic、gcemaj 和我之前写过的那样,在完成任务的过程中,Claude 可以不断获取并转换会话上下文。会话本身存在于上下文窗口之外,这一点有不少好处。如果 Claude 想把某些上下文保存到未来的会话中,就可以把相关内容写进记忆存储中。 如果你想上手试试的话,可以查看我们的文档,或者使用我们的 claude-api skill。这个 skill 已经内置在 Claude Code 中,用户只需要运行: Leo Tavares 是 Google DeepMind 的 AI Engineer,前 OpenAI 员工,也是 AI Agent 工程化方向的活跃作者。以下是他的看法: @tedsumers:Theodore Sumers 是 Anthropic 的 Research Scientist,研究方向偏 AI safety、语言智能体、LLM 的沟通/监督/对齐、Computer Use 监控caterpie_weedle_info:
- Caterpie and Weedle are both caterpillar Pokémon.
- Caterpie is a caterpillar Pokémon that does not have poison.
- Weedle is a caterpillar Pokémon that does have poison.
- This information is crucial for future encounters and battles.
- If our Pokémon get poisoned, we should seek healing at a Pokémon
Center as soon as possible./gameplay/learnings.md:
- Bellsprout Sleep+Wrap combo: KO FAST with BITE before Sleep
Powder lands. Don't let it set up!
- Gen 1 Bag Limit: 20 items max. Toss unneeded TMs before dungeons.
- Spin tile mazes: Different entry y-positions lead to DIFFERENT
destinations. Try ALL entries and chain through multiple pockets.
- B1F y=16 wall CONFIRMED SOLID at ALL x=9-28 (step 14557)
/mnt/memory/<store-name>/。同时,系统提示词里会自动添加一小段说明,告诉 Claude 这个目录在哪,方便后面它自行使用这部分记忆。client.beta.memory_stores.memories.list(store_id, view="full")/claude-api。从业者怎么看?
有状态记忆(stateful memory)是 Agent 摆脱"高级脚本"阶段的唯一途径。当一个 Agent 不用每次都往提示词里塞入 10 万个 token,能够在多轮交互中真正持久化上下文时,我们才能解锁 Agent 的真正自主性。
他们是谁?