
主讲人 Kevin(Anthropic 工程师),属 Code with Claude 大会 workshop 系列,主题"怎么构建有记忆的 agent"。痛点:今天 agent 的 base case 是"相互隔离的,这在很多真实工作流里限制了它们的实用性"。议程四段式:①base case,看 agent 隔离的局限;②新发布的 memory store——"一个实时的 memory store,可以在多个会话之间读写";③dreaming——"让这些 memory store 随时间不断变好";④把这一切和 CLI、"超棒的控制台界面"串联演示。脚手架:之前 workshop 已讲过 CMA 的 agent environment + session 两个原语,本场就在其上"再加两个概念"——memory store 和 dream。→ 详细 → 详细 → 详细
现状:CMA 上"大多数情况下你一次只创建一个 session,而这些 session 都是相互隔离的",后果是 agent"不会记住过去的信息,也不会把信息传递给未来的会话"。Kevin 建第一个 session 取名 "write test with no memory"(用 bootstrap 的 agent + environment ID),console 里状态是 idle(空闲)。第一条消息发"昨天那场 CMA 演讲"的信息,塞了关键词 multi-agent orchestration 加一个 URL;agent 用 Sonnet。实际模型回:"好的,谢谢你告诉我这些信息。"——礼貌收下、无事可做。→ 详细 → 详细 → 详细
第二步建一个"重新测试"(retest)的全新 session("这几步我会走得快一点"),去问上一个会话刚学到的东西。结果与预期一致:新 session 答"嗯,我其实没有访问这些信息的权限(I don't really have access to this information),我可以从这几个方面帮你"。Kevin 切回幻灯片小结:"我们告诉了它一些东西,过会儿在另一个 session 里问它这件事,结果两个 session 之间没有任何信息传递(No information is transferred between the sessions)。" 赤裸裸的 base case——失忆。→ 详细 → 详细
创建 memory store 的主要参数就一个——名字。Kevin 现场命名为 CWC memory,可"给它加一段简短的描述(description)";他预告"这里其实还有另外两个可以设置的参数",留到挂载 session 时讲(见第七节 prompt 与 access)。创建后在 console 的 managed agents → memory stores 下能看到它处于 active(激活)状态,"你可以点进去,看到一个文件系统查看器(file system viewer)","当然现在里面什么都没有"。除了让 agent 自动写,平台也支持手动添加记忆:"你可以在某个指定路径下创建一个文件,加上一些内容"——人类可预先往库里塞背景知识,不必全靠 agent 积累。→ 详细 → 详细 → 详细

Kevin 重复那个写测试,但这次 session 附带 memory store,发同样文本,"希望这次我们能观察到一个不一样的行为"。点进详情,关键差异立现:模型不再被动收下,而是"先去看 memory,看看'好,这次对话里有没有什么是我需要记住的'"——主动检索记忆库、判断该不该存档。因为库当前是空的,它"把我刚才告诉它的内容直接存进那个 memory store。它把内容存到了这个 sessions.mmd 文件里,而且很贴心地告诉我它做了什么"(sessions.mmd 即 sessions.md 口误,模型自行命名)。因果链值得注意:模型自己决定文件名、自己选择写入、还主动汇报——记忆是 agent 自驱的,不是人手动塞的。→ 详细 → 详细
用同一个 memory store 新建另一个 session,问它"从 CMA 那场演讲里找到了什么、学到了什么"——正是第四节"失忆"测试的翻版,唯一变量是这次有了共享记忆库。在 console UI 里能看到召回过程:模型"先去看它的 memory store 里有没有相关信息。它现在用 grep 来查找关键词,它在找 CMA",结果"找到了一大堆我们在上一个 session 里刚告诉它的信息,现在它就能回答我的问题了"。Kevin 给出本场第一个金句式总结:"这很好地展示了 memory 的威力(the power of memory),而这在以前其实是挺难做到的。" 一个空库 → 写入 → 换会话 grep 召回的最小闭环就此跑通。→ 详细 → 详细

平台提供额外接口"手动检查 store 本身",三件:其一,CLI 可"列出 memory store 里所有的 memory 文件"(相当于 ls)。其二是版本管理(versioning):每个 memory 文件"都是有版本管理的,每次你对一个文件做改动,都会生成一个新版本"——改坏了能回溯。其三是人工直接编辑:UI 里能看到 Claude 建的子目录结构,且"你其实可以直接编辑这些 memory 文件……要是 Claude 写错了什么,或者你只是想补充更多信息,你都可以这么做"。Kevin 收束:"具体哪些 session 用 memory、哪些不用,完全由你来决定。"→ 详细 → 详细 → 详细

创建后返回 dream ID,在 managed agents → dreams 下查看,一开始 pending(等待),"很快就会开始运行";状态在 console 和 API 两边都能看,console 显示"输入的 memory store,以及一个 token 计数"。耗时取决于 transcript 大小/数量,"可能从几分钟到几个小时不等(a couple minutes to hours)"——这正是异步的好处,"这不是那种你想在 agent 工作的时候实时去做的事"。一个很酷的设计点是 dogfooding:"dreaming 其实是直接构建在 CMA 的原语之上的(built directly on top of CMA primitives)"——它为 dream 任务本身建了一个 session,点进去能看它在干什么、看到给它的 prompt,提供"相当不错的可观测性(observability)"、甚至能诊断问题。即 dreaming 不是黑箱,本身就是一个普通 CMA session。→ 详细 → 详细 → 详细

用之前的 dream ID 取回资源、拿到 JSON 里的 output memory store ID,新建 session 挂上它。验证提问:"我参加了哪些 session、我有哪些资源的链接、以及我标记了哪些需要跟进的事项(what follow-ups I flag)。" console 里检索行为变了——这次它能看到 Dreaming 做的所有东西(索引 + event 后勤安排),且是先开始读索引(reading the index first),正兑现第十六节的设计意图。效果对比是全场高潮证据:"这一次信息多了不少。它给了我一个回顾,把所有我参加过的 session 都列了出来,还加上了时间戳(timestamps),告诉我第二天的 session 和对应资源链接。" 结论金句:"这又一次很好地展示了 dreaming 是怎么真正丰富那些在 session 之间传递的信息的。"→ 详细 → 详细 → 详细
可选的最后一步是清理:"在最后,如果你对这里的输出 memory store 真的很满意,你可以去把旧的 memory store 退役掉(retire the old memory store)。" 安全说明:"这不会影响你之前的那些 session,只是能把你组织里 memory store 的数量控制在一个合理的水平。" 即退役只是把旧库标记下线、瘦身管理,不会回溯破坏历史会话。→ 详细
Kevin 给留场的人收尾复盘。先回顾问题:"我们讲了如今大多数 agent 面临的问题,也就是:怎么在多个 session 之间记住信息?我觉得这现在已经是一个相当公认的问题了(a pretty well-established problem now)。" 再回顾解法与副作用:"memory 是解决这个问题的第一步(the first step),你给 agent 一个地方,让它可以把信息倒进去、再从里面读出来。但我们也看到这又带来了一个问题:memory store 会随着时间无限增长。它们会变得杂乱无章,信息会过期。" 最后回到 dreaming 并致谢:"我们再启用一组 agent,它们唯一的任务就是改进那个 memory store,供将来使用(their entire job is to improve that memory store for future use)。" 结束语:"我要感谢大家来参加今天的 workshop。希望对你们有帮助,也希望到最后你们能学会怎么把 memory 集成到你们自己的使用场景里(integrate memory into your own use cases)。"→ 详细 → 详细 → 详细
本场为单人 workshop 演讲,无 lightning round(闪电问答)环节。演讲过程中主讲人 Kevin 复述了一个现场观众的提问并作答,已并入正文「二十二、观众提问」:
问:这个功能的 token 用量大概是多少? 答:dreaming 设计上是穷尽式的,预期用掉很多 token;但因大部分处理是 agentic 的、token 大多被缓存,预期约 95% 缓存命中率;并在探索类似 batch API 的 50% 折扣错峰调度、切换模型、prompt 引导、token 预算等降本手段。→ 详细
收尾原话:主讲人感谢大家参加 workshop,"希望对你们有帮助,也希望到最后你们能学会怎么把 memory 集成到你们自己的使用场景里"。→ 详细
核心三件套:session(单次会话,临时易逝)→ memory store(跨会话的"硬盘",bash/grep 可读写)→ dreaming(后台"做梦"整理记忆,非破坏性)。
memory store 为何选文件系统:"因为这对模型来说是一个非常强大的接口"——复用 bash 遍历、grep 搜词、读文件等模型已熟练的技能。→ 详细
memory 的威力金句:"这很好地展示了 memory 的威力,而这在以前其实是挺难做到的。"→ 详细
dreaming 四类活:事实核查 / 补全细节(日期、标识符)/ 整理去重 / 建索引。→ 详细
非破坏性铁律:"我们其实完全不会去碰你创建的那个输入 memory store"——克隆出输出库再改。→ 详细
穷尽式原则金句:"如果你给它 100 段记录,Claude 会把所有信息都过一遍,确保它没有遗漏任何东西。"→ 详细
写多一点的理由:"当一个 agent 正在处理某个任务时,要预测它将来可能需要什么,其实是挺难的……所以把一些额外的细节写下来其实是件好事。"→ 详细
关键数字:单次 dream 最多约 100 个 session;模型 Opus 4.7 / Sonnet 4.6 二选一;耗时几分钟到几小时;缓存命中率约 95%;batch 错峰省 50%。
(本场为单人演讲,主讲人 Kevin 未在演讲中给出个人联系方式。出品方:Anthropic,Code with Claude 大会。)
这期是你的本命题。 你同时在搭 Holdwell 的多-Agent PRD 工厂、app_incubator 的造 App 链路,又把这本第二大脑当成「给 AI 的长期记忆」,还在用 Claude 跑各种活——而这场 workshop 讲的就是一件事:怎么让转头就忘、彼此隔离的 agent 拥有跨会话的、会自我整理的记忆。 这不是「沾边」,是直接给你正在亲手搭的那套东西提供了一份官方的、已落地的参考架构。下面按你的项目逐条对。
① 「memory store = 挂载成文件系统」给你跨线共享的地基指了一条现成的路。
怎么做的:Anthropic 没有给 agent 发明一套新的记忆 API,而是把记忆做成「一块挂载到容器里的硬盘文件夹」,模型用它早就熟练的
bash遍历目录、grep搜关键词、读文件来存取。Kevin 的原话是「我们之所以把它挂载成文件系统,是因为这对模型来说是一个非常强大的接口」——理由就是复用模型已有的技能,而不是教它新接口。每次会话写进去(那个sessions.md),下次会话 grep 一下就召回。你可以怎么做:你那套 PRD 工厂「跨线对齐」的痛点,缺的本质就是这场讲的 memory store——一块三驾马车都能读写的共享记忆。这期给你的具体启发是别把它设计成一份需要专门工具去解析的结构化 schema,先让它就是一个文件夹 + 一堆 markdown 文件:实体一个文件、术语一个文件、跨线的约定一个文件,让你的三个角色 agent 用 grep/读文件去取。本周可做的一件事:挑一个你最近在做的需求,手动写 3-5 个真实业务实体的 md 文件进这块共享目录(就像 Kevin 演示的「手动添加记忆」),让某个角色的 prompt 里加一句「动笔前先 grep 这个目录看有没有现成定义」,看它能不能少问你一次。
② 「dreaming = 后台异步整理记忆」给了你一个全新的治理层,正好治你「跨线信息散落、越堆越乱」的痛。
怎么做的:他们发现 agent 长期读写记忆会「一股脑堆信息」("start just kind of dumping information"),记忆库无限膨胀、过时、重复。解法是一个独立的批处理任务 dreaming:异步(不占 agent 实时工作)、非破坏性(绝不动原始库,而是克隆一份副本再改)、多 agent(一个总指挥 orchestrator + 每段会话配一个专责子 agent)。它干四类活:事实核查、补全细节(日期/标识符)、整理去重、建索引。最后产出一个更干净的输出库。
你可以怎么做:你工厂里有个一直没解的「跨线信息散落、越堆越乱」的问题——dreaming 给你的模型是把「整理」从「生产」里拆出来,做成一道独立的、事后跑的工序。也就是说,别指望每个角色 agent 在写 PRD 的当下就把知识库维护得干干净净(那是更难的预测问题,见下文③),而是单设一道「整理工序」,定期把这一批工单产出的实体、术语、决策做一次去重 + 补全 + 建索引。本周可做:草拟一个「真人评审定稿之后」的整理步骤 prompt 雏形,输入是「本轮所有 PRD 定稿 + 现有共享定义」,要求它「找重复定义、标过期、补缺失字段、生成一个
_index.md词条页」——先人工跑一次看产出质量。
③ 「建一个索引文件,让未来 agent 先看目录再 grep」是个能立刻抄的小工程。
怎么做的:dreaming 的第一个产物就是一个索引文件(
_index.md),里面是一堆 slug(短词条)指向各个记忆文件。Kevin 说得很直白:「让未来的 agent 去看一个索引文件、快速搞清楚自己要找什么,要比去做一次范围更大的 grep 高效得多。」演示里那个用了输出库的新 session,召回时的行为明显变了——它是先读索引,再定位。你可以怎么做:你的跨线共享定义目录一旦文件多了,agent 每次全目录 grep 会又慢又容易抓偏。给它配一个手写或自动生成的
_index.md,列清楚「有哪些实体类型、哪些术语、各在哪个文件」,并在角色 prompt 里要求「先读 _index.md 再决定打开哪个文件」。这是这期里成本最低、当周就能落、且立竿见影的一招。
④ 「access 只读权限」给「碰撞协议的纪律」一个现成的机制形态。
怎么做的:memory store 挂到 session 时有个
access字段,默认读写,可以设成只读——这样某些会话「只能从记忆库读取,不能更新它」。这是一道结构性的安全闸:不是靠提醒 agent「别乱写」,而是从权限上让它根本写不了。你可以怎么做:你一直担心「碰撞协议的纪律是否真执行」——独立初稿是否真互不可见,现在多半靠约定不靠强制。这期提醒你:强制点可以是一个权限开关,而不是一段 prompt 里的祈使句。 在你的工厂里,可以把「初稿阶段 UX 与 tech 互不可见」「谁能改跨线共享定义」做成读写权限的开关而非嘱咐——把纪律从文化约束变成机制约束。本周可做:列一张表,标清三驾马车在各流程环节里各自能读什么、能写什么,这本身就是一次有价值的职责梳理。
「把该记什么写进 memory store 的 prompt 参数」对到你「把『该做什么』前移到 agent」这条主诉求。
怎么做的:挂载记忆库时除了 access,还有个
prompt参数,用来「引导 agent 去读写特定的信息」。Kevin 特意举的例子就是投资 agent:「你想让它聚焦在某些特定的、需要为将来记住的东西上,那你就可以用这个 prompt 参数来实现。」也就是给记忆库配一份「该记什么、该忽略什么」的工作说明,让记忆不是无差别堆积,而是带目的地积累。你可以怎么做:你想把「该做什么」从用户的临场指令前移到 agent 自己身上——记忆库的 prompt 参数正是一个抓手。在你的造 App 链路里,给跨会话的那块记忆配一句明确的引导,比如「重点记住:本 App 的设计稿契约、已确认的组件命名、用户拒绝过的方案」,让后续 agent 一接手就知道哪些历史决策是硬约束、不用再问。本周可做:给链路里那个「设计稿即工程契约」的环节,写一句记忆引导 prompt,让下一个 agent 默认先读「已确认契约」再动手。
整场 dreaming 的设计,就是你这本知识库「摄入 SOP + 信噪比」问题的一个镜像答案。
怎么做的:dreaming 解决的核心矛盾是「记得多」和「记得乱」之间的张力——一股脑堆 vs 杂乱过时。它的处理姿态有两条特别值得你抄:一是写入时宁滥勿缺、整理时再做减法(Kevin:预测 agent 将来需要什么是「更难的预测问题」,所以先多写细节,dreaming「随时可以回头把不再需要的删掉」);二是非破坏性 + human in the loop——所有整理都发生在克隆副本上,输出库的可视化本身就是「人进来看 harness 有没有犯错」的质检入口。
你可以怎么做:你这本第二大脑也卡在同一个张力上:flomo/视频一股脑摄入(多)vs 主题骨架要保持信噪比(净)。这期给你的判断是——别在「摄入当下」就强求高度提炼,那是更难的活;把『整理』独立成一道事后工序(你的
ingestion-sop.md+ 这次跑 wiifm 这种「事后加值」动作,正是你自己的 dreaming)。两条可立刻内化:① 摄入时允许「写厚、写全、带原话」(就像这份总结报告本身),提炼留给后续;② 任何自动整理都先产副本/先给你审,别让脚本直接改原子笔记。本周可做:把「先副本、人审、再合并」明确写进你的ingestion-sop.md,作为一条硬规则。
Kevin 反复拿「投资 agent」举例不是巧合——这套记忆架构天然适配你的选股逻辑。
怎么做的:他两次用投资场景说明「该记什么」:一个长期跑的 investment agent,需要「聚焦在某些特定的、需要为将来记住的东西上」,靠 memory store 的 prompt 来约束记忆方向;而 dreaming 则负责给这些记忆「补全日期、具体标识符」并做事实核查——这恰好是投资笔记最怕出错的地方(财报日期、口径、数字)。
你可以怎么做:你的 StockHelp 现在是 Phase 1「只看数据」,但你本人作为价值投资者,跨年累积的是「能力圈、商业模式判断、为什么当初看好/看空」这类长期记忆。这期提示你一个未来方向:当 StockHelp 走到带分析的阶段,给每只 watchlist 标的配一块「投资记忆」(你对它护城河/管理层/估值假设的历史判断),让分析 agent 先读这块记忆再下结论,避免每次从零、避免被当下股价情绪带跑。这是「该反着用」的反面——这里你正该照着用。当下一步:在 StockHelp 的 backlog 里记一条「Phase 2+ 考虑每标的的判断日志/记忆文件」,不用现在做。
该反着用:Anthropic 是把记忆做成重型托管平台基建(容器挂载、版本管理、多 agent dreaming harness、95% 缓存、batch 折扣)——那是给海量生产流量摊薄成本的工程。你是一个人同时扛多个项目,精力是元约束。所以正确的借鉴是反过来——抓架构思想,丢重型实现:memory store 对你 = 一个 git 管的文件夹(天然版本管理);dreaming 对你 = 一个你手动或定时跑一次的整理 skill,不需要 orchestrator + 一群子 agent。别被「multi-agent harness」「token 预算」这些词唬住去搭基建,你要的只是「文件夹 + grep + 事后整理 + 先副本后审」这套心智模型。
和你现在做法冲突:dreaming 的「穷尽式」原则——「给它 100 段记录,把所有信息都过一遍,确保不漏任何东西」,一段会话配一个专属子 agent,宁慢宁贵也要全——这和你「99% 的努力终将白费、盯那 1%」「杠杆 > 工时」的操作系统是正面顶牛的。Anthropic 敢穷尽,是因为它有缓存把边际成本压到趋近零;你没有那个缓存,你的「token」是你的注意力,穷尽式整理对你就是纯消耗。这里有张力,留给你自己判断:哪些记忆值得穷尽式整理(可能是 Holdwell 的核心业务实体定义),哪些只配抽样/惰性整理(可能是大部分 flomo 摄入)——别一刀切学它的穷尽。
对你的镜子:你一直把「第二大脑」当成给自己的记忆——但这期照出另一个框架:它同时是给 AI 的记忆地基。你和 Claude 的每次对话,都是一个 session;这本库就是你们之间的 memory store;你跑 wiifm、跑 ingestion-sop,就是在做 dreaming。你不只是在记笔记,你在为「你 + AI」这个共生体搭建跨会话的长期记忆——这句话值得换个角度重看你手头所有「整理知识库」的动作:它们的真正受益者,是未来那个接手的 agent。
1 · C 类现成母题:「Anthropic 给 AI 装了记忆和做梦,我给自家 AI 员工配了一块共享硬盘」
2 · B 支柱的制度素材:AI 公司的"知识库管理制度"三条
该反着用:Anthropic 的"穷尽式整理"是有 95% 缓存兜底的富人玩法;你的一人公司里最贵的 token 是你自己的注意力——这个反差本身可以写成一篇 D 类短评,立场句:「大厂教你的 AI 最佳实践,一半是它的成本结构决定的,照抄就是给自己上刑。」