ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code 到底怎么记住你的项目?一篇讲透 CLAUDE.md、Auto Memory 和上下文管理

Claude Code 到底怎么记住你的项目?一篇讲透 CLAUDE.md、Auto Memory 和上下文管理 用 Claude Code 久了以后最影响体验的往往不是它代码写得好不好而是另一个问题昨天刚跟你讲明白的项目规则今天为什么又要重新解释比如一个项目里你可能已经反复说过这是 Spring Boot 3 项目 统一使用 MyBatis Plus 集成测试前必须启动 Redis 不要写 SELECT * 改完代码必须跑对应测试如果这些信息一直只存在聊天记录里那新开会话以后确实可能丢掉。Claude Code 解决这个问题主要依靠三层东西CLAUDE.md → 长期规则 Auto Memory → Claude 工作过程中积累的经验 Context Window → 当前这次会话正在使用的信息这三个东西看起来都叫“记忆”底层其实完全不是一回事。一、先说底层Claude 并没有一个无限大的“脑子”Claude Code 每次回答问题本质上都是把当前能看到的信息装进一个Context Window也就是上下文窗口。可以粗略理解成系统指令 CLAUDE.md Auto Memory 中加载的记忆 当前读取的代码 终端输出 这次会话的聊天记录 ↓ Context Window ↓ 模型推理所以 Context Window 更像程序运行时的内存。今天正在改哪个接口、刚才出现什么报错、我们刚刚决定采用方案A还是方案B这些信息主要活在当前上下文里。它不是某个context.md文件也不是永久存储。这也是为什么一个会话聊得特别长以后早期细节可能逐渐变得不那么突出。真正需要跨会话长期保存的信息应该落到磁盘上的记忆文件里。二、CLAUDE.md相当于项目的“入职手册”如果一件事属于无论哪次会话只要开发这个项目都应该知道。最适合放到CLAUDE.md。项目根目录可以这样放order-system/ ├── CLAUDE.md ├── pom.xml └── src/也可以放order-system/ └── .claude/ └── CLAUDE.md这两个位置都是官方支持的项目级配置。Claude Code 会在会话中加载这些项目指令。例如# 项目开发说明 这是一个订单交易系统。 ## 技术栈 - Java 21 - Spring Boot 3 - MySQL 8 - Redis - RocketMQ ## 开发约定 - Controller 不直接调用 Mapper - SQL 禁止使用 SELECT * - 修改业务代码后运行对应单元测试 - Redis Key 使用 业务:模块:id 格式 ## 常用命令 - 测试mvn test - 启动mvn spring-boot:run第一次接手一个陌生项目也没必要完全手写。可以进入项目执行/initClaude Code 会分析代码库生成一个初始的CLAUDE.md如果文件已经存在它会给出改进建议而不是简单覆盖。我比较喜欢把它理解成CLAUDE.md 不是聊天记录而是给 Claude 的项目 README。三、个人习惯不要全部塞进项目假设你自己的习惯是解释代码时先讲原理 Java 优先构造器注入 修改完成后告诉我改了哪些文件 SQL 默认不要 SELECT *这些并不属于某一个项目而属于“你这个开发者”。可以放到~/.claude/CLAUDE.md它是用户级配置会作用于你的不同项目。所以可以这样记./CLAUDE.md → 这个项目有什么规矩 ~/.claude/CLAUDE.md → 我这个人有什么习惯如果只是某个项目里的个人设置而且不希望提交 Git还可以使用./CLAUDE.local.md例如# 我的本地开发习惯 - 本地数据库使用 localhost:3307 - 调试订单时优先使用用户 10001 - 不要自动提交 Git这种文件适合加入.gitignore避免影响团队其他人。四、Auto Memory这才更像“Claude 自己做的工作笔记”CLAUDE.md 主要是你告诉 Claude 应该记什么。Auto Memory 则反过来Claude 在工作过程中自己判断哪些经验以后可能还有用。比如你和它排查半天发现OrderService 的集成测试失败不是代码错了而是本地 Redis 没启动。这种东西不一定值得写成项目强制规范但下一次遇到类似问题时非常有价值。Auto Memory 默认开启官方明确说明 Claude 会根据未来是否可能有用自行决定要不要保存诸如构建命令、调试经验、架构信息和工作习惯等内容。它默认存放在~/.claude/projects/project/memory/例如~/.claude/projects/project/memory/ ├── MEMORY.md ├── debugging.md ├── api-conventions.md └── testing.md这些都是真实存在的普通 Markdown 文件可以自己打开、修改甚至删除。五、MEMORY.md 为什么不直接把所有经验都写进去因为MEMORY.md更像一本笔记的目录。例如# MEMORY.md - Redis 集成测试注意事项见 debugging.md - API 命名规范见 api-conventions.md - 项目测试约定见 testing.md详细内容再放# debugging.md ## Redis Order 模块集成测试依赖本地 Redis。 常见异常 Connection refused localhost:6379 出现该问题时先检查 Redis 是否启动 不要第一时间修改业务代码。这里有一个很有意思的底层设计Claude Code 每次新会话启动时只自动加载MEMORY.md的前200行或者前25KB whichever comes first像debugging.md这样的详细文件不会每次一股脑塞进上下文而是需要时再读取。这其实很好理解。就像程序员工作时先记得“这个坑以前踩过”真遇到了再翻详细笔记。而不是每天上班先把过去两年的排障记录全部背一遍。六、怎么让 Claude 主动帮你总结记忆Auto Memory 会自己工作但实际开发里我不太建议完全靠它“自己悟”。复杂任务做完以后可以直接说请总结这次排查过程中值得长期保留的经验。 只保存以后还可能复用的信息 不要保存这次临时需求和一次性数据。 如果有必要请整理到 Auto Memory 调试经验和项目规范分开记录。或者更简单记住这个项目执行 API 集成测试之前 必须先启动本地 Redis。官方目前明确支持这种自然语言操作当你要求 Claude “remember that...” 时它会把信息保存到 Auto Memory。如果这不是“经验”而是一条以后必须遵守的规则那就应该明确说把“禁止直接修改生产数据库” 加入项目 CLAUDE.md。这两个动作最好分开以后可能有用的经验 → Auto Memory 以后必须遵守的规则 → CLAUDE.md七、怎么知道它到底记了些什么直接执行/memory这是最实用的命令之一。它可以查看CLAUDE.md CLAUDE.local.md Auto Memory 其他记忆文件位置也可以打开 Auto Memory 目录查看、修改或者删除里面的内容并控制 Auto Memory 是否开启。如果你的问题不是“Claude 保存了什么”而是“这次会话到底加载了哪些记忆”应该执行/context这两个命令可以这样记/memory → 管记忆文件 /context → 看这次会话实际吃进去了什么官方也建议通过/context检查当前哪些 Memory files 真正加载成功。八、为什么 CLAUDE.md 也不能写成一本小说假设你把项目所有资料全部塞进去CLAUDE.md 数据库设计 历史Bug 全部接口文档 部署手册 100条编码规范 项目发展史 几十页需求 ……technically 能加载但并不是好事。因为 CLAUDE.md 本身也要占 Context Window。官方目前建议保持内容简短、具体项目CLAUDE.md最好控制在大约200行以内文件越大占用上下文越多规则执行效果反而可能下降。所以我更喜欢CLAUDE.md → 只放高频、重要、必须知道的规则 .claude/rules/ → 按代码范围拆规则 docs/ → 放完整架构文档和业务资料 Auto Memory → 放实际工作积累出来的经验.claude/rules/还可以按照文件路径生效比如只有 Claude 操作src/api/**时才加载 API 规则避免无关内容一直占着上下文。九、我自己更推荐的项目结构一个长期项目可以整理成order-system/ │ ├── CLAUDE.md │ ├── CLAUDE.local.md │ ├── .claude/ │ └── rules/ │ ├── code-style.md │ ├── testing.md │ └── security.md │ ├── docs/ │ ├── architecture.md │ └── database.md │ └── src/然后 Claude 自己积累的经验在用户目录~/.claude/projects/project/memory/ ├── MEMORY.md ├── debugging.md ├── testing.md └── api-conventions.md这样就比较清楚了团队规则 → 项目 CLAUDE.md 个人习惯 → ~/.claude/CLAUDE.md 或 CLAUDE.local.md 细粒度规则 → .claude/rules/ Claude自己总结的经验 → Auto Memory 今天正在做什么 → 当前 Context Window十、实际使用时一套比较顺手的流程第一次进入老项目/init让 Claude 先生成基础CLAUDE.md。然后人工补充架构约束 代码规范 测试命令 明确禁止事项平时正常开发。遇到复杂 Bug 并最终解决后可以补一句把这次排查中以后还能复用的经验总结一下 有价值的内容写入 Auto Memory。隔一段时间执行/memory检查它到底记了什么。如果某条 Auto Memory 慢慢从“经验”变成了团队必须遵守的规则例如所有订单写操作必须经过 OrderDomainService。就把它从经验升级成CLAUDE.md这才是比较健康的记忆管理。总结Claude Code 所谓的“记住项目”并不是把你的所有历史聊天永久背下来。它更像一套分层存储CLAUDE.md → 长期规则 Auto Memory → 工作过程中积累的经验 Context Window → 当前任务的工作内存对应的位置也很清楚项目规则 ./CLAUDE.md 个人全局习惯 ~/.claude/CLAUDE.md 项目个人规则 ./CLAUDE.local.md Claude自动记忆 ~/.claude/projects/project/memory/ 当前上下文 没有固定Markdown文件真正好用的方式不是拼命往 Prompt 里塞背景也不是把 CLAUDE.md 写成一本项目百科。而是规则写下来经验让 Claude 自己总结当前任务留在上下文。这样用久以后它才不会像一个每天重新入职的新人而更像一个知道项目规矩、记得以前踩过什么坑还会自己整理工作笔记的开发同事。
返回列表