Skip to content

Latest commit

 

History

History
591 lines (419 loc) · 14.8 KB

File metadata and controls

591 lines (419 loc) · 14.8 KB

AI Coding 心得:多模型协作与三文档体系

这份文档记录我当前的 AI coding 心得。它不是项目规范的替代品,而是帮助我在使用 Codex、DeepSeek、Claude Code 时保持稳定产出的个人操作手册。

核心目标:

  • 用强模型做判断,而不是堆代码。
  • 用便宜模型做实现,但必须框在小合同里。
  • 用文档约束 AI,而不是依赖聊天记忆。
  • 用测试、diff 和 review 做最终裁判。

1. 总原则

你的 AI coding 流程应该围绕一句话展开:

Codex 把需求变成边界清晰的小合同,DeepSeek 负责挑刺和减复杂度,Claude Code 在合同内实现,Codex 最后只按 code review 查风险。

关键不是多找几个模型,而是让每个模型有固定职责:

  • Codex / 强模型:理解系统、拆需求、做方案、框定范围、最终审查。
  • DeepSeek:交叉评审,主要找阻塞问题、漏测、范围膨胀。
  • Claude Code:在明确合同内改代码、补测试、跑验证。
  • 测试和 diff:最终裁判。

2. 三份文档的设计

项目里长期维护三份核心文档:CLAUDE.md、DESIGN.md、TODO.md。三者各管一层,不互相替代。

2.1 CLAUDE.md:入口和协作约束

定位:给 AI 协作者看的入口文件。

它应该回答:

  • 这个项目是什么,不是什么。
  • 开始任务前应该读哪些文档。
  • 哪些规则永远不能绕过。
  • Codex、DeepSeek、Claude Code 如何分工。
  • 什么时候必须停止并报告。

适合放:

  • AI 协作流程。
  • 多模型分工。
  • 强规则。
  • 项目边界。
  • 文档读取入口。

不适合放:

  • 详细接口设计。
  • 长篇技术方案。
  • 大量任务列表。
  • 某个 PR 的临时决策。

判断标准:如果这条规则是所有 AI 协作者进入项目时必须先知道的,就放 CLAUDE.md。

2.2 DESIGN.md:稳定工程规范

定位:项目的工程设计规范。

它应该回答:

  • 模块边界是什么。
  • 接口应该怎么设计。
  • 权限、审计、测试、Provider、工具系统有什么稳定原则。
  • code review 先看什么。
  • 重构应该怎么做才不破坏行为。

适合放:

  • 模块职责。
  • 依赖方向。
  • 命名和接口原则。
  • 工具与权限规范。
  • 测试规范。
  • 代码审查标准。
  • 重构流程。

不适合放:

  • 某个需求的长方案。
  • 临时 TODO。
  • 一次性调研结论。
  • 当前进度状态。

判断标准:如果它是未来多个任务都要遵守的稳定工程约束,就放 DESIGN.md。

2.3 TODO.md:可执行路线图

定位:项目当前要做什么、按什么顺序做、做到什么程度算完成。

它应该回答:

  • 当前优先级是什么。
  • 每个任务的边界是什么。
  • 前置条件是什么。
  • 验收标准是什么。
  • 评审发现的问题是否已经变成可跟踪任务。

适合放:

  • [ ] / [x] 任务。
  • 阶段顺序。
  • 前置条件。
  • 验收标准。
  • 评审遗留项。
  • 暂不优先事项。

不适合放:

  • 长篇方案论证。
  • 详细接口草图。
  • 个人心得。
  • 与路线无关的想法。

判断标准:如果它需要被执行、跟踪或验收,就放 TODO.md。

2.4 docs/:长方案和沉淀

docs/ 用来承接三份核心文档不该承载的长内容。

适合放:

  • 技术调研。
  • 完整实施方案。
  • 方案评审记录。
  • PR 实施合同。
  • AI coding 心得。
  • 模板和复盘。

不适合放:

  • 必须被所有 AI 进入项目时立即读取的硬规则。
  • 需要每日更新的任务状态。

判断标准:如果内容太长,但又值得沉淀,就放 docs/,再由 TODO.md 或 CLAUDE.md 引用。

2.5 文档写入决策表

内容 写入位置
AI 协作流程、多模型分工、强约束 CLAUDE.md
项目定位、做什么、不做什么 CLAUDE.md
模块边界、依赖方向 DESIGN.md
工具契约、权限、审计、Provider 原则 DESIGN.md
测试规范、代码审查规范 DESIGN.md
当前路线、优先级、任务状态 TODO.md
评审发现的待办 TODO.md
长篇技术调研 docs/*-technical-research.md
完整实现方案和评审 docs/*-implementation-plan-review.md
单 PR 实施合同 docs/*-pr-contract.md 或任务消息中
个人方法论和复盘 docs/ai-coding-self-improvement.md

2.6 文档更新触发规则

必须更新 CLAUDE.md:

  • AI 协作流程变化。
  • Codex / DeepSeek / Claude Code 分工变化。
  • 项目边界变化。
  • 新增所有 AI 都必须遵守的强规则。

必须更新 DESIGN.md:

  • 模块依赖变化。
  • 公共接口或工具契约变化。
  • 权限、审计、测试、Provider 原则变化。
  • code review 标准变化。

必须更新 TODO.md:

  • 新增任务。
  • 完成任务。
  • 调整优先级。
  • 方案评审发现新风险。
  • 某个验收标准变化。

应该写到 docs/:

  • 技术调研超过几段。
  • 方案需要代码锚点和 PR 切分。
  • 评审内容太长。
  • 模板或心得需要复用。

3. 你要训练的核心能力

3.1 把需求变成工程合同

不要把自然语言需求直接交给实现模型。先把需求压成合同:

  • 目标:这次到底要完成什么。
  • 非目标:这次明确不做什么。
  • 修改范围:允许改哪些模块、哪些文件。
  • 禁止事项:不能顺手重构、不能改公共接口、不能碰无关文件。
  • 验收标准:什么叫完成。
  • 验证命令:必须跑哪些测试。
  • 停止条件:发现方案不成立时先报告,不自行扩大范围。

你写得越像合同,AI 越不容易飘。

3.2 用代码事实约束方案

方案必须从代码出发,不从想象出发。

每个关键设计决策都要带:

  • 文件路径
  • 行号或方法名
  • 当前行为
  • 为什么这里需要改
  • 改完如何验证

这对应 CLAUDE.md 里的规则:方案评审必须做代码对照,评审发现要回写 TODO.md。

3.3 评审是为了减复杂度

多模型评审最大的风险是越审越复杂。你要强制 DeepSeek 只输出四类内容:

Blocking:
- 会导致编译失败、行为回归、模块边界破坏、安全/权限问题的点。

Missing Tests:
- 哪些关键路径没有测试兜住。

Scope Cuts:
- 哪些设计可以砍掉、延后、改成更小实现。

Conclusion:
- 可实现 / 修正后可实现 / 不建议实现。

禁止 DeepSeek 重设架构、扩展需求、提出非必要抽象。

3.4 实现要小,方案可以细

Codex 的方案要详细,但详细的是边界,不是抽象。

好的详细:

  • 修改范围详细。
  • 验收标准详细。
  • 测试矩阵详细。
  • 风险和回滚详细。

坏的详细:

  • 提前设计一堆未来接口。
  • 为了“优雅”拆过多类。
  • 给每个小变化都加框架。
  • 一个 PR 同时改契约、行为、展示、测试、格式化。

你的目标是:方案严密,代码朴素。

4. 推荐工作流

4.1 小需求

适用:小 bug、文案、单文件工具修复、测试补充。

流程:

  1. Claude Code 直接实现。
  2. 跑目标测试。
  3. Codex 做 code review。
  4. 修复 review findings。

不需要完整技术调研,不需要 DeepSeek 方案评审。

4.2 中需求

适用:跨 2-3 个文件、小功能、局部重构。

流程:

  1. Codex 读 CLAUDE.md、DESIGN.md、相关代码,写单 PR 合同。
  2. DeepSeek 按 Blocking / Missing Tests / Scope Cuts / Conclusion 挑刺。
  3. Codex 根据评审收敛合同。
  4. Claude Code 在合同内实现。
  5. Codex 做实现后 code review。

4.3 大需求 / 底层重构

适用:AgentEngine、工具契约、Provider、CLI、MCP、安全权限、观测链路。

流程:

  1. Codex 做技术调研,写 docs/*-technical-research.md。
  2. Codex 写完整可实现方案和方案评审,关键设计决策带代码锚点。
  3. 评审发现回写 TODO.md。
  4. Codex 拆成多个单 PR 合同。
  5. DeepSeek 每次只评一个 PR 合同。
  6. Claude Code 每次只实现一个 PR。
  7. Codex 对每个 PR 做 code review。
  8. 所有阶段测试通过后再进入下一阶段。

大重构的顺序必须先护栏测试,再移动代码。

5. 单 PR 实施合同模板

# PR-X 实施合同:<任务名>

## 背景
- 需求来源:
- 对应 TODO:
- 对应方案文档:
- 相关代码锚点:

## 目标
- 本 PR 完成什么:

## 非目标
- 本 PR 不做什么:

## 允许修改范围
- path/to/module/...
- path/to/test/...

## 禁止事项
- 不改公共接口,除非本合同明确要求。
- 不修改无关文件。
- 不做格式化 churn。
- 不新增抽象,除非本合同明确列出。
- 发现方案问题先停止报告,不自行扩大范围。

## 必须实现
- [ ] ...
- [ ] ...

## 必须测试
- [ ] 成功路径
- [ ] 失败路径
- [ ] 权限/安全边界
- [ ] 回归路径

## 验证命令
```bash
mvn -pl <module> -am test
mvn -q -DskipTests compile
git diff --check
```

## 完成定义
- 代码在允许范围内。
- 测试通过或说明无法运行原因。
- diff 无无关改动。
- TODO / DESIGN / CLAUDE.md 需要同步时已同步。

6. DeepSeek 评审提示词

你是方案评审者,不是重新设计者。

请只基于以下材料评审:
- CLAUDE.md
- DESIGN.md
- TODO.md
- 方案文档
- 相关代码

只输出四类内容:

## Blocking
会导致编译失败、行为回归、模块边界破坏、安全/权限问题的点。

## Missing Tests
哪些关键路径没有测试兜住。

## Scope Cuts
哪些设计可以砍掉、延后,或改成更小实现。

## Conclusion
可实现 / 修正后可实现 / 不建议实现。

禁止:
- 重设架构。
- 扩展需求。
- 提出非必要抽象。
- 建议无关重构。

7. Claude Code 实现提示词

你是实现者,只能在本 PR 合同范围内工作。

要求:
- 先读 CLAUDE.md、DESIGN.md、TODO.md 和本 PR 合同。
- 只修改允许范围内的文件。
- 不顺手重构。
- 不扩大需求。
- 不删除旧入口,除非合同明确要求。
- 发现方案无法实现、测试无法通过或需要扩大范围时,停止并报告。

交付时必须说明:
- 修改了什么。
- 新增/修改了哪些测试。
- 跑了哪些命令。
- 哪些验证没跑,原因是什么。
- 是否存在剩余风险。

8. Codex 实现后 Review 提示词

请用 code review 视角审查本次实现。

只找:
- bug
- 行为回归
- 漏测
- 安全/权限绕过
- 模块边界破坏
- 无关改动

不要提出:
- 非必要重构
- 架构美化
- 未来扩展建议
- 风格偏好

输出顺序:
1. Blocking / High / Medium findings
2. Missing tests
3. Scope issues
4. Conclusion

9. 反复杂度规则

每次看到 AI 提出新抽象,先问 5 个问题:

  1. 这个抽象是不是当前验收必须?
  2. 不加这个抽象,代码是否真的难以测试?
  3. 是否已有本地模式可以复用?
  4. 这个抽象是否会扩大修改范围?
  5. 这个抽象是否让回滚更难?

只要有 2 个答案偏否,就先不要加。

10. 结合本项目的特别规则

来自 CLAUDE.md:

  • 方案从代码出发。
  • 方案评审必须做代码对照。
  • 评审发现必须回写 TODO.md。
  • Codex 方案详细的是边界,不是堆抽象。
  • DeepSeek 只负责挑刺和减复杂度。
  • Claude Code 只在单 PR 合同内实现。
  • Codex review 只查 bug、回归、漏测、边界破坏。

来自 TODO.md:

  • 每个任务必须有边界、前置条件和验收标准。
  • 大重构先做护栏测试。
  • 没有 metrics 和 benchmark,就很难证明重构变好了。
  • P0-R 的推荐顺序是:护栏测试 -> ToolCallExecutor -> ContextPipeline -> MCP 风险和审计 -> BashTool -> CLI -> Provider 协议。

来自 DESIGN.md:

  • tools 不能依赖 engine、cli 或 im。
  • engine 只依赖抽象 provider/tool,不绑定具体 Provider JSON。
  • cli 和 im 只做入口适配,不拥有核心状态机。
  • 权限先于能力。
  • 审计日志必须是合法 JSONL,不手拼 JSON。
  • 测试覆盖真实风险,不追求数量。
  • 代码审查先看风险,再看风格。

11. 三份文档的健康信号

健康的 CLAUDE.md:

  • 短而硬。
  • 入口清晰。
  • AI 读完知道先读什么、不能做什么。
  • 不塞长方案。

健康的 DESIGN.md:

  • 稳定。
  • 原则清晰。
  • 能指导不同任务的一致设计。
  • 不记录临时进度。

健康的 TODO.md:

  • 可执行。
  • 每个任务有验收。
  • 评审发现能落成 [ ]。
  • 不展开长篇论证。

不健康信号:

  • 同一条规则在三份文档里重复出现,但说法不一致。
  • TODO.md 里出现长篇设计方案。
  • DESIGN.md 里出现一次性任务状态。
  • CLAUDE.md 变成所有细节的大杂烩。
  • AI 需要翻很多文档才能知道当前任务到底要做什么。

12. 每次任务前的自检清单

开始前问自己:

  • 这是小、中、大哪类需求?
  • 是否真的需要完整方案?
  • 是否已经读了该读的文档?
  • 是否知道当前代码入口?
  • 是否知道哪些文件不能改?
  • 是否有明确验收标准?
  • 是否有测试可以证明没回归?
  • 是否需要先补护栏测试?

如果这些问题答不上来,不要进入实现。

13. 每次任务后的复盘清单

结束后记录:

  • 原计划是否过大?
  • 实现是否超范围?
  • DeepSeek 是否提出了有价值的 Scope Cuts?
  • Claude Code 是否顺手改了无关文件?
  • Codex review 是否只查风险,还是又开始加设计?
  • 测试是否真的覆盖失败路径?
  • 哪个环节最浪费时间?
  • 下次合同应该怎么写得更窄?

14. 30 天提升计划

第 1 周:练合同

目标:每个中等需求都先写单 PR 合同。

重点训练:

  • 写清楚非目标。
  • 写清楚禁止事项。
  • 写清楚验收标准。
  • 控制修改范围。

第 2 周:练评审减法

目标:让 DeepSeek 的评审输出必须包含 Scope Cuts。

重点训练:

  • 识别不必要抽象。
  • 识别可延后的设计。
  • 把大 PR 切小。

第 3 周:练测试护栏

目标:重构前先补行为测试。

重点训练:

  • 成功路径测试。
  • 失败路径测试。
  • 权限边界测试。
  • 回归测试。

第 4 周:练 code review

目标:Codex review 只报工程风险,不做架构美化。

重点训练:

  • bug 优先。
  • 漏测优先。
  • 模块边界优先。
  • 安全和审计优先。

15. 衡量自己是否进步

每周看这些指标:

  • 需求从开始到可验证完成的时间是否缩短。
  • AI 实现超范围次数是否减少。
  • review 后返工次数是否减少。
  • 无关 diff 是否减少。
  • 测试失败是否更早暴露。
  • TODO 遗留项是否更具体。
  • 你是否能更快判断“这不该现在做”。

最终目标不是让 AI 写更多代码,而是让你更稳定地交付:

范围更小,验证更硬,设计更少,质量更稳。