所属专题簇:记忆与上下文算法深挖
Anthropic 如何定义“什么值得记忆”,以及如何防止 memory 逐渐变成过期、不可验证的谣言库?
Claude Code 通过 memory taxonomy 和 drift caveat,把“写什么 memory”与“怎么使用 memory”同时制度化:只有非可推导信息值得记忆,而所有 recall 都要面对可能漂移的现实。
这一章不讲 memory 文件怎么落盘,而讲记忆策略本身:四类 memory、private/team 作用域、哪些内容不该记、为什么相对日期要转绝对日期,以及 recall 时为何必须验证 drift。
- 不是所有有用信息都应该写进 memory。
- Anthropic 明确禁止把可从代码、git、结构推导的信息塞进 memory。
- memory 不是事实数据库,使用前要再验证当前状态。
- taxonomy 定义:src/memdir/memoryTypes.ts
- memory prompt 生成:src/memdir/memdir.ts
flowchart TD
A["新信息"] --> B{"是否可由当前项目状态推导?"}
B -- 是 --> C["不要保存为 memory"]
B -- 否 --> D{"属于哪一类?"}
D --> E["user"]
D --> F["feedback"]
D --> G["project"]
D --> H["reference"]
E --> I["默认 private"]
F --> J["private 或 team"]
G --> K["强烈偏向 team"]
H --> L["通常 team"]
I --> M["写入前考虑 drift / 使用前验证"]
J --> M
K --> M
L --> M
src/memdir/memoryTypes.ts 最值得注意的不是四类名字,而是开头第一段:
- code patterns
- architecture
- git history
- file structure
这些都被定义为 derivable from current project state,因此不应该存成 memory。
这说明 Anthropic 不是想把 memory 做成“大型知识库存档”,而是只保存当前会话和项目状态里难以再推导回来的信息。
同一文件里定义了:
userfeedbackprojectreference
它们分别对应:
- 用户画像与视角
- 如何合作的经验规则
- 项目中的非代码背景事实
- 外部系统入口和查找指针
这意味着 memory 并不是“一个 blob”,而是有明确用途分层。
尤其是 feedback 与 project:
feedback默认 private,只有项目级规则才升成 teamproject虽可 private 或 team,但强烈偏向 team
这反映出 Claude Code 已经把 memory 当作协作资源,而不只是个人记事本。
project memory 的说明里明确要求:
"Thursday" -> "2026-03-05"
这很重要,因为 memory 的最大风险之一就是“脱离原始对话后,时间语义失真”。Anthropic 直接把这个问题制度化了。
同一文件里的 MEMORY_DRIFT_CAVEAT 明确说:
- memory 可能随着时间过期
- 回答前要验证当前状态
- 如果 memory 与当前观察冲突,应信当前状态
- 并应更新或移除 stale memory
这说明 Anthropic 不把 memory 当成真相源,而把它当成“历史上下文线索”。
很多 memory 系统的问题不在“怎么存”,而在“模型会不会过度相信旧记忆”。Claude Code 在这里的做法很克制:
- 写入阶段先严格限制内容类型
- 读取阶段再强制提醒 drift 风险
这比单纯喊“memory 很有用”更成熟。
- taxonomy 的核心价值是防止记忆泛滥。
- drift caveat 的核心价值是防止模型把旧记忆当当前真相。
- 这两者合起来,才是 Anthropic 的 memory policy,而不只是一个文件格式。