12 KiB
Executable File
12 KiB
Executable File
团队级 AI Coding 简明手册 v0.2
来源:系统设计研讨会分享 PPT(2026.06.18),版权归分享人所有 归档日期:2026-06-20
一、AI 编程思想发展过程
| 阶段 | 特征 | 模式 |
|---|---|---|
| 原始阶段 | 基于本能的 AI 编程,手动复制代码或通过问答交互 | 半自动,有人值守 |
| Rule 约束 | 经验规则显化(如 RIPER-5),通过持续对话输入需求 | 半自动 |
| 规格驱动 | 需求结构化表达,基于规格流转(如 OpenSpec),文件进文件出 | 全自动过渡 |
| Loop Engineering | 可反馈闭环:AI 根据验收规则自动循环 + 测试套件 | 全自动 |
| Harness 驾驭工程 | 纳入工程治理体系,提供约束体系 + 外部接口 | 全自动,Plan 后无人值守 |
每一次思想的变更是对前者的重新表述而非推翻
二、AI 赋能软件开发实现地图
需求分析 → 需求文档/原型图 → 技术方案设计 → 代码框架+打样工程
↓ ↓ ↓ ↓
人+AI 人+AI 人+AI 人+AI
↓ ↓ ↓ ↓
AI代码编写 → 单元测试/调试 → E2E测试 → Code Review → 提测部署
↓ ↓ ↓ ↓ ↓
机 机+人 机+人 机+人 机+人
核心 Loop:研发自测阶段,AI 自治运行 全流程超级 Loop:从需求到部署的完整闭环
三、四大核心问题
01 需求衔接
- 如何编写 AI 能理解的需求?
- 使用什么格式?如何组织需求规格?
- 如何传递原型图?需求模版长什么样?
02 开发实现
- 如何让 AI 理解上下文且按要求执行?
- 如何调用外部工具?生成一致的代码?
- 如何多任务同步开发?
03 测试验收
- AI 编程需要什么测试策略?
- 如何让 AI 操作浏览器?
- 如何管理测试用例?
04 Agent as Code
- 如何把和 AI 协作的文件在代码仓库中合理组织?
- 构建 AI 更友好的环境
四、需求规格编写
关键要素
- 模块切分(增量/存量)
- 字段清单
- 原型链接
- 业务规则
编写原则
- 先写业务背景,再切模块。一个模块 = 一个文档
- 分解为增量需求和存量需求:
- 增量需求 — 全新功能,需新建模块
- 存量修改 — 对已有功能做变更
- 字段定义需完整:类型、必填、默认值、描述、校验规则、UI展示、数据来源
- 业务规则条目化 + 正交分解,每条规则独立可测
Tips: BA 也应该工作在代码仓库中,让 AI 基于当前系统事实构建新需求
原型图设计
- 设计工具输出:Figma/Stitch URL 嵌入需求文档
- HTML+CSS 输出:可交互原型提交到代码仓库
- Design.md:约束 AI 生成的前端风格,确保与项目组件库一致
五、开发实现
让 AI 听话的三要素
| 要素 | 说明 | 示例 |
|---|---|---|
| 规则 Rules | 约束 AI 行为边界 | Java 代码风格、命名规范 |
| 规格 Specification | 结构化需求,甚至用 DSL 描述 | 用户故事 + 验收标准 |
| 技能 Skill | 打包提示词/脚本/模版扩展能力 | Commit & Push Skill |
构建 AI 上下文体系(详见下方重点章节)
让 AI 调用外部工具的三种方式
- CLI Commands — 最直接,AI 生成命令并执行
- MCP — 标准协议,统一接入数据库/API/文件系统
- Skills — 脚本封装,触发词驱动
AI 编程工具选择
- 命令行类:Claude Code、Codex CLI、OpenCode
- AI IDE:Cursor、Kiro、Trae
- 增强插件:Superpower、oh-my-opencode、oh-my-codex
SDD 框架对比
| 维度 | BMAD | Spec Kit | OpenSpec | Kiro |
|---|---|---|---|---|
| 定位 | 企业级 SDD 操作系统 | 工程化 Spec 工作流 | 轻量 Spec 层 | IDE 原生 SDD |
| Spec 粒度 | 大(系统/模块级) | 中(Feature级) | 小(变更/Patch级) | 中(Feature+行为) |
| 自动验证 | 无 | 无 | 弱 | 强(内建) |
| 适用场景 | 大型系统/多团队 | 新项目(0→1) | 存量项目/快速迭代 | 小团队/高自动化 |
技术规格编写(DSL 驱动)
| 模块 | 标准 | 格式 | 约束 |
|---|---|---|---|
| 领域模型 | PlantUML/Smart Domain | .puml | 必须表达实体关系 |
| 数据库 | SQL DDL/DBML | .sql | 必须可执行 |
| API | OpenAPI 3.x | .yaml/.json | 必须定义 schema |
| 时序图 | PlantUML | .puml | 必须反映真实调用链 |
| 专题设计 | Markdown | .md | 只写策略与规则 |
打样工程:让 AI 抄作业
- 原则:约定大于配置、编排逻辑和原子能力分离、操作者和被操作对象分离
- 简单 CRUD:Controller + Command → AppService → Repository → Response
- 复杂 CRUD:Controller + Command → AppService → DomainService → Repository → Response
- 复杂查询:Controller + Query → AppService → QueryPO → Response
多任务同步开发
使用 git worktree 同时把多个分支映射到不同文件夹:
git worktree add -b feature-payment ../feature-payment
六、⭐ 过程方案 vs 事实方案(重点)
核心理念
使用完整的文档来描述上下文和约束体系,区分过程方案和事实方案,减少维护成本。
文档分层体系
AGENTS.md ← 宪法级约束
docs/
├── standards/ ← 标准规格(架构/命名/API/安全规范)
├── features/ ← 需求规格(产品/BA维护)
├── designs/ ← 设计规格(DB/表等 Source of Truth) ⬅ 事实方案
├── plans/ ← 计划规格(每轮任务实现方案) ⬅ 过程方案
└── others/ ← 架构决策、Release、测试用例等
过程方案(Plans)
定义:每一轮任务的实现方案、Tasking、工作状态。
特征:
- 临时性:每次创建新文件,用完即弃
- 不维护:细微修改不再更新旧文件
- 可追溯:保留历史决策轨迹,方便复盘
- 增量追加:
追加: 每次创建一个新的文件
示例:
docs/plans/
├── plan-2026-06-01-user-auth.md # 第1轮
├── plan-2026-06-05-user-auth-v2.md # 第2轮迭代
├── plan-2026-06-10-payment-flow.md # 新任务
└── plan-2026-06-15-order-module.md # 新任务
为什么这样设计:
- 避免反复修改同一文件导致的 Git 冲突
- 保留完整决策轨迹,AI 和人都能回溯
- AI 执行完可以"丢弃",不污染长期文档
- 降低维护成本——过程方案不需要维护
在 Plan/Go 模式中的角色:
- Plan 阶段产出 → 锁定上下文到 Plan 中
- 记录实现状态,让任务可以分批完成或重试
- 关闭所有开放性问题后再进入执行
事实方案(Designs / Standards / Features)
定义:反映系统当前真实状态的文档,是 Source of Truth。
特征:
- 长期有效:稳定的、持续维护的
- 最终态更新:
变更: 每次以最终态更新 - 事实依据:作为下一次 Plan 的起点
- 必须一致:与实际代码/系统保持同步
示例:
docs/designs/
├── database-schema.md # 当前数据库表结构(最终态)
├── api-endpoints.md # 当前 API 定义(最终态)
└── architecture.md # 当前架构图(最终态)
docs/standards/
├── coding-style.md # 编码规范
└── security-guidelines.md # 安全规范
docs/features/
├── user-management.md # 用户管理需求(当前版本)
└── order-system.md # 订单系统需求(当前版本)
为什么这样设计:
- AI 每次 Plan 前读取这些文档,获得"当前真相"
- 避免 AI 基于过时信息做决策
- 只维护一份最终态,减少维护成本
- 是团队共识的载体
规格流转图
起点 Features(需求规格)
↓
Standards(约束规范)
↓
TDD 驱动 → 测试 + 代码
↓
事实方案 Designs(更新最终态) ← 变更:覆盖更新
↓
过程方案 Plans(执行记录) ← 追加:新建文件
↓
回到起点 Features(验收)
实践建议
- AGENTS.md 作为宪法:定义 AI 行为边界和基本原则
- 区分"打算做"和"已做完":Plans 是意图,Designs 是事实
- Plan 阶段尽可能锁定上下文:关闭所有开放性问题
- Plan 中记录实现状态:让任务可以分批完成或重试
- 给出确定性验收方式:如通过所有 API 测试,让 AI 建立自我修复标准
七、测试验收
AI 辅助测试策略
| 测试类型 | 工具 | 负责人 |
|---|---|---|
| Lint 代码扫描 | TS Lint/SonarQube | 程序 |
| Code Review | Copilot/Claude Code/CodeRabbit | 开发者 + AI |
| 单元测试 | JUnit/pytest/Jest | 开发者 + AI |
| API 测试 | Karate/RestAssured | QA + 后端 + AI |
| E2E 测试 | Playwright | QA + 自动化 + AI |
AI 操作浏览器方案对比
| 方案 | 原理 | 速度 | Token 消耗 | 跨应用 |
|---|---|---|---|---|
| OpenWright (Playwright MCP) | Accessibility Tree | 快 ~0.9s | 高 | 仅浏览器 |
| Chrome DevTools MCP | CDP 协议 | 中 ~1.2s | 中 | 仅浏览器 |
| Browser Use | DOM + 截图双模 | 中 ~1.5s | 极低 | 仅浏览器 |
| Computer Use | 视觉识别+坐标 | 慢 0.8-2s | 高 | 全桌面 |
E2E 测试生成策略
- Browser Use 探索:AI 自主遍历页面,记录操作轨迹(消耗 Token)
- Playwright 固化:转为测试脚本加入 CI(零 Token 可重复运行)
- 截图视觉兜底:覆盖布局偏移、动效、Canvas 等场景
核心 Loop(研发自测)
Plan 模式装载需求规格 → Plan 确认 → 编写 API 测试 → 编写实现
→ 运行测试 → 通过?→ 退出循环
↓ 否
修复重试
超级 Loop(E2E Loop)
在核心 Loop 基础上增加:
- 编写测试用例(docs/test-cases)
- 浏览器调试(Playwright 确认视觉效果)
- 编写 E2E 测试覆盖本轮需求
八、Agent as Code
AI 工程文件管理
AGENTS.md ← 宪法,构建引用关系
docs/
├── .ai/ ← AI 配置
├── standards/ ← 标准规格
├── features/ ← 需求规格
├── designs/ ← 设计规格
├── plans/ ← 计划规格
├── skills/ ← AI 技能
└── mcp/ ← MCP 配置
.claude / .opencode / .cursor → 软链到 AGENTS.md
九、实践心得
- 放弃"开箱即用"的框架,每个项目需要构建自己的 Harness 工具和文档
- "少量取用,大量实践"是更好的策略