Claude Code: 记忆系统

最后更新:2026-08-31

记忆系统让 Claude Code 不再每次都从零开始——它记住了你的偏好、项目约定和之前的决策,越用越智能。

💡 提示:Claude Code 的记忆分三层:会话记忆(当前对话)、项目记忆(CLAUDE.md)、个人记忆(全局偏好)。跨会话记忆主要靠 CLAUDE.md 实现。

📋 前置知识:第十四章 插件系统

1. 你将学到


2. 记忆系统架构

(1) 三层记忆模型

100%
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 个人记忆写编码风格和工具偏好(与项目无关的),项目记忆写技术栈和业务规则(项目特有的)。

📖 小节


📝 作业

  1. 基础题(难度⭐):配置全局 CLAUDE.md,写入 3 条编码偏好,验证在新项目中生效。
  2. 进阶题(难度⭐⭐):在项目 CLAUDE.md 中维护技术决策记录,对比有决策记忆和无决策记忆时的表现差异。
  3. 挑战题(难度⭐⭐⭐):设计一套记忆管理策略,确保团队 5 人的 CLAUDE.md 不冲突且保持同步。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏