Skip to content
雲里
里雾

02 上下文与记忆系统

claude code guide AI 更新于 2026/3/26

原文:How Claude remembers your project

核心问题

AI Agent 的每次对话都从空白开始——它没有”记忆”。那如何让它记住你的项目规范、偏好、踩过的坑?

Claude Code 的答案是两套互补的记忆系统

CLAUDE.mdAuto Memory
谁写Claude 自己
内容指令和规则学习到的模式
类比你给新同事写的入职文档同事自己记的工作笔记
加载每次会话开始每次会话开始(前 200 行)

类比:CLAUDE.md 像是项目的 .editorconfigtsconfig.json——你写的、团队共享的项目规范;Auto Memory 像是 .bash_history——系统在使用过程中自动积累的记录。

CLAUDE.md:你写的持久指令

作用域层级

CLAUDE.md 可以存在于多个位置,从宽到窄:

/Library/.../ClaudeCode/CLAUDE.md    ← 企业级(IT 部署)
~/.claude/CLAUDE.md                   ← 个人级(所有项目)
./CLAUDE.md 或 ./.claude/CLAUDE.md    ← 项目级(团队共享)
子目录/CLAUDE.md                      ← 子目录级(按需加载)

更具体的位置优先级更高。就像 CSS 的层叠优先级——最近的规则胜出。

写好 CLAUDE.md 的原则

该写什么:

不该写什么:

关键指标:每行问自己”删掉这行会导致 Claude 犯错吗?“不会就删。

高级特性

---
paths:
  - "src/api/**/*.ts"
---
# API 开发规则
- 所有 API 端点必须包含输入校验

Auto Memory:Claude 自己的笔记

Auto Memory 是 Claude 在工作中自动保存的笔记——构建命令、调试发现、架构模式、代码风格偏好。

存储位置~/.claude/projects/<project>/memory/

结构

memory/
├── MEMORY.md          ← 索引文件,每次加载前 200 行
├── debugging.md       ← 调试模式笔记
├── api-conventions.md ← API 设计决策
└── ...

关键点:

上下文压缩(Compaction)

当上下文接近极限时,Claude 自动压缩:

  1. 先清除旧的工具输出
  2. 再摘要对话
  3. CLAUDE.md 完整保留(从磁盘重新读取)
  4. 只在对话中提到而没写进 CLAUDE.md 的指令可能丢失

/compact 可以手动触发,还能指定保留焦点:/compact focus on the API changes


知识检测

概念理解题

  1. CLAUDE.md 和 Auto Memory 的本质区别是什么?为什么需要两套系统而不是合并成一套?

  2. CLAUDE.md 被描述为”上下文而非强制配置”——这意味着什么?它和 .eslintrc 这种强制配置有什么区别?

  3. 为什么 Auto Memory 的 MEMORY.md 有 200 行限制?如果不限制会怎样?

应用题

  1. 你接手一个新的 Node.js/Express 后端项目,需要为团队写一份 CLAUDE.md。列出你会包含的 5 个要点。

  2. 一个场景:你告诉 Claude “所有 API 请求都要加 retry 逻辑”,但 /compact 之后 Claude 不再遵守这个规则了。问题出在哪?怎么解决?

迁移思考题

  1. OpenClaw 没有 Auto Memory 机制。如果你要为 OpenClaw 设计一个类似的记忆系统,你会怎么做?(提示:OpenClaw 有 session 和 workspace 的概念)

  2. CLAUDE.md 的 .claude/rules/ 机制支持按文件路径条件加载。这个设计和 Webpack/Vite 的多环境配置(development/production/staging)有什么相似之处?


参考答案

1. CLAUDE.md vs Auto Memory 的本质区别

CLAUDE.md 是你的意图(“Claude 应该怎么做”),Auto Memory 是Claude 的经验(“我发现了什么”)。需要两套系统是因为写入者、更新频率和内容性质不同:你不太可能每天更新 CLAUDE.md 记录构建命令,但 Auto Memory 会在第一次看到构建错误时自动记下解决方案。合并的问题是:如果 Claude 可以改你的规则,规则的权威性就丧失了;如果你每次都要手动记录经验,效率太低。

2. “上下文而非强制配置”

.eslintrc 是程序强制执行的——不合规则的代码无法通过检查。CLAUDE.md 是 LLM 看到的文本——Claude “尽量”遵守但不保证。越具体的指令遵守率越高,冲突指令可能被随机选择,上下文窗口越满遵守率越低。需要强制执行的规则应该用 Hook(确定性),而不是 CLAUDE.md(概率性)。

3. 200 行限制的原因

MEMORY.md 每次会话都完整加载——如果不限制,笔记会无限增长,占满上下文空间,挤压实际工作内容。200 行逼迫 Claude 保持精简,详细内容放到子文件按需加载。和控制 App 启动时加载的数据量是同一个思路。

4. Node.js/Express 项目的 CLAUDE.md 要点

(1) 启动命令(npm run devnpm run build)(2) 测试框架和命令(Jest / Vitest + Supertest)(3) 代码规范(TypeScript strict, ESLint + Prettier)(4) 项目结构约定(routes/controllers/services/models 目录分工)(5) 数据库迁移流程(npx prisma migrate dev)。

5. /compact 后规则丢失

规则只存在于对话历史中,没有写入 CLAUDE.md。Compaction 时对话被摘要,口头指令丢弃,CLAUDE.md 从磁盘重新读取不受影响。解决:把规则写入 CLAUDE.md 或 .claude/rules/,越具体越好(如”使用 fetchWithRetry 函数”而非泛泛的”加 retry”)。

6. 为 OpenClaw 设计 Auto Memory

利用 OpenClaw 已有的 Memory 系统。设计:(1) agent_end Plugin Hook 分析对话中的新发现/纠正 (2) 将值得记住的内容追加到 memory/auto-learnings.md (3) 用 memory_search 向量搜索在下次运行前检索相关经验。OpenClaw 的向量搜索比 Claude Code 的纯文件方式更能找到语义相关的旧经验。

7. Rules 和多环境配置的相似性

两者都是条件化配置——根据上下文自动选择加载哪些规则。Webpack 的多环境配置根据 NODE_ENV 选配置,.claude/rules/ 根据编辑的文件路径选规则。相似点:减少全局配置膨胀,让不相关的配置不占资源。不同点:Webpack 环境在构建时确定,rules 在运行时动态触发。


参见