一份通用的、与 AI 协作开发的方法论与模板。 本文档从两个真实工程复盘提炼,但主文不绑定任何具体项目——MARS 电机热流体仿真工程与 PCB 轴向磁通电机自动化仿真系统仅作为「案例来源 / 参考实现」出现在附录,供理解与对照学习。 目标:在任何新项目上,与 AI 协作时能快速搭好框架、立刻开始干活,且过程可复现、可交接、可沉淀。
命名说明:本框架把「给 AI 的行为准则」统一命名为
AGENTS.md(业界通用标准文件名,Claude Code / Codex / Cursor 等主流 AI 工具默认自动读取)。
本文档会持续迭代。每次改动在此追加一条:版本号 / 日期 / 改动内容 / 影响。
| 版本 | 日期 | 改动内容 | 影响 |
|---|---|---|---|
| V1.0 | 2024(MARS 项目沉淀) | 初版:三支柱文件(README/AGENTS/HANDOFF)+ 会话日志 + 规矩前置 + 接口文件化 + 验收量化 + 铁律带"为什么" + 换机接续 + 五步启动法 + 模板库 | 建立基础方法论,从 MARS 电机热仿真工程实战提炼 |
| V2.0 | 2026-09-01 | 融合第二个项目(PCB 自动化仿真系统)实战经验:三支柱扩展为五支柱(+KNOWLEDGE_BASE + 留痕双件套);新增里程碑管理、测试纪律、工程规范(禁臆测/自查清单/交付声明)、反模式自查表;新增 KNOWLEDGE_BASE / TEST_RECORDS / 里程碑三套模板 | 从"单项目经验"升级为"多项目通用框架" |
| V2.1 | 2026-09-01 | 通用化重构:主文移除所有具体项目描述(路径/参数/工具名),改为通用占位;两个真实项目降级为「案例来源」移入附录;新增本「版本更新记录」 | 文档成为不绑定项目的通用框架,可直接复制到任何新项目 |
后续迭代约定:新增一条版本记录时,写明「版本号 / 日期 / 改动内容 / 影响」四列;若改动较大,可在「改动内容」里分条说明。
AI 协作开发的效率,不取决于 AI 的能力,而取决于工程的秩序。
从真实项目复盘得出,真正让开发又快又稳的,是五件事:
五个文件分工,让任何新接手者(人类或 AI)能在 10 分钟内进入工作状态:
| 支柱 | 文件 | 写给谁 | 职责 | 关键内容 |
|---|---|---|---|---|
| ① 全貌 | README.md | 人类/全局 | 项目是什么、怎么跑、做到哪了 | 目标、目录表、工具链、常用命令、约定、最近更新 |
| ② 规矩 | AGENTS.md | 所有 AI(自动读取) | AI 的行为准则 | 工作约定、关键接口、铁律、已知坑、文档索引、反模式自查 |
| ③ 接续 | HANDOFF.md | 接续者 | 换人/换机/续作入口 | 环境要求、恢复步骤、当前进度、阻塞点、接续提示词 |
| ④ 知识 | docs/KNOWLEDGE_BASE.md | 人 + AI | 环境事实、参数语义、探测技术、SOP、已踩的坑 | 环境验证命令、常见问题表、连接/求解 SOP、踩坑清单 |
| ⑤ 留痕 | docs/session_log.md + docs/TEST_RECORDS.md | 组织记忆 | 对话留痕 + 测试留痕 | 目标→动作→结论→踩坑→遗留;环境→步骤→结果→问题→修复 |
要点:
案例对照:①—④ 出自两个真实项目的共同实践;⑤「留痕双件套」在第一个项目只做了会话日志,第二个项目补上了 TEST_RECORDS 测试记录,并验证了二者分离的价值。
会话日志(统一模板):
## YYYY-MM-DD · 第 N 次对话 —— 一句话目标
### 用户要求(要点)
### 本次完成(动作 + 结果)
### 用户纠偏(如有)—— 纠正:为什么,如何修正
### 遗留问题 / 待确认
测试记录(每条含索引 + 详细):
## TEST-XXX:测试主题
**日期** / **测试环境** / **测试目的** / **测试脚本** / **输出目录**
### 测试步骤与结果(表格:步骤 | 内容 | 结果 | 详情)
### 关键数据 / 发现的问题 / 修复措施
为什么有效:
案例对照:两个项目分别沉淀了 20+ 条避坑记录(API 常量、工具特定行为、环境变量陷阱等),验证了「记录即资产」。
开工第 1 天就立好的规矩(可裁剪、可扩充):
git commit(可回退)1111.prt 这种)-u(否则看不到进度)要点:规矩要具体到「AI 能执行」,不要写"注意规范"这种空话。
把"关键数据接口"做成文件,把 AI 修改的边界明确框定:
<project>/data/<interface>.csv ← 改这一个文件,重跑指定步骤,即可换输入
<project>/src/<core>/<def>.py ← 指标/拓扑/参数等定义的唯一权威,多端消费
<project>/config/<xxx>.json ← 可执行程序侧车配置,改配置无需重新构建
为什么有效:AI 修改的边界被明确框定——「只改这个文件,别动其他东西」。可预期的修改 = 可审查的修改 = 可回退的修改。凡是被多处消费的定义,必须收敛到单一事实源,禁止多处漂移(否则会出现"改一处漏两处"的返工)。
案例对照:第一个项目用 CSV 接口文件换输入;第二个项目把指标/拓扑/参数 Schema 各归一个权威定义(单一事实源),并因曾有三处定义漂移而返工。
每个里程碑都留下量化验收基准,并立下规矩:对不上就别往下走。
测试纪律(强烈推荐):
scripts/test_*.py,命名与被测模块对应;python scripts/test_*.py 可独立运行,exit 0 = PASS要点:验收要「可复核、可重跑」,且校验方式最好与产出方式不是同一条代码路径(否则不算独立验证),不是"看起来对了"。
把吃过亏的地方写成「铁律」,并且每条都带"为什么"(示例,实际请按你的项目补充):
- 任何几何/数据改动后核对「数量 + 总量」不变量。(曾两次在坏数据上白跑)
- 检查必须用精确模式,不要用快速模式。(快速模式漏掉大部分问题)
- 不要用某工具的某操作,改用替代方案。(会留副本、后续修复会碎裂)
- 先 A 后 B,顺序不能反。(顺序反了会建立依赖链,之后无法再改)
- 工具实例用独立实例,不连已有实例;启动后设为前台可见。(可能控制错误窗口;脚本模式默认隐藏)
- 参数写入必须回读校验,不一致标记失败并继续。(静默写入失败会污染整批结果)
- 结果逐点落盘并 flush。(崩溃不丢已算点;不能等整批)
- 仿真禁止跑在主线程。(GUI 会卡死,必须子线程)
- 非登录 shell 可能不继承机器级环境变量 → 脚本内回退。(否则工具找不到/静默退出)
要点:规则带"为什么",AI 才知道什么时候该严格遵守、什么时候可以判断变通。
写一个 scripts/check_machine_paths.py,一条命令核对软件路径(可能散落在多个文件)、专用解释器、依赖包、仓库资产、Git 状态,并提供 --fix 一键修正(或打印精确修复命令)。
要点:把"环境假设"写成可检测的脚本,新机器第一条命令就能确认环境。
案例对照:第二个项目把工具定位、许可证、依赖包、仓库资产、Git 干净度全部纳入体检,并发现"AI shell 解释器与项目运行环境分离"这一常见陷阱。
用 Phase(阶段)/ Milestone(里程碑) 两级粒度推进,并立下硬纪律:
为什么有效:里程碑是"可复核的最小单元",每完成一个就闭环一次(记录→验收→提交→更新文档),避免大段工作无人可查。
工程规范(优先级高于"完成速度"):
| 反模式 | 后果 | 对策 |
|---|---|---|
| 不读文档直接开工 | 跑偏、重复踩坑 | 接续提示词强制"先读、先报告理解、再动手" |
| 规矩只写"注意规范" | AI 无法执行 | 规矩写到"可执行、可检查"的颗粒度 |
| 验收凭"看起来对" | 假完成 | 量化基准 + 独立验证 |
| 踩坑不记录 | 下次再踩 | 每次坑都追加到 AGENTS.md 铁律 / KNOWLEDGE_BASE |
| 环境假设不检测 | 换机全崩 | check_machine_paths.py 一键核对 |
| 上下文只留在对话里 | 换会话即失忆 | session_log 持久化 |
| 让 AI 多任务并行 | 上下文混乱、互相污染 | 一次一个目标 |
| 只给结论不给原因 | AI 无法变通 | 规则带"为什么" |
| 多处定义同一概念 | 三处漂移、改一处漏两处 | 单一事实源(各归一个权威定义) |
| 编造未验证的数值/接口 | 返工、误导决策 | 禁臆测 + 交付声明 + "待验证"标注 |
| 只跑功能不跑回归 | 改一处坏一片 | 每个里程碑结束跑全量 test_*.py |
| 阶段完成不更新文档 | 文档与代码脱节、无人能接手 | 每 Phase/M 完成立即更新 README |
Phase 0 探查 读懂现状/需求,不猜
Phase 1 立规矩 五支柱文件 + 会话日志 + 约定 + git init
Phase 2 搭骨架 目录结构 + 接口文件(单一事实源)+ 最小可跑通闭环 + 第一个验收基准
Phase 3 迭代 一次一个目标 → 记录 → 验收 → 提交 → 更新 README(里程碑粒度)
Phase 4 交接 写清状态/阻塞/下一步 + 接续提示词 + 环境体检脚本
git commit → 更新 README → 下一个。scripts/check_machine_paths.py(环境体检 + --fix)。<project>/
├── README.md # 项目全貌 + 最近更新(人类读)
├── AGENTS.md # AI 行为准则(AI 自动读)
├── HANDOFF.md # 接续指南(换人/换机/AI 续作)
├── docs/
│ ├── KNOWLEDGE_BASE.md # 环境事实 + 参数语义 + 探测技术 + SOP + 已踩的坑
│ ├── session_log.md # 会话日志(组织记忆:目标→动作→结论→踩坑→遗留)
│ ├── TEST_RECORDS.md # 测试记录(环境→步骤→结果→问题→修复)
│ └── figures/ # 图表
├── data/ # 机器可读数据 + ★接口文件(改这里即可改输入)
├── scripts/ # 自动化脚本(英文注释)+ test_*.py 测试
├── src/ 或 work/ # 实际工作产物(含单一事实源定义层)
├── reference/ # 参考材料(只读,不许改)
├── package.json # 如有 JS 依赖
└── .gitignore # 生成物不入库
# <项目名> —— <一句话定位>
<两句话:这个项目做什么、目标链路是什么>
| 项目 | 内容 |
|---|---|
| 文档版本 | V<X>(<最新完成阶段>) |
| 当前状态 | P1 ✅ / P2 进行中 / ... |
## 目录
| 路径 | 说明 |
|---|---|
| `src/` | ... |
| `scripts/` | ... |
| `data/` | ... |
## 工具链
| 工具 | 版本 | 路径 | 备注 |
|---|---|---|---|
| ... | ... | ... | ... |
## 约定
- 每次测试前先 git commit
- 每次对话记录到 docs/session_log.md;每次测试记录到 docs/TEST_RECORDS.md
- 文件名只用 ASCII 且有意义;源码 ASCII,脚本英文注释,报告可用中文
- <参考目录只读等约束>
## 最近更新(YYYY-MM-DD)
### <Px-My>:<主题>
**背景** / **改动内容** / **涉及文件** / **验证**(含 TEST 编号)/ **已知问题**
## 常用命令
python scripts/<入口>.py
# <项目名> AI 协作规矩
**接续请先读 HANDOFF.md。**
## 开始工作前必须阅读(按顺序)
1. docs/KNOWLEDGE_BASE.md —— 核心知识库(环境事实、参数语义、SOP、已踩的坑)
2. docs/HANDOFF.md —— 当前进度与接续指南
3. README.md —— 项目全貌与最近更新
## 工作约定
- 每次测试前先 git commit
- 每次对话记录到 docs/session_log.md;每次测试记录到 docs/TEST_RECORDS.md
- 文件名只用 ASCII 且有意义;源码 ASCII,脚本用英文注释;报告文档可用中文
- 生成 PPT/PDF 用 skills
- 有 GUI 的程序必须前台运行;后台 Python 一律加 -u
- 不要修改 <reference>/ 下任何内容(只读);原始模型只读
- <特定工具>必须用 <特定解释器> 运行
- 生成物不入库
## 关键接口(单一事实源)
- `data/<interface>.csv` 或 `src/<core>.py` —— 改这一个文件即可换输入,然后重跑 <步骤A> + <步骤B>
- 凡被多处消费的定义,必须收敛到单一事实源,禁止多处漂移
## 铁律(每条带"为什么")
1. <规则>(<原因>)
2. ...
## 已知坑
- <坑> → 表现 → 对策(详见 KNOWLEDGE_BASE.md / session_log.md)
## 反模式自查(交付前对照)
- <反模式1> → <对策1>;<反模式2> → <对策2>;...
## 工程规范
- 禁止臆测;测试完备(正常/边界/异常/空值);交付前自查清单 ✅/❌;未过自查只能说"草案待验证"
## 当前状态
- 已完成:... / 进行中:... / 阻塞:...
## 文档索引
| 文档 | 内容 |
|---|---|
| HANDOFF.md | 接续指南 |
| docs/KNOWLEDGE_BASE.md | 环境事实与踩坑 |
| docs/session_log.md | 会话记录 |
| docs/TEST_RECORDS.md | 测试记录 |
docs/session_log.md)# 会话记录 / Session Log
## YYYY-MM-DD · 第 N 次对话 —— <一句话目标>
### 用户要求(要点)
- <要点>
### 本次完成
1. <动作> → <结果>
### 用户纠偏(如有)
- <纠正>:<为什么>,<如何修正>
### 遗留问题 / 待确认
- <问题>
# 接续指南 · <项目名>
面向<换人/换机/新会话>后继续工作的场景。
## 1. 环境要求
| 软件 | 版本 | 用途 | 必需性 |
|---|---|---|---|
| ... | ... | ... | ... |
## 2. 恢复步骤(第一条命令)
python scripts/check_machine_paths.py # 核对环境
## 3. 当前进度
### 已完成 | 当前阻塞点 | 待办
## 4. 给 AI 的接续提示词(整段粘贴,见 3.6)
这是 <项目名> 项目,<一句话定位>。
【先做这几件事,做完再动任何东西】
1. 读 HANDOFF.md、docs/KNOWLEDGE_BASE.md、docs/session_log.md、AGENTS.md。
KNOWLEDGE_BASE 和 session_log 里记录了大量踩过的坑,请重点看,不要重复踩。
2. 核对环境:python scripts/check_machine_paths.py
3. 恢复工作目录/依赖:<具体命令>
【工作约定(必须遵守)】
- 每次测试前先 git commit;每次对话记录到 docs/session_log.md;每次测试记录到 docs/TEST_RECORDS.md
- 文件名只用 ASCII 且有意义;源码 ASCII,脚本用英文注释
- 有 GUI 的程序必须前台运行;后台 Python 加 -u
- 不要修改 reference/ 目录;<特定工具用特定解释器>;生成物不入库
【铁律(血泪教训)】
- <规则1> / <规则2> / ...
【当前状态】
- 已完成:... / 阻塞:... / 待办:...
【接下来做什么】
- <目标1> / <目标2>
先读文档、恢复环境、跑 check_machine_paths.py,然后告诉我你的理解
和建议的下一步,不要直接开始改东西。
最后一句「先理解、别直接改」很重要——让 AI 先对齐认知,而不是闷头干活跑偏。
| 验收项 | 基准 | 校验方式 | 独立于产出路径? |
|---|---|---|---|
| <关键输出1> | <数值/逐位一致> | <命令/脚本> | 是/否 |
| <关键输出2> | 误差 ≤ X | <独立验证路径> | 是 |
对不上就别往下走。
要点:校验方式最好与产出方式不是同一条代码路径(否则不算独立验证)。
scripts/check_machine_paths.py)纯只读、不修改任何东西的脚本,检查清单:
--fix 一键修正(或打印精确修复命令)。建议探测项目内 venv,提示用其解释器复检(避免"当前 shell 与项目环境分离"误报)。docs/KNOWLEDGE_BASE.md)# 知识库 — <项目名>
> 本文件是项目的核心知识沉淀,供人和任何 AI 工具阅读使用。
> 全部结论基于 <参考案例/实测> 的验证。
## 1. 环境事实
| 项 | 值 |
|---|---|
| <工具> | <版本> |
| 定位方式 | <环境变量/路径> |
| 许可证 | <服务/端口> |
| 非登录 shell 陷阱 | ... |
### 1.1 环境验证命令
### 1.2 常见环境问题(现象 | 原因 | 解决)
## 2. <工具> 自动化核心方法
### 2.1 连接与实例管理
### 2.2 模型加载与保存
### 2.3 参数写入(含回读校验)
### 2.4 结果导出与解析
## 3. 参数语义
## 4. 已踩的坑(铁律来源)
## 5. SOP(标准操作流程)
docs/TEST_RECORDS.md)# 测试记录与结果总结
> 每次测试必须记录在此文档中(工作留痕)。
> 最后更新:YYYY-MM-DD
## 测试记录索引
| 编号 | 日期 | 测试类型 | 结果 | 关键发现 |
|---|---|---|---|---|
| TEST-001 | ... | ... | ... | ... |
## TEST-001:<主题>
**日期**:...
**测试环境**:...
**测试目的**:...
**测试脚本**:`scripts/test_xxx.py`
**输出目录**:`output/.../`
### 测试步骤与结果
| 步骤 | 内容 | 结果 | 详情 |
|---|---|---|---|
### 关键数据 / 发现的问题 / 修复措施
## Px-My:<主题>
**背景**:<为什么做>
**改动内容**:<做了什么>
**涉及文件**:<新增/修改的文件>
**验证**:<测试脚本 + 结果 + TEST 编号>
**技术决策**:<关键取舍及理由>
**已知问题/后续**:<遗留项>
在 AGENTS.md 里维护一份「铁律」,每条格式:规则 + 为什么。以下为通用示例,请替换为你的项目的真实血泪教训。
| # | 规则 | 为什么 |
|---|---|---|
| 1 | 任何数据/几何改动后核对「数量 + 总量」不变量 | 曾两次在坏数据上白跑,只报"操作成功"会漏掉损坏 |
| 2 | 关键输入的体积/数值必须保持不变 | 输入按件映射,改了映射就失效 |
| 3 | 检查必须用精确模式,不要用快速模式 | 快速模式漏掉大部分问题 |
| 4 | 不要用<某工具>的<某操作>,改用<替代方案> | 会留副本、后续修复会碎裂 |
| 5 | 先后,顺序不能反 | 顺序反了会建立依赖链,之后无法再改 |
| 6 | 量关键尺寸不要用包围盒接口 | 对薄壁件虚报数值,要用独立解析 |
| 7 | 同类错误再次出现时查共同成因 | warning 即使伴随成功也必须处理 |
| 8 | 工具实例用独立实例,不连已有实例;启动后设为前台可见 | 可能控制错误窗口;脚本模式默认隐藏 |
| 9 | 参数写入必须回读校验,不一致标记失败并继续 | 静默写入失败会污染整批结果 |
| 10 | 结果逐点落盘并 flush | 崩溃不丢已算点;不能等整批 |
| 11 | 仿真/长任务禁止跑在主线程 | GUI 会卡死,必须子线程 |
| 12 | 非登录 shell 要回退设置环境变量 | 环境变量不继承会导致工具找不到/静默退出 |
xxx 用错了:原因是 <技术事实>,请改用 <方案>。依据:<文档/实测>"| 反模式 | 后果 | 对策 |
|---|---|---|
| 不读文档直接开工 | 跑偏、重复踩坑 | 接续提示词强制"先读、先报告理解、再动手" |
| 规矩只写"注意规范" | AI 无法执行 | 规矩写到"可执行、可检查"的颗粒度 |
| 验收凭"看起来对" | 假完成 | 量化基准 + 独立验证 |
| 踩坑不记录 | 下次再踩 | 每次坑都追加到 AGENTS.md 铁律 |
| 环境假设不检测 | 换机全崩 | check_machine_paths.py 一键核对 |
| 上下文只留在对话里 | 换会话即失忆 | session_log 持久化 |
| 让 AI 多任务并行 | 上下文混乱、互相污染 | 一次一个目标 |
| 只给结论不给原因 | AI 无法变通 | 规则带"为什么" |
| 多处定义同一概念 | 改一处漏两处 | 单一事实源 |
| 编造未验证的数值 | 误导决策 | 禁臆测 + 交付声明 |
| 不跑回归就收工 | 改一处坏一片 | 里程碑结束跑全量 test_*.py |
| 阶段完成不更新文档 | 无人能接手 | 每 Phase/M 完成更新 README |
本框架从以下两个真实工程提炼。主文为通用方法论,此附录仅用于说明「每条方法论是从哪种场景验证得来的」,供对照学习。
CLAUDE.md(AGENTS.md 原名)、HANDOFF.md、docs/session_log.md、scripts/check_machine_paths.py、data/heat_loads.csv。AGENTS.md、docs/KNOWLEDGE_BASE.md、docs/TEST_RECORDS.md、docs/HANDOFF.md、scripts/check_machine_paths.py、scripts/test_*.py。