Claude Code: 记忆系统
最后更新:2026-08-31
记忆系统让 Claude Code 不再每次都从零开始——它记住了你的偏好、项目约定和之前的决策,越用越智能。
💡 提示:Claude Code 的记忆分三层:会话记忆(当前对话)、项目记忆(CLAUDE.md)、个人记忆(全局偏好)。跨会话记忆主要靠 CLAUDE.md 实现。
📋 前置知识:第十四章 插件系统
1. 你将学到
- 记忆系统的三层架构
- 会话记忆的工作机制
- 项目记忆(CLAUDE.md)最佳实践
- 个人记忆配置
- 记忆管理策略
2. 记忆系统架构
(1) 三层记忆模型
graph TB
A[个人记忆<br/>~/.claude/CLAUDE.md] --> C[合并上下文]
B[项目记忆<br/>项目/CLAUDE.md] --> C
D[会话记忆<br/>对话历史] --> C
C --> E[Claude Code 理解]
| 层级 | 持久性 | 作用域 | 存储位置 |
|---|---|---|---|
| 个人记忆 | 永久 | 所有项目 | ~/.claude/CLAUDE.md |
| 项目记忆 | 永久 | 当前项目 | 项目/CLAUDE.md |
| 会话记忆 | 临时 | 当前会话 | 内存(不持久化) |
(2) 记忆优先级
TEXT
📖 仅展示
项目记忆 > 个人记忆 > 会话记忆
当项目 CLAUDE.md 与全局 CLAUDE.md 冲突时,
以项目 CLAUDE.md 为准。
▶ 示例 1: 三层记忆协作
TEXT
📖 仅展示
# 全局记忆 (~/.claude/CLAUDE.md)
"我喜欢 TypeScript 严格模式,函数不超过 20 行"
# 项目记忆 (项目/CLAUDE.md)
"本项目使用 JavaScript (非 TypeScript),函数可到 50 行"
# 结果:Claude Code 生成 JavaScript 代码,函数不超过 50 行
# 项目记忆覆盖了个人记忆
3. 会话记忆
(1) 对话历史管理
| 操作 | 命令 | 说明 |
|---|---|---|
| 查看历史 | /history |
查看当前会话的对话记录 |
| 压缩历史 | /compact |
压缩对话历史减少 Token |
| 清除历史 | /clear |
清空对话重新开始 |
| 恢复会话 | claude --resume |
恢复上次会话 |
(2) 会话内记忆特性
TEXT
📖 仅展示
# Claude Code 在会话内记住之前的对话
> 创建一个 UserService
[创建完成]
> 给它添加密码重置功能
[添加完成]
> 再加一个邮箱验证功能
[Claude Code 记得 UserService 在哪,直接修改]
# 不需要每次都说"在刚才创建的 UserService 中"
(3) 会话记忆的局限
TEXT
📖 仅展示
# 会话结束后,对话历史不保留
# 会话1
> 我偏好函数式编程风格
[生成函数式代码]
# 新会话2
> 重构这个模块
[可能生成非函数式代码——不记得之前的偏好]
# 解决:把偏好写入 CLAUDE.md
4. 项目记忆(CLAUDE.md)
(1) 作为记忆载体的 CLAUDE.md
MARKDOWN
# CLAUDE.md
## 项目约定(持久记忆)
- 使用 TypeScript 严格模式
- API 响应格式:{ code, data, message }
- 错误使用 AppError 类
- 测试框架:Vitest
## 已完成的工作(进度记忆)
- ✅ 用户认证模块(JWT)
- ✅ 角色权限系统(RBAC)
- 🔄 订单管理模块(进行中)
- ❌ 支付集成(待开始)
## 技术决策记录(决策记忆)
- 2026-08-15: 选择 Redis 缓存而非内存缓存(需要集群支持)
- 2026-08-20: 使用 Prisma 而非 TypeORM(类型安全更好)
- 2026-08-25: 金额使用 cents 整数(避免浮点误差)
(2) 自动更新项目记忆
▶ 示例 2: 让 Claude Code 记住决策
TEXT
📖 仅展示
> 记住:支付模块使用 Stripe SDK,不直接调用 REST API
Claude Code:
→ Updating CLAUDE.md...
→ Added: "支付集成使用 Stripe SDK(非直接 REST 调用)"
# 后续会话中:
> 实现支付退款功能
Claude Code:
→ [从 CLAUDE.md 读取] 使用 Stripe SDK
→ Creating payment.service.ts using Stripe SDK
✅ 完成
5. 个人记忆
(1) 全局偏好配置
MARKDOWN
<!-- ~/.claude/CLAUDE.md -->
## 编码偏好
- TypeScript 严格模式
- 优先 const,避免 let 和 var
- 函数不超过 30 行
- 添加 JSDoc 注释
- 使用 ES Module
## 测试偏好
- describe/it 风格(不用 test())
- 测试命名:should + 动词 + 条件
- mock 外部依赖,不 mock 内部模块
- 每个测试独立,不依赖执行顺序
## Git 偏好
- Commit 格式:conventional commits
- 中文 commit message
- 每个功能点单独 commit
## 不喜欢
- ❌ 不要使用 any 类型
- ❌ 不要用 console.log 调试
- ❌ 不要忽略 TypeScript 错误
(2) 工作习惯记忆
MARKDOWN
<!-- ~/.claude/CLAUDE.md -->
## 工作流程
- 先写测试,再写实现
- 修改后立即运行测试
- 每完成一个功能就 git commit
## 常用项目
- ~/work/api-server: Express + Prisma 后端
- ~/work/web-app: React + Vite 前端
- ~/work/shared: 共享类型定义
▶ 示例 3: 个人记忆生效
TEXT
📖 仅展示
# Alice 配置了全局偏好后
# 项目A(有项目 CLAUDE.md)
> 添加一个用户查询接口
→ 使用项目 CLAUDE.md 的 Express + Prisma 风格
→ 但保留全局偏好(JSDoc、const 优先)
# 项目B(无项目 CLAUDE.md)
> 添加一个用户查询接口
→ 使用全局偏好的编码风格
→ TypeScript 严格模式、ES Module、JSDoc
6. 记忆管理策略
(1) 记忆维护清单
| 频率 | 操作 | 说明 |
|---|---|---|
| 每次 | 重要决策写入 CLAUDE.md | 技术选型、架构决策 |
| 每周 | 更新进度记忆 | 已完成/进行中/待开始 |
| 每月 | 清理过时记忆 | 移除不再适用的约定 |
| 项目切换 | 检查项目 CLAUDE.md | 确保约定与实际一致 |
(2) 记忆去重与冲突
TEXT
📖 仅展示
# 冲突检测
全局:使用 ESLint
项目:使用 Biome
→ 项目级覆盖全局,Claude Code 使用 Biome
# 去重
全局:添加 JSDoc
项目:添加 JSDoc
→ 不重复,合并为一条
❓ 常见问题
Q Claude Code 会自动记住我说的话吗?
A 仅在当前会话内。跨会话需要你主动写入 CLAUDE.md。你可以说"记住这个偏好",Claude Code 会尝试更新 CLAUDE.md。
Q CLAUDE.md 太长会影响性能吗?
A 会。CLAUDE.md 每次会话都加载,建议控制在 150 行以内。无关内容移到其他文档。
Q 多个开发者共享项目 CLAUDE.md 怎么办?
A 项目 CLAUDE.md 提交到 git,团队共享。个人偏好用全局 CLAUDE.md,不提交到 git。
Q 记忆会丢失吗?
A 会话记忆会话结束就消失。CLAUDE.md 持久保存在文件系统中,除非文件被删除。
Q 可以导出记忆吗?
A CLAUDE.md 本身就是文本文件,直接复制即可。会话记忆暂不支持导出。
Q 个人记忆和项目记忆的边界怎么定?
A 个人记忆写编码风格和工具偏好(与项目无关的),项目记忆写技术栈和业务规则(项目特有的)。
📖 小节
- 三层记忆:个人(全局偏好)、项目(CLAUDE.md)、会话(对话历史)
- 会话记忆临时,项目/个人记忆持久
- CLAUDE.md 是最重要的记忆载体,承载项目约定和技术决策
- 项目记忆 > 个人记忆 > 会话记忆
- 定期维护记忆:写入决策、更新进度、清理过时内容
📝 作业
- 基础题(难度⭐):配置全局 CLAUDE.md,写入 3 条编码偏好,验证在新项目中生效。
- 进阶题(难度⭐⭐):在项目 CLAUDE.md 中维护技术决策记录,对比有决策记忆和无决策记忆时的表现差异。
- 挑战题(难度⭐⭐⭐):设计一套记忆管理策略,确保团队 5 人的 CLAUDE.md 不冲突且保持同步。