Files
chill_notes/AI工程/团队级AI_Coding简明手册v0.2.md
2026-06-22 11:30:51 +08:00

324 lines
12 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 团队级 AI Coding 简明手册 v0.2
> 来源:系统设计研讨会分享 PPT2026.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 更友好的环境
---
## 四、需求规格编写
### 关键要素
- **模块切分**(增量/存量)
- **字段清单**
- **原型链接**
- **业务规则**
### 编写原则
1. 先写业务背景,再切模块。**一个模块 = 一个文档**
2. 分解为增量需求和存量需求:
- **增量需求** — 全新功能,需新建模块
- **存量修改** — 对已有功能做变更
3. 字段定义需完整类型、必填、默认值、描述、校验规则、UI展示、数据来源
4. 业务规则条目化 + 正交分解,每条规则独立可测
> **Tips**: BA 也应该工作在代码仓库中,让 AI 基于当前系统事实构建新需求
### 原型图设计
- **设计工具输出**Figma/Stitch URL 嵌入需求文档
- **HTML+CSS 输出**:可交互原型提交到代码仓库
- **Design.md**:约束 AI 生成的前端风格,确保与项目组件库一致
---
## 五、开发实现
### 让 AI 听话的三要素
| 要素 | 说明 | 示例 |
|------|------|------|
| **规则 Rules** | 约束 AI 行为边界 | Java 代码风格、命名规范 |
| **规格 Specification** | 结构化需求,甚至用 DSL 描述 | 用户故事 + 验收标准 |
| **技能 Skill** | 打包提示词/脚本/模版扩展能力 | Commit & Push Skill |
### 构建 AI 上下文体系(详见下方重点章节)
### 让 AI 调用外部工具的三种方式
1. **CLI Commands** — 最直接AI 生成命令并执行
2. **MCP** — 标准协议,统一接入数据库/API/文件系统
3. **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 抄作业
- 原则:约定大于配置、编排逻辑和原子能力分离、操作者和被操作对象分离
- 简单 CRUDController + Command → AppService → Repository → Response
- 复杂 CRUDController + Command → AppService → DomainService → Repository → Response
- 复杂查询Controller + Query → AppService → QueryPO → Response
### 多任务同步开发
使用 `git worktree` 同时把多个分支映射到不同文件夹:
```bash
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 # 新任务
```
**为什么这样设计**
1. 避免反复修改同一文件导致的 Git 冲突
2. 保留完整决策轨迹AI 和人都能回溯
3. AI 执行完可以"丢弃",不污染长期文档
4. 降低维护成本——过程方案不需要维护
**在 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 # 订单系统需求(当前版本)
```
**为什么这样设计**
1. AI 每次 Plan 前读取这些文档,获得"当前真相"
2. 避免 AI 基于过时信息做决策
3. 只维护一份最终态,减少维护成本
4. 是团队共识的载体
### 规格流转图
```
起点 Features需求规格
Standards约束规范
TDD 驱动 → 测试 + 代码
事实方案 Designs更新最终态 ← 变更:覆盖更新
过程方案 Plans执行记录 ← 追加:新建文件
回到起点 Features验收
```
### 实践建议
1. **AGENTS.md 作为宪法**:定义 AI 行为边界和基本原则
2. **区分"打算做"和"已做完"**Plans 是意图Designs 是事实
3. **Plan 阶段尽可能锁定上下文**:关闭所有开放性问题
4. **Plan 中记录实现状态**:让任务可以分批完成或重试
5. **给出确定性验收方式**:如通过所有 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 测试生成策略
1. **Browser Use 探索**AI 自主遍历页面,记录操作轨迹(消耗 Token
2. **Playwright 固化**:转为测试脚本加入 CI零 Token 可重复运行)
3. **截图视觉兜底**覆盖布局偏移、动效、Canvas 等场景
### 核心 Loop研发自测
```
Plan 模式装载需求规格 → Plan 确认 → 编写 API 测试 → 编写实现
→ 运行测试 → 通过?→ 退出循环
↓ 否
修复重试
```
### 超级 LoopE2E 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 工具和文档
> - "少量取用,大量实践"是更好的策略
---
## 参考资料
- [Harness Engineering - OpenAI](https://openai.com/index/harness-engineering/)
- [Harness Engineering - Martin Fowler](https://martinfowler.com/articles/harness-engineering.html)
- [Harness Design for Long-running Apps - Anthropic](https://www.anthropic.com/engineering/harness-design-long-running-apps)
- [从 Rule、Spec 到 Harness 的渐进式建设路径](https://mp.weixin.qq.com/s/UCh2bPzMZjNBMBCCJysuNw)
- [Understanding SDD: Kiro, spec-kit, and Tessl](https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html)
- [harness-engineering-in-ai-coding](https://github.com/2361485765/harness-engineering-in-ai-coding)