跳转到主内容持续学习:让 Claude Code 越用越懂你
用了一段时间 Claude Code 后,你可能会产生一种微妙的挫败感:
明明上次对话里它已经完全理解了我的代码风格,为什么这次又开始写 var 了?
这不是幻觉。Claude Code 确实没有跨对话的持久记忆——每次新对话都是一张白纸。但这不意味着你只能忍受。这篇文章讲的就是如何让这张白纸在打开的瞬间,就已经写满了关于你的关键信息。
先理解问题的本质
大语言模型的记忆存在于上下文窗口中。对话结束,上下文清空,记忆消失。这是架构层面的限制,不是 bug。
但人和工具的协作不是这样的。你用 Git 用了三年,Git 不需要每次都重新学习你的分支策略。你用 VS Code 用了三年,它不会每次启动都恢复默认配置。
Claude Code 的解决思路是:既然模型本身无法记忆,就把记忆外化到文件系统中。
每次对话开始时,Claude Code 会自动读取特定位置的文件,把它们注入上下文。这些文件就是你的"外部记忆"。你维护得越好,Claude Code 对你的理解就越深。
三层记忆体系
┌─────────────────────────────────────┐
│ 当前对话上下文 │ ← 本次会话的所有交互
├─────────────────────────────────────┤
│ 项目级 CLAUDE.md │ ← 项目根目录,团队共享
├─────────────────────────────────────┤
│ 用户级 ~/.claude/ 记忆 │ ← 个人全局,跨项目生效
└─────────────────────────────────────┘
第一层:CLAUDE.md——静态记忆
第五篇已经详细讲过 CLAUDE.md 的写法。这里换一个角度:把它看作"写给未来 Claude 的备忘录"。
一个好的 CLAUDE.md 不只是告诉 Claude 项目用了什么技术栈。它应该记录你踩过的坑和做出的决定:
## 技术决策记录
### 为什么用 date-fns 而不是 dayjs
- dayjs 的 tree-shaking 在我们的 webpack 配置下不生效
- 2024 年 11 月测试过,bundle 大了 47KB
- 除非 webpack 配置大改,否则不要换
### API 响应格式
- 所有接口统一返回 { code, data, message }
- code 为 0 表示成功,非 0 表示失败
- 不要用 HTTP 状态码区分业务错误
这种记录的价值在于:新开一个对话时,Claude Code 不会建议你"试试 dayjs,它更轻量",因为它已经知道你试过了,而且知道为什么不行。
第二层:Memory 系统——自动维护的记忆
在 ~/.claude/ 目录下,Claude Code 维护着一套记忆文件。你可以在对话中要求 Claude Code 记住某些事情:
记住:我喜欢用具名导出,不用默认导出
记住:这个项目的测试文件放在 __tests__ 目录下,不是 .test.ts 后缀
记住:部署前一定要跑 pnpm typecheck
Claude Code 会把这些信息写入记忆文件,下次对话时自动加载。
| 维度 | 全局记忆 (~/.claude/) | 项目记忆 (CLAUDE.md) |
|---|
| 作用范围 | 所有项目 | 当前项目 |
| 内容类型 | 个人偏好、通用习惯 | 项目架构、业务规则 |
| 是否提交 Git | 否 | 是 |
| 谁维护 | 你自己 | 团队共同维护 |
第三层:会话沉淀——从对话中提取模式
每次和 Claude Code 的深度对话都是一次学习。你们可能花了半小时调通一个复杂的数据库迁移,或者找到了一个巧妙的缓存失效策略。对话结束后,这些知识就消失了。
这次对话中有哪些值得记住的决策或模式?
请整理成适合放入 CLAUDE.md 的格式
Claude Code 会帮你提炼出可复用的知识。你只需要复制到 CLAUDE.md 或记忆文件中。
社区的持续学习机制
Instincts(直觉)
每次你对 Claude Code 的输出做出修正——比如它生成了一个 class 组件,你改成了函数组件——这个修正就是一个信号。Instincts 系统会自动捕捉这些信号,提取出你的编码偏好,存储在本地文件中,下次对话自动加载。
/learn 命令
手动触发的模式提取。在对话结束前执行 /learn,它会分析当前对话,提取出值得记住的模式和偏好。
/evolve 命令
当积累了足够多的直觉后,/evolve 会把它们聚合成更高层的"技能"。类似于人类从经验中抽象出方法论。
不装插件,自己搭建持续学习
会话结束回顾
请回顾本次对话,提取以下信息:
1. 做出了哪些技术决策?原因是什么?
2. 发现了哪些坑或者反模式?
3. 有没有可以复用的代码模式?
4. 用适合放入 CLAUDE.md 的 Markdown 格式输出
分层的记忆文件结构
项目根目录/
├── CLAUDE.md # 主文件,核心规则
├── .claude/
│ ├── architecture.md # 架构决策记录
│ ├── patterns.md # 常用代码模式
│ └── pitfalls.md # 已知的坑和解决方案
定期审查
请审查当前的 CLAUDE.md,指出:
1. 哪些内容可能已经过时?
2. 哪些内容过于琐碎,可以删除?
3. 哪些内容可以合并精简?
一个月后的变化
第一周:CLAUDE.md 还很粗糙。Claude Code 表现和不写差别不大。
第二周:开始积累技术决策和踩坑记录。Claude Code 不再建议已被否决的方案。
第三周:代码模式和架构约定趋于稳定。Claude Code 生成的代码越来越接近你的风格,需要修正的地方明显减少。
第四周:记忆文件本身成了有价值的项目文档。新成员加入时,读一遍 CLAUDE.md 就能理解项目的大部分约定。
什么该记住,什么该忘掉
应该记住的:经过验证的技术决策及其原因、项目特有的约定、反复出现的代码模式、已知的坑和解决方案、你的核心编码偏好。
应该忘掉的:临时性的调试信息、已经过时的决策、过于具体的实现细节(行号会变)、显而易见的常识。
经验法则:CLAUDE.md 的总内容控制在 2000-3000 字以内。超过这个量,就需要做减法了。
Claude Code 的记忆问题本质上是一个知识管理问题。模型没有持久记忆,但你可以通过文件系统把关键知识持久化。
三个核心动作:写下来(对话结束后提取知识)、结构化(按层级组织记忆)、定期清理(删除过时内容)。
一个 CLAUDE.md 文件、一个回顾习惯、一个月的坚持,就能让 Claude Code 从"每次都是陌生人"变成"老搭档"。
本篇要点:
- Claude Code 没有跨对话记忆,但可以通过文件系统外化记忆
- 三层记忆:当前对话上下文 → 项目 CLAUDE.md → 全局 ~/.claude/ 记忆
- 养成会话结束时回顾和提取的习惯
- 记忆要精炼:2000-3000 字以内,定期清理过时内容
- 坚持一个月,修正次数从每次 8-10 处降到 2-3 处