看了一晚上 Claude Code 泄露的代码,结合常见的记忆管理框架,把记忆模块做了一些分析。
Tulving 老爷子在 1972 年提出了记忆系统的框架设计,至今仍在广泛使用,他把记忆分为三类:1)情境记忆(episodic memory),我干了啥,用来记录过去;2)语义记忆(semantic memory),我知道啥,用来提炼规律;3)以及程序化记忆(procedural memory),我会做啥,用来决定行动。
这些记忆之间是存在相关性的,例如我经历的事情(情景记忆)会慢慢遗忘细节,储存在脑海中的是提炼后的规律和知识,也就是压缩成了语义记忆;而我知道的东西又会逐渐内化为行动的指引,变成一种“知道怎么做”的能力,这就是程序化记忆;程序化记忆反过来又会指导行动,从而产生新的经历。三者构成了一个不断循环的过程:经历 → 知识 → 技能 → 新的经历。
Claude Code Memory 在这几块都有对应的实践,例如每轮次的对话它会以 jsonl 格式做储存,这是情境记忆;同时在对话过程中还会有 SessionMemory 做实时蒸馏,相当于一边发生一边做初步整理。
每轮次结束后,它会 fork 出一个子 Agent(extractMemories)去提取值得持久化的内容,写入带 YAML 头的 MD 文件,这一层对应语义记忆,把零散对话压缩成可复用的知识。更有意思的是它还有一个 autoDream 机制,会在后台做整合和修剪,把碎片化的内容重新组织、合并、更新,这一步很像记忆的巩固过程。
很多框架都没有实现程序化记忆,而 Claude Code 做了。它有一个 feedback 的记忆类型,不仅记录了不要做什么(用户的纠正),还会记录哪些做法是对的(用户的确认),这些都是经验化的技能记录。多数系统只考虑负反馈,Claude Code 兼顾了正向确认,让 Agent 不至于越学越保守,这一点非常关键。
相比 LangMem/Mem0/Zep/EverMemOS/MemOS 这些框架,Claude Code 肯定弱的像个菜鸡😄。它有很多能力是明显不足的,例如:不支持语义化召回(用 LLM 扫 metadata 代替向量检索,上限 200 个文件)、遗忘策略比较粗(24 小时 or 5 轮对话触发整合)、无关联网络(记忆是孤立文件),等等。
真要像 EverMemOS/MemOS 那样追求全量记忆,工程和架构复杂度会直线上升,就拿 EverMemOS 来说,光基础设施就包含了 MongoDB/Elasticsearch/Milvus/Redis,更别说其他的附带依赖了。这类框架更适合做个人长期记忆管理。
另外也去对比了下 OpenClaw,它的记忆实现也非常有意思。它不追求全量记忆,而是优先解决“记忆什么时候该被用”。它把记忆拆成了三层:全局层、工作区层、任务层,逐层收敛,只在必要的时候才把上下文拉进来。
在 OpenClaw 眼里,记忆不是资产,正确使用记忆的能力才是。所以它的设计更侧重于重建临时的记忆网络。
放在这个视角下再去看 Claude Code,就会发现它其实选了一条更偏执行的路径。
对它来说,看清问题全貌也没那么重要。它解决问题的方式,更像人类工程师 debug,一边看、一边改、一边跑、一边修正,在行动中逐步逼近答案。
在这个过程中,Memory 的作用就是一个“防遗忘机制”,保证关键上下文不会在多轮试错中丢失。