AI Coding 工作流
AI Coding 的产出不是“模型写了一段代码”,而是一个工程师能够解释、测试、回退并交给同事审查的变更。工具会更新,稳定的工作流不会:先确认结果,再理解仓库,然后小步实现、验证和提交证据。
一条可靠的开发闭环
任务结果与边界
→ 读取仓库规则
→ 定位现有实现与相邻模式
→ 写计划和验收条件
→ 建立失败基线
→ 实现最小 vertical slice
→ 单测 / 集成 / UI 或真实客户端验证
→ 审查 diff 与安全边界
→ scoped commit + evidence
| 阶段 | 必须回答的问题 | 证据 |
|---|---|---|
| 目标 | 用户最后能做什么? | Acceptance criteria |
| 探索 | 现有模式和约束在哪里? | 文件、规则、相邻实现 |
| 基线 | 修改前如何失败? | 可复现命令或截图 |
| 实现 | 最小改动是什么? | Scoped diff |
| 验证 | 哪些检查覆盖风险? | Test、HTTP、浏览器、provider read-back |
| 交接 | 下一位工程师如何复核? | Commit、日志摘要、已知限制 |
按任务形态选工作界面
不要把工具品牌当能力边界。先看任务需要什么交互方式:
| 任务 | 合适界面 | 原因 |
|---|---|---|
| 局部补全、单函数重构、即时预览 | IDE 内联或聊天 | 反馈快,当前文件清晰 |
| 跨文件修改、运行测试、检查 Git | Terminal Agent | 能持续观察命令和仓库状态 |
| 新功能、需求仍有歧义 | Spec-first 流程 | 先固化 requirements、design、tasks |
| 高风险迁移、生产故障 | 人主导 + 只读诊断 | 先控制影响面和权限 |
| 大量独立任务 | 隔离工作树或并行任务 | 减少文件冲突与 context 污染 |
Cursor、Claude Code、Codex、Kiro 等产品都可能覆盖多个界面。具体能力和价格会变化,页面不应把某个产品固定描述为永久“最适合”。
开工前的 Task Brief
## Outcome
登录失败时,用户看到可恢复的错误提示,不再出现空白页。
## In scope
- 登录表单错误状态
- 401/429 的用户提示
- 对应单元测试和浏览器回归
## Out of scope
- 更换认证 provider
- 修改现有 URL
- 重做整个登录页视觉
## Constraints
- 保留现有 API contract
- 使用仓库已有 request/error helper
- 不记录密码或 token
## Acceptance
- 错误密码返回明确提示
- 429 告知稍后重试
- 刷新后可再次提交
- 相关测试和真实浏览器流程通过
“修一下登录”会迫使 Agent 猜目标、边界和终点。Brief 不是写长 PRD,而是把不可猜的决定写清楚。
先探索,再允许修改
第一轮只读检查应包括:
pwd
rg --files -g 'AGENTS.md' -g 'CLAUDE.md' -g 'README.md'
rg -n "login|signIn|401|429" src
git status --short
git log -5 --oneline
要求 Agent 回答:
- 当前数据路径是什么?
- 最接近的已实现模式在哪里?
- 哪些用户改动必须保留?
- 哪个测试最能重现问题?
- 这次修改会不会触碰 URL、权限、数据库或外部发布?
没有定位证据就开始写代码,通常会产生重复 utility、错误目录或覆盖并行工作。
Plan 只需要覆盖风险
一个可执行计划应该是 vertical slice,而不是“分析、编码、测试”三句废话:
1. 在 request error mapper 中保留 401/429 类型
2. 登录表单根据错误类型显示可恢复文案
3. 为 mapper 添加边界测试
4. 在浏览器执行错误密码与 rate-limit 两条流程
5. scoped stage,仅提交本次文件
每一步都应有完成信号。若计划会改变公开 URL、删除数据、发送消息或部署生产,需要停下来获得明确授权。
小步实现与验证
建议节奏:
修改一个行为
→ 跑最窄测试
→ 查看 diff
→ 修复或继续
→ 完成 vertical slice
→ 跑更高层验证
| 变更 | 最窄检查 | 更高层检查 |
|---|---|---|
| 纯映射函数 | Unit test | 调用方集成测试 |
| API 规则 | Service/controller test | HTTP status 与 response shape |
| 页面交互 | Component test | 浏览器真实流程 |
| 数据迁移 | Dry-run 与 fixture | 备份、抽样 read-back、回滚演练 |
| 外部发布 | 本地预检 | Provider 状态和公开 URL 读回 |
测试“命令退出 0”不等于用户结果完成。验证层级要与任务终点一致。
Diff Review:AI 代码重点看什么
- Scope drift:是否改了未授权模块或 URL?
- Invented API:import、函数、配置项是否真实存在?
- Pattern drift:是否绕过已有 helper 和设计系统?
- Hidden side effects:是否新增写库、网络、日志或删除?
- Error semantics:错误是否被吞掉或全变成 500?
- Security boundary:客户端校验是否错误地替代服务端授权?
- Test quality:测试是在验证行为,还是复制实现?
git diff --check
git diff --stat
git diff -- path/to/scoped/files
git status --short
只看 Agent 总结不够。总结可能漏掉文件,Git diff 才是变更事实源。
团队规则放哪里
| 内容 | 合适载体 |
|---|---|
| 全仓库不变量、安全与 Git 规则 | AGENTS.md / CLAUDE.md |
| 目录或语言特定规范 | 更近目录的规则文件 |
| 可复用专项流程 | Skill |
| 单个功能的结果、设计与任务 | Spec / PRD / issue |
| 每次提交的事实 | Commit 与测试证据 |
Kiro 的 Specs 当前以 requirements、design、tasks 组织功能;Claude Code 等工具支持项目规则文件。关键不是格式名称,而是规则有明确作用域、能版本管理,并且不会每次靠口头重述。
用证据衡量效率
不要写未经验证的“效率提升 50%”。建立团队自己的基线:
| 指标 | 计算方式 | 防止误读 |
|---|---|---|
| Cycle time | task ready → merged | 按任务类型和规模分组 |
| First-review pass | 无需行为修改即通过的 PR / 总 PR | 文案修正与逻辑修正分开 |
| Escaped defects | merge 后发现的相关缺陷 | 关联原 PR,而非只数总 bug |
| Rework | 被删除或大改的生成代码 | 记录生成量与最终保留量 |
| Verification cost | 测试、review、修复耗时 | 不只统计“生成时间” |
| Provider cost | 实际账单 / 成功任务 | 不硬编码网页价格 |
比较前后使用相同时间窗口和任务分类。没有可比基线时,指标应标为 unavailable,不要猜。
高风险任务的额外闸门
- Auth、权限、计费:人先写 threat model 和业务不变量。
- Migration:先备份、dry run、抽样、回滚,不允许 Agent 直接生产执行。
- 并发与分布式锁:验证多进程/多 pod,不接受只在单进程通过。
- 删除与公开发布:解析精确目标,人工批准并读取外部终态。
- Secrets:日志、Prompt、截图和提交中都不得出现。
AI 可以帮助诊断和生成候选 patch,但责任人必须理解每个高风险变更的失败方式。
动手练习
选一个真实的小 bug:
- 写 Task Brief 和 out-of-scope。
- 让 Agent 只读探索并引用现有模式。
- 保存修改前的失败证据。
- 一次只实现一个行为并跑最窄测试。
- 做 diff review,再跑真实用户流程。
- 生成 evidence pack:文件、命令、结果、未覆盖风险和 commit。
完成标准
- 目标、边界和验收不是由 Agent 猜出来的。
- 修改前有基线,修改后有同一流程的验证。
- 我读过 scoped diff,并能解释高风险代码。
- 提交不包含其他人的工作区改动。
- 效率结论来自可比数据,不使用虚构数字。
相关阅读
官方参考
📚 相关资源
❓ 常见问题
点击问题,查看本章对应的实践答案。
AI Coding 工作流核心要做什么?
核心闭环是:写清用户结果与边界 → 读取仓库规则和现有模式 → 保存失败基线 → 计划最小 vertical slice → 小步修改和窄测试 → 真实用户流程验证 → scoped diff 与提交证据。AI 可以加速探索和候选实现,但目标、架构取舍、高风险授权与生产责任仍由工程师承担。
Cursor、Claude Code、GitHub Copilot 该先学哪个?
先按任务界面选,而不是背产品排名:局部补全和即时预览适合 IDE;跨文件、测试与 Git 检查适合 Terminal Agent;需求仍有歧义的新功能适合 Spec-first;生产故障与迁移先采用人主导的只读诊断。产品能力和价格会变化,选一个能覆盖当前任务并满足权限、测试和版本管理要求的工具即可。
为什么要让 AI 先出 plan 再动手?
Plan 的作用是提前暴露范围、依赖、验收和高风险副作用,不是增加形式。有效计划应列出具体 vertical slice 和每步完成信号;如果会改变公开 URL、删除数据、发送消息或部署,就必须在执行前获得授权。两三行局部修改可以直接做,但仍需说明预期结果并检查 diff。
AI Coding 应该一次让 AI 改十几个文件吗?
文件数量不是唯一标准;一次修改应对应一个可验证的 vertical slice。跨十几个文件可能是一个必要的类型迁移,也可能是 scope drift。更稳的节奏是修改一个行为 → 跑最窄检查 → 看 scoped diff → 再继续,并为其他人的工作区改动做精确 staging。
AI Coding 工作流真正拉开效率差距的是什么?
差距来自可复用的仓库规则、Task Brief、验收清单、测试夹具、debug runbook 和真实结果证据,而不是 Prompt 写得花哨。团队应跟踪 cycle time、首次 review 通过、返工、线上缺陷、验证时间和实际账单;没有基线的指标标为 unavailable,不写猜测的提升比例。