|
Claude Code 从出生开始就有记忆体系,那就是写在本地的CLAUDE.md文件。 但是这玩意有个巨大的问题,它并不是总是奏效,有的时候会读,有的时候根本就不进不了上下文中。 具体的原因我在这个文章中有详细的介绍:Claude Code大型项目如何跨越窗口时保持记忆与目标? 今天开始Claude Code 的记忆能力体系得到的进一步进化了。 不在只是CLAUDE.md了。 可以通过.claude/rules/ 目录加载自定义规则。 那么现在整体的记忆体系就如官方总结: 自定义规则不是一个简单的功能升级,它直接击中了开头疼的痛点:AI健忘。 比如明明规定了不用的库,它又自作主张地引入了,明明纠正过一次的代码风格,新建一个文件后它又忘了。 在以前,我们只能把规则一股脑塞进一个文件。 而现在,我们可以将代码风格、测试约定和安全要求拆分成独立的.md 文件。 它们会自动加载,且拥有与主记忆文件CLAUDE.md同等的优先级。 操控的颗粒度更细,配置灵活度也会得到很大的提升。 形式上虽然升级了,但记忆管理的内核还是不变:你得学会如何管理它的记忆。 Claude Code 而是有着严密的层级,就像公司的管理架构一样,从全局到局部,井井有条。 系统启动时,它会按照优先级自动加载这五层记忆。 这是最入门的层次管理。 第二层次是拆解。 项目初期,可能一个 CLAUDE.md 确实够用。 但随着业务扩张,把所有规则都塞进一个文件,维护起来简直是灾难。 这时候,你需要把记忆拆解。 Claude Code 现在允许你在 .claude/rules/ 目录下创建多个 Markdown 文件。 那么大而化之后的模块化就可能长这样。 your-project/
├──.claude/
│├──CLAUDE.md#总纲
│└──rules/
│├──code-style.md#专门讲审美
│├──testing.md#专门讲质量
│└──security.md#专门讲安全 这样做的就大的好处就是精准的路径规则。 有些规则不需要对所有文件生效,比如 React 组件的规范,没必要让后端 Java 代码知道。 通过 YAML frontmatter,我们可以给记忆加上作用域。 ---
paths:src/api/**/*.ts
---
#API开发铁律
-接口必须包含输入验证
-错误响应必须符合标准格式 这样一来,Claude 只有在处理 src/api/ 下的 TypeScript 文件时,才会调取这段记忆。 精准,高效还省Token。 下面有一个真实的高并发秒杀系统案例。 如果没有记忆,直接让 AI 写秒杀,它大概率会写出一个标准的 SELECT 然后 UPDATE 的逻辑。 结果就是,超卖数据库锁死直至整系统崩溃。 植入记忆后,我们在写第一行代码前,先在 .claude/rules/seckill.md 里写下这段紧箍咒: ---
paths:src/modules/seckill/**/*.java
---
#秒杀模块生存法则
1.**库存扣减**
-严禁查询数据库扣减库存
-必须使用RedisLua脚本保证原子性
2.**幂等性**
-所有写入接口必须校验orderId是否重复
3.**异常处理**
-发生任何异常,必须触发异步报警 Claude 读取这段记忆后,生成的代码直接包含了 RedisTemplate 的 Lua 脚本调用,甚至连异常回滚的逻辑都处理得滴水不漏。这就是记忆体系的威力。 第三层是模块化 不用把所有内容都写在同一个地方。用 @ 引用外部文件,像搭积木一样组装你的上下文。 #引入我的个人偏好配置
-@~/.claude/my-project-instructions.md
快速初始化
新接手一个项目?一个命令,直接生成基础配置。
>/init 最后的建议,其实在我的这个专栏AI编程高效开发指南里面会有反复的提到: 项目改崩N次后,我总结出大型项目重构人机协同SOP
具体一点 别说“代码要规范”,要说“缩进使用 2 个空格”。 结构化一点 多用标题,多用列表,AI 和人一样,喜欢条理清晰的指令。 勤快一点 记忆文档其实跟代码一样,都需要进行不断的更新和迭代。 |