Claude Code02:记忆与上下文管理篇
读完本篇你能:写出有效的 CLAUDE.md、组织规则文件、理解上下文窗口的工作原理,避免 “信息丢失” 和 “它好像忘了我说过什么”。
一、先理清三类 “记忆”
很多人混淆这三件事。一次性讲清:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
核心理解:
-
上下文是 RAM,关机就没;
-
CLAUDE.md 是写在项目里的 “规则书”,所有人共享;
-
Auto Memory 是 Claude 学到的 “个人偏好”,只跟你。
接下来我们各个击破。
二、上下文窗口:你必须懂的 “显存”
上下文窗口(Context Window)是 Claude 一次能 “看到” 的文本量。可以理解为:
它就是 Claude 的工作台,桌子大但有限。摆满了就得先收一些走。
上下文里都装了什么?
-
系统指令(Anthropic 写好的)
-
你的 CLAUDE.md 和 rules 文件
-
MCP / Skills / Subagent 等扩展的描述(不是它们本体,是 “工具说明书”)
-
当前对话的所有消息
-
Claude 调用工具的输入和完整输出
第 5 点最容易爆炸:让它读一个 10 万行的日志文件,整个文件就进上下文了。
用 /context 看占用
/context
会显示当前用了百分之多少、各类内容各占多少。养成开发中段看一次的习惯,能预判什么时候要 compact。
上下文满了会发生什么?
会触发 Compaction(自动压缩):Claude 把历史对话改写成简短摘要,腾出空间。
问题在于:摘要会丢细节。所以你刚才告诉它的某个变量名、某个偏好,可能在 compact 后就模糊了。
三种应对策略(按推荐度排序)
-
写进 CLAUDE.md——稳定信息别留在对话里,写进项目记忆,每次启动自动加载且不会被压缩。
-
分配给 Subagent——大文件读取、长测试日志,扔给子代理(下面 “Agents” 篇详讲),它的上下文是隔离的,不污染主对话。
-
任务做完就
/clear——开新 session,把当前的总结写到 CLAUDE.md。
三、CLAUDE.md:项目的 “协作守则”
这是你和团队最重要的杠杆。写好一份 CLAUDE.md,能让 Claude 的输出质量翻倍。
它放哪?
-
项目根:
项目名/CLAUDE.md(提交到 Git,团队共享) -
用户级:
~/.claude/CLAUDE.md(只你自己用,跨项目生效) -
子目录:
项目名/src/api/CLAUDE.md(只对该目录内的操作生效)
加载规则:Claude 启动时会从当前目录向上扫,把找到的所有 CLAUDE.md 都加载。子目录的 CLAUDE.md 只在当前操作发生在该目录下时被 “重点关注”。
它该写什么?
写 " 不写下来 Claude 就会做错的事 "。三类内容最有价值:
- 项目硬约定
-包管理器只用 pnpm,禁止使用 npm 或 yarn
-测试框架是 vitest,不要装 jest
-数据库迁移用 prisma migrate,禁止手写 SQL DDL
- 代码风格 / 命名
-React 组件用函数组件 + hooks,不写 class 组件
-文件名 kebab-case,组件名 PascalCase
-所有 API handler 必须用 zod 校验入参
- 怎么验证工作完成了
-改完代码后必须跑`pnpm test`全绿
-提交前跑`pnpm lint --fix`
-数据库相关改动后跑`pnpm db:generate`
最后一点尤其关键——给 Claude 一个 “验证手段”,它会自己反复跑直到通过。这是它做长任务的根基。
它不该写什么?
❌ 项目背景介绍、人员名单、商业目标(这些放 README.md,不放 CLAUDE.md)
❌ 上百条琐碎规则(放进 .claude/rules/ 拆开管理)
❌ 临时性想法(写进当下 prompt 即可)
经验法则:CLAUDE.md 控制在 200 行以内。超过就该拆。
/memory 命令:直接编辑
在 Claude 里输入 /memory 会弹出菜单,让你选要编辑哪一个 CLAUDE.md(项目级或用户级),然后用默认编辑器打开。改完保存,下次 session 即生效。
四、.claude/rules/:CLAUDE.md 太大时的解药
当你的项目规则超过 200 行,就该拆。
你的项目/
├─ CLAUDE.md # 100 行核心约定
└─ .claude/
└─ rules/
├─ frontend.md # 前端规则
├─ database.md # 数据库规则
├─ testing.md # 测试规则
└─ security.md # 安全规则
路径作用域
rules 文件支持 frontmatter 指定路径:
---
paths: ["src/components/**/*.tsx"]
---
- 所有组件必须用 forwardRef 暴露
- props 必须用 zod schema 校验
这条规则只在 Claude 操作 src/components/ 下的 tsx 文件时生效。这能省下大量上下文——不操作前端时根本不会加载前端规则。
跨项目共享
用 symlink:
ln -s ~/dotfiles/claude-rules ~/项目/.claude/rules
这样你有 10 个 React 项目时,更新一份就好。
五、AGENTS.md:和其他 AI 工具共享的标准(要主动 import 才生效)
AGENTS.md 是 OpenAI Codex 等其他 AI 编程工具的 “项目记忆” 标准格式。Claude Code 默认读的是 CLAUDE.md,不是 AGENTS.md。如果你的团队同时用多个 AI 工具,想 “一份文件多家通用”,需要主动让 Claude 也读到它。
两种做法:
做法 1:在 CLAUDE.md 里 import
# CLAUDE.md
@AGENTS.md
## Claude 专属补充
-用 plan mode 改动 src/billing/ 下的文件
@AGENTS.md 是 CLAUDE.md 的 import 语法(下面 “Imports” 小节会讲),session 启动时 AGENTS.md 的内容会被拼进来。
做法 2:用 symlink(不需要 Claude 专属内容时)
ln -s AGENTS.md CLAUDE.md
让两个文件指向同一份内容。Windows 上 symlink 需要管理员权限,推荐用做法 1。
怎么分工?
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
六、Imports:CLAUDE.md 也能拆
CLAUDE.md 里可以用 @ 引入其他文件:
# 项目约定
@./docs/api-conventions.md
@./docs/git-workflow.md
## 项目专属补充
...
被引入的文件会在加载时拼进来。和 .claude/rules/ 的区别:rules 有路径作用域、自动按需加载;imports 是全部加载。新手别滥用 imports,否则上下文很快就爆。
七、Auto Memory:长期偏好的 “自动笔记”
这是 Claude 的新功能:它会自动记下你的偏好、习惯,跨 session 保留。
例如:你某次说 “以后注释都用英文”,Auto Memory 可能就记下来了,下次新 session 它会主动用英文写注释。
怎么管理?
-
启用 / 关闭:在
/memory菜单里有开关; -
查看它记了什么:
/memory→ 浏览 auto memory 内容; -
删除:可单条编辑或全清。
它和 CLAUDE.md 怎么分工?
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
建议:核心规则永远走 CLAUDE.md(可控、可审),Auto Memory 当锦上添花。如果是企业生产环境,可以直接关掉 Auto Memory。
八、Compaction:满了之后
理解了上下文窗口,就该理解 Compaction。
自动 compaction
上下文到 80%-90% 左右时,Claude 自动触发:把前面的消息浓缩成摘要,腾出空间继续。
会发生两件事:
1.✅ 早期对话的结论性内容被保留;
2.❌ 早期工具调用的详细输出会丢;
3.⚠️ CLAUDE.md/rules 不会被压缩,永远在。
手动 compaction
输入 /compact,立即触发。适合 “我感觉它快爆了,但还有一大堆事要做” 的时候。
用 Hook 介入 compaction
如果你不想让 Claude 自己决定怎么压缩,可以挂 PreCompacthook(后面 “自动化” 篇详讲),在压缩前注入额外指令,比如 “压缩时务必保留 X 信息”。
九、写一份 “模板级” CLAUDE.md
一个能立刻抄走改改用的模板:
# 项目名
## 项目类型
Next.js 14 App Router + TypeScript + Prisma + PostgreSQL
## 关键约定
-包管理:**只用 pnpm**
-测试:vitest,所有 PR 需`pnpm test`全绿
-提交前:`pnpm lint && pnpm typecheck`必须通过
-数据库:所有 schema 改动通过`prisma migrate`,禁手写 SQL
## 代码风格
-文件名 kebab-case,组件 PascalCase
-服务端 action 文件以`.action.ts`结尾
-API 入参必须 zod 校验
## 目录约定
-`src/app/`: 路由
-`src/components/ui/`: 基础组件(不业务)
-`src/components/`: 业务组件
-`src/lib/`: 工具函数 & 第三方封装
-`prisma/`: schema 和 migration
## 重要:在改动前先看
-@./docs/architecture.md
-@./docs/api-conventions.md
## 完成的定义
-代码改完 →`pnpm test`全绿
-涉及 schema →`pnpm db:generate`
-涉及 UI → 至少自测一遍页面渲染
把它放到项目根,所有协作者(人和 AI)的水平瞬间拉齐一截。
十、最容易踩的 5 个坑
-
CLAUDE.md 写成 README:长篇背景介绍,浪费上下文。CLAUDE.md 应该是 “祈使句”,告诉 Claude 该做什么不该做什么。
-
规则太多塞在一个文件:超过 200 行就拆到
.claude/rules/,用路径作用域。 -
指望 Claude “记得” 上次说的话:默认不会跨 session 记忆。要持久化就写进 CLAUDE.md 或 Auto Memory。
-
不看
/context:上下文要爆了都不知道,等 compact 完发现关键信息丢了。 -
修改 CLAUDE.md 不重启 session:CLAUDE.md 是 session 启动时加载的,改完要新开 session 或运行
/memory重载。
✅ 本篇要点回顾
-
三类记忆:上下文(短期)、CLAUDE.md(项目共享)、Auto Memory(个人偏好)。
-
上下文窗口有限,
/context看占用,满了触发 compaction(会丢细节)。 -
CLAUDE.md 写约定 + 风格 + 怎么验证,三类内容最值钱。控制在 200 行内。
-
规则太多用
.claude/rules/拆,配 frontmatter 做路径作用域。 -
Auto Memory 是锦上添花,企业场景可关闭,核心规则全走 CLAUDE.md。
-
大任务上下文紧张时,三招:写进 CLAUDE.md / 用 Subagent / 做完就 /clear。
更多推荐


所有评论(0)