Agent 也需要软件工程:Memory、CLAUDE.md 与 Skill 的分层设计

Agent 也需要软件工程:Memory、CLAUDE.md 与 Skill 的分层设计
Agent 也需要软件工程Memory、CLAUDE.md 与 Skill 的分层设计相同点这三者都是Agent的长期记忆资产可以作为上下文携带进去指导agent工作。都是为了减少Agent的决策成本减少 Agent 在执行任务时需要重新思考、重新决策的次数。都具有可复用性都应该遵守单一职责。不同点CLAUDE.mdCLAUDE.md有全局md和项目级md的区别如果存在多个CLAUDE.md进行叠加而不是覆盖它会沿着目录往上找并组合上下文。Global CLAUDE.md ↓ Workspace CLAUDE.md ↓ Project CLAUDE.md那么全局md和项目级md应该放什么呢我个人认为因为全局md是会被每个项目所引用的所以它的内容方向应该是通用性质的更应该聚焦每次工作应该遵守什么原则如agent在遇到问题时应该怎么思考、具体行动应该怎么做、行动的边界是什么。而项目级md应该聚焦于解读项目如项目技术栈、这是一个什么性质的项目、代码风格、架构、注释偏好、绝对不要用什么。#### 全局 CLAUDE.md 示例# CLAUDE.md 减少常见 LLM 编码错误的行为指南。 ### 1. 写代码前先思考 **别假设。不要掩饰困惑。表面权衡。** ### 2. 简洁优先 **解决问题的最低代码。没有任何推测性内容。** ### 3. 手术变更 **只触碰你必须触碰的。只收拾你自己的烂摊子。** ### 4. 目标驱动执行 **定义成功标准。循环直到确认。**#### 项目级 CLAUDE.md 示例Spring Boot 3 DDD 目录结构 如何启动 如何测试 模块职责 禁止修改 legacy/ 数据库规范 API 规范Memory可能有些人会疑惑感觉把git commit提交规范、建议使用中文、回复风格、建议用Stream API这些写入全局md也很好毕竟每次都需要用到确实可以这样写但是我更建议写入memory这些都属于用户偏好即使不这样写对于实际结果也不会有太大问题不过只是会让用户感觉生疏或者不适。回复中文 Commit 用 Conventional Commit 回答简洁 喜欢 Stream API Java 更喜欢 Optional 喜欢 Builder Pattern所以说Memory适合存放用户偏好其实也不需要如此抠字眼但是对于每个长期记忆结构来说还是有必要熟悉它的真正作用把它们划分好、明确边界这样才更容易维护这些长期知识。**这样来看CLAUDE.md更像是让agent明白它应该怎么工作而memory更像是你希望它怎么工作。**Skill这是与其他两个最不一样的记忆虽然是长期的但是实际上下文中只包含每个skill的元数据如name、description这些。只有在执行特定任务、或者用户主动去调用的时候才会加载全量SKILL.md内容同时内部还有一些reference、example等文档参考或者js、py脚本等都是按需触发。从这个加载逻辑就可以明白skill设计初衷就是为了解决一些特定任务而出现的它是面向具体任务的长期记忆如开发一个新功能你可以调用新功能开发skill、你想写一个ppt、写一个word都可以定义一个skill去调用但是你只有在执行你想要、需要的任务时你才真的需要加载它的上下文。CLAUDE.md/Memory更像是在约束Agent如原则、偏好AI大模型本来就知道这些但是我们在这里给它限制让它必须遵守。而skill不仅是限制还有增强例如浏览器自动化大模型不可能知道小红书网页端的按钮、页面布局、判断登录逻辑这就是**Knowledge Injection知识注入**。skill默认不会全量加载严格来说**Skill 不是长期记忆而是长期能力Persistent Capability。**总结| 类型 | 本质 | Scope | 生命周期 | 加载方式 || --- | --- | --- | --- | --- || Memory | 这个用户是谁 | User | 长期 | 始终加载 || Global CLAUDE.md | Agent 应遵守哪些原则 | Agent | 长期 | 始终加载 || Project CLAUDE.md | 当前项目是什么 | Repository | 项目周期 | 始终加载当前项目 || Skill | 如何完成某类任务 | Task | 长期 | 按需加载 |Memory 决定 Agent 像谁CLAUDE.md 决定 Agent 应该遵守什么Skill 附加 Agent 解决特定问题的能力。不同的长期记忆分类并没有强制的规定它和工程里的分层思想用户配置、运行时规则、项目配置、可复用组件、流程编排是一致的不分类也没关系但是对于一个庞大的长期记忆库不好好分类最终会导致**记忆腐败Memory Rot**修改、新增、删除某个记忆都会增加你的思考、判断时间。Agent 也需要软件工程以前我们做软件会考虑配置怎么分层模块怎么划分依赖怎么管理接口怎么设计现在做 Agent其实只是把对象换成了MemoryCLAUDE.mdSkill它们本质上也是用户配置User Configuration运行策略Operating Policy项目配置Project Context能力模块Capability Module最后仍然要面对和传统软件一样的问题**职责划分、依赖管理、复用、演进和维护**。当长期知识越来越多却没有明确边界时维护成本会持续上升而合理分层的目的并不是追求理论上的完美分类而是降低未来新增、修改和删除知识时的认知成本。