111 lines
5.5 KiB
Markdown
111 lines
5.5 KiB
Markdown
# AI 协作流程规范
|
||
|
||
> 版本: v1.0 | 更新: 2026-10-01
|
||
> 相关: [README.md](README.md) · [ai_agent_rules.md](ai_agent_rules.md) · `../ai_coding_knowledge.json`
|
||
|
||
定义 AI 在本项目中的**协作流程**:怎么规划、怎么验证、怎么收尾、怎么沉淀。目标 —— 产出可验证、经验可复利。
|
||
|
||
---
|
||
|
||
## §0 三条不可协商的原则
|
||
|
||
1. **不一次性生成大量代码** —— 任务必须可拆解(`anti_pattern:one-shot-big`)
|
||
2. **没有验收标准不开工** —— 否则无法判断何时完成(`method:acceptance-criteria`)
|
||
3. **不审查 diff 不算完成** —— AI 的自我描述可信度低于实际改动(`method:review-diff`)
|
||
|
||
## §1 主工作流:Explore → Plan → Implement → Verify
|
||
|
||
| 阶段 | 做什么 | 产出 |
|
||
|------|--------|------|
|
||
| **Explore** | 读相关源码 / 规格 / 知识图谱实体,确认现状与约束 | 现状结论 + 涉及文件清单 |
|
||
| **Plan** | 输出结构化步骤(步骤 + 依赖 + 验收标准);复杂任务**先给计划再动手** | 计划(TodoWrite 跟踪) |
|
||
| **Implement** | 按计划分步实现,**一步一验证**,不攒到最后一起验 | 可增量验证的改动 |
|
||
| **Verify** | 跑门禁;失败回到 Implement | 门禁通过证据 |
|
||
|
||
> 复杂任务(跨 3 个以上模块 / 涉及数据模型 / 涉及部署)**必须先出计划并等确认**。
|
||
|
||
## §2 任务拆解铁律
|
||
|
||
- **窄范围 > 大而模糊**:`修 /api/tools 分页 total 字段` 优于 `改进工具模块`
|
||
- 每步定义**输入**(依赖文件/数据)与**输出**(验收标准)
|
||
- 状态机驱动:`Pending → Running → Blocked → Done / Failed`
|
||
- 单任务改动建议 ≤15 个文件;超出则重新拆解
|
||
|
||
## §3 验收标准(每个任务开工前必须明确)
|
||
|
||
| 任务类型 | 验收标准 |
|
||
|---------|---------|
|
||
| 功能开发 | `npx tsc --noEmit` 零错误 + `npx vitest run` 全绿 + 新功能可用 + 无回归 |
|
||
| Bug 修复 | 复现路径通过 + 相关测试通过 |
|
||
| 重构 | 行为不变 + 测试全绿 + 无性能回归 |
|
||
| 数据/脚本 | 输出格式正确 + 样例验证通过 + 幂等可重跑 |
|
||
| 部署/运维 | 部署后自检清单全通过(见 project_rules.md §15.3) |
|
||
|
||
本项目**双门禁**:`npx tsc --noEmit` + `npx vitest run`(缺一不可)。
|
||
|
||
## §4 代码审查:看 diff 不看对话
|
||
|
||
- 用 `git diff` 逐行审查**实际改动**
|
||
- 对照 `§3 验收标准` 核验,而不是对照 AI 的说法
|
||
- 重点排查:臆造的 API/字段、被静默删除的逻辑、异常处理缺失、硬编码密钥
|
||
|
||
## §5 失败分型(先分型,再优化)
|
||
|
||
| 失败类型 | 表现 | 优化方向 |
|
||
|---------|------|---------|
|
||
| 规划失败 | 任务拆解不合理、范围失控 | 重新拆解任务 |
|
||
| 执行失败 | 命令/环境/依赖报错 | 修工具、环境、依赖 |
|
||
| 质量失败 | 结果不满足验收标准 | 收紧验收标准或加门禁 |
|
||
|
||
> 禁止把所有失败都归因为「模型不够强」(`anti_pattern:model-is-everything`)。
|
||
|
||
## §6 完成流程:自动记录(关键,不可跳过)
|
||
|
||
开发完成并通过门禁后,**必须**运行:
|
||
|
||
```bash
|
||
npm run knowledge:update
|
||
# 等价于:node scripts/update-knowledge.mjs(可加 --dry-run 预览,不写文件)
|
||
```
|
||
|
||
脚本自动捕获三类信息并沉淀:
|
||
|
||
| 捕获内容 | 来源 | 落盘位置 |
|
||
|---------|------|---------|
|
||
| **能力特征** | 扫描 `src/app/api/**/route.ts`、`src/app/**/page.tsx`、`src/components/**`、`prisma/schema.prisma`、`scripts/**`、`crontab.txt`、`package.json`、`data/bot-characters.json` | `.trae/knowledge/capabilities.json` |
|
||
| **开发过程** | `git log`(最近提交:hash/时间/主题/改动文件数) | `.trae/knowledge/dev_process.jsonl`(按提交追加) |
|
||
| **模型成果** | 本次交付物:新增迁移、新增/变更脚本、提交统计 | `.trae/knowledge/artifacts.jsonl`(追加) |
|
||
|
||
并**增量 upsert**(按实体名,同名替换 observations,未出现的旧实体原样保留,永不删除):
|
||
|
||
- `.trae/knowledge_graph.json`(渲染版,人类可读 + 权威)
|
||
- `.trae/knowledge_graph.jsonl`(MCP Knowledge Graph Memory 读取的源文件)
|
||
|
||
**自动化触发**:本机已装 `git post-commit` 钩子(`.git/hooks/post-commit`),每次提交后自动执行同一脚本(静默 + 后台,不阻断、不拖慢提交),无需手动记得。
|
||
|
||
> **换机 / 新克隆后重装钩子**(`.git/hooks/` 不随 git 传递)——在仓库根执行:
|
||
> ```bash
|
||
> printf '#!/bin/sh\nROOT=$(git rev-parse --show-toplevel) || exit 0\n[ -f "$ROOT/scripts/update-knowledge.mjs" ] || exit 0\ncommand -v node >/dev/null 2>&1 || exit 0\n( cd "$ROOT" && node scripts/update-knowledge.mjs --quiet >/dev/null 2>&1 & )\nexit 0\n' > .git/hooks/post-commit
|
||
> ```
|
||
> 卸载:删除 `.git/hooks/post-commit` 即可(脚本本身仍可手动运行)。
|
||
|
||
> 未运行记录脚本就结束任务,视为**流程未完成**。
|
||
|
||
## §7 反模式(禁止)
|
||
|
||
| 反模式 | 替代做法 |
|
||
|--------|---------|
|
||
| 一次性生成大量代码 | 任务拆解(§2) |
|
||
| 无验收标准 | 先定义验收标准(§3) |
|
||
| 不审查 AI 代码 | 看 diff + 双门禁(§4) |
|
||
| 一次性灌入冗余上下文 | 上下文预算,按需加载 |
|
||
| 把「模型更强」当「系统更稳」 | 模型 + 编排 + 门禁三层闭环 |
|
||
| 同一知识多份副本 | 单一事实源 + 引用 |
|
||
| 知识库只写不更新 | §6 自动记录 + 定期一致性巡检 |
|
||
|
||
## §8 版本历史
|
||
|
||
| 日期 | 版本 | 变更 |
|
||
|------|------|------|
|
||
| 2026-10-01 | v1.0 | 初始版本:Plan-first 四阶段 + 验收标准 + 完成自动记录(§6) |
|