Skip to Content

工作流实践

从需求对齐到上线的完整开发流程

概述

本文介绍我们团队的完整工作流:先对齐需求,再切分任务,之后才让 AI 动手。它把四类使用模式、方案文档和验证闭环串成一条可复制的流水线,目标是让「AI 写得快」与「方向是对的」同时成立。

这条流程借鉴了当前主流实践里的两个关键思想:

  1. Grill / 拷问式对齐:写任何文档和代码之前,先让 AI 一次一个问题地拷问我们,把模糊诉求变成无歧义的共享理解——需求对齐是人在环(HITL)的,不能外包。
  2. 验证闭环:对齐、方案、实现、Review 每一环都有明确产物和检查点,实现与审查用独立上下文,避免「生成后碰运气」。

这套流程与我们「不依赖 Spec 框架、手动做规范驱动」的取舍完全一致:Grill 对齐、切垂直切片、写 draft/final 都是手动组织,不引入任何框架工具。参见为什么不用 Spec 框架

完整工作流

详细步骤

Grill:拷问式需求对齐

从 Story Card 开始,但先别写方案。让 Agent 一次一个问题地拷问你,直到需求没有歧义。

为什么先对齐:

  • 直接贴需求让 AI 生成,会把我们的措辞歧义、隐含假设和「没说出口的例外」直接带进方案,返工成本最高;
  • 领域术语不一致时,AI 生成的命名和注释会越来越散,跨会话维护变难;
  • 对齐产出的是共享需求理解:范围边界(做什么/不做什么)、验收标准、领域术语——比任何「完美计划」都更重要。

做法(人在环,不可完全委托):

  1. 让 Agent 一次只问一个问题,每个问题先给出它的推荐答案和理由,再请你确认或纠正;
  2. 按「范围与边界 → 数据与领域术语 → 验收标准」的顺序拷问,直到没有未决歧义;
  3. 把共识写进 specs/<feature>/requirements.md,作为后续 draft 的输入。

Prompt 示例:

我准备实现用户订单管理,先不要写代码。 请开始拷问式澄清:一次只问一个问题,每个问题先给出你的推荐答案和理由,等我确认后再问下一个。 按这个顺序: 1. 先澄清范围与边界(包括明确不做什么) 2. 再澄清数据模型与领域术语 3. 最后确认验收标准 直到没有歧义为止。最后把共识整理成 requirements.md 输出。

理解不能外包:对齐阶段是人在环的,AI 帮你逼出问题、给出推荐答案,但最终判断必须由人做。这一步跳过了,后面的 draft/final/代码都会在错误的地基上盖楼。

垂直切片拆分任务

需求对齐后,把功能拆成垂直切片(Tracer Bullet)而不是水平分层。

水平拆分(不推荐):

Story: 实现用户订单管理功能 Tasks: ├── Task 1: 全部订单表 / Schema ├── Task 2: 全部订单 API ├── Task 3: 全部前端页面 └── Task 4: 才第一次看到端到端效果

垂直拆分(推荐):

Story: 实现用户订单管理功能 Tasks: ├── Task 1: 订单列表端到端(表 + API + 列表页可见可查) ├── Task 2: 订单详情与状态流转(表扩展 + API + 详情页) ├── Task 3: 订单导出(API + 下载交互) └── Task 4: 筛选排序(复用已有切片)

原则:

  • 每个切片都是「薄而完整」的一条路径:数据库 + 逻辑 + 一个可见结果;
  • 每个切片结束时有可见、可测的产物,回答「做完我能看到什么、能测什么」;
  • blocking 依赖 组织切片,无依赖的切片可并行跑多个 Agent;
  • 单切片开发时间控制在 0.5-2 天。

垂直切片天然适合 Agent:切片小、上下文预算可控(见阶段四的 Smart Zone),每片结束都有反馈信号,失败早、纠错成本低。

梳理参考文档

为每个切片准备必要的参考材料。

常见参考文档类型:

类型用途示例
API 文档接口规格说明Swagger/OpenAPI 文档
设计图UI/UX 设计稿Figma 导出的 PNG
数据模型数据库设计ER 图、Schema 定义
示例代码参考实现类似功能的现有代码
业务文档业务规则说明PRD、流程图

文件组织:

specs/ └── order-management/ ├── requirements.md # Grill 对齐的共识 ├── 001-order-list/ │ ├── draft.md │ ├── final.md │ └── api-spec.yaml ├── 002-order-detail/ │ ├── draft.md │ ├── final.md │ └── design.png └── shared/ ├── order-schema.sql └── business-rules.md

编写 draft.md 并生成 final.md

方案设计沿用团队的 Draft-Final 流程:先写自己的初步思路,再让 AI 完善成详细方案。

Draft 模板:

# [Task 名称] ## 需求背景 [为什么需要这个功能] ## 核心目标 [这个 Task 要完成什么] ## 初步方案 [你的设计思路] ## 参考 [相关的文件、代码、文档] ## 不确定的点 [需要 AI 帮助确认或补充的内容]

Draft 不需要完美,重点是记录思考过程和不确定的点。Grill 阶段产生的 requirements.md 在这里作为最直接的输入。

生成 final.md 的 Prompt 示例:

@specs/order-management/requirements.md @specs/order-management/001-order-list/draft.md @specs/order-management/shared/order-schema.sql 基于需求共识、draft 和数据库 Schema,生成详细的技术方案: 1. 具体的 API 设计(路径、参数、响应) 2. 数据库查询方案 3. 分页和排序实现 4. 错误处理 输出到 @specs/order-management/001-order-list/final.md

审查 final 的清单:

  • 是否与 requirements.md 的边界和验收标准一致
  • 技术选型是否符合项目规范
  • API 设计是否符合团队约定
  • 数据模型是否合理
  • 边界情况是否考虑完整
  • 性能与安全是否可接受

分步实现代码

方案确认后,让 AI 分步生成代码,严格遵守小步 + 反馈的原则。

@specs/order-management/001-order-list/final.md 按照方案的实现步骤,先完成第 1 步:创建数据模型
@specs/order-management/001-order-list/final.md 继续第 2 步:实现查询 API

不要一次生成所有代码! 分步生成便于控制质量和及时发现问题。

Smart Zone 预算:

模型在一个 session 内能力不是恒定的:上下文增长到一定程度(约前 40-50% 窗口)后,决策质量明显下降。要点:

原则做法
按预算切任务一个 session 只做一件事,任务大小按「聪明区间」切,而不是按窗口上限
Clear > Compact上下文快满时优先清空新开 session,而不是压缩历史——压缩会积累「沉积物」污染后续推理
实现与 Review 分离实现完就 Clear,用全新上下文做 Review,不用同一个 context 完成两个阶段

独立 Review:新上下文 + 双轴审查

实现完成后不要在当前会话里直接审查,Clear 后新开会话做 Review。

双轴审查:

  1. 方案轴:代码是否符合 final.md 的方案设计;
  2. 规范轴:是否遵循项目编码规范、有明显 bug、测试覆盖充分。

Prompt 示例:

@specs/order-management/001-order-list/final.md @src/api/orders.ts 请对新生成的代码做双轴审查: 1. 是否符合 final.md 的方案设计 2. 是否遵循项目编码规范、有 bug 或性能问题 逐个问题给出修改建议

修复问题:

@src/api/orders.ts 这个接口有以下问题: 1. 缺少参数校验 2. 错误处理不完整 请修复

Review 的目的是把「验证」变成工作流的独立一环而不是口头承诺——与第 3 章 · 验证闭环中 Plan → Execute → Verify 的思想一致。

自测验证与交付

所有测试通过后提交代码。

运行 npm test 并修复所有失败的测试
基于这次的修改,生成一个清晰的 commit message 和 PR description

实际案例:实现评论功能

Step 1: Grill 对齐

我准备给文章加评论功能,先别写代码。开始拷问式澄清: 1. 范围与边界 2. 数据与术语(评论、回复、作者) 3. 验收标准 一次一个问题,先给推荐答案再让我确认

收敛后的共识(requirements.md):

# 评论功能需求共识 ## 范围 - 支持对文章发表评论、回复评论、作者删除评论 - 不包含:评论审核、敏感词过滤(二期) ## 术语 - 评论 Comment / 回复 Reply(parent_id 嵌套) ## 验收标准 - 用户可发表并看到自己的评论 - 回复以嵌套结构展示 - 作者可删除评论,删除后子回复保留

Step 2: 垂直切片

Tasks: ├── Task 1: 评论发表端到端(schema + API + 表单 + 列表可见) ├── Task 2: 回复嵌套展示(schema 扩展 + API + UI) └── Task 3: 作者删除(API + 交互 + 保留子回复)

Step 3: 方案设计

@specs/comment/requirements.md @specs/comment/001-publish/draft.md 基于需求共识与现有数据模型,设计评论功能的完整 API 方案,输出到 final.md

Step 4: 分步实现 + Step 5: 独立 Review

实现时按 final.md 分步生成;完成后 Clear,新会话做双轴审查(方案轴 + 规范轴),修复后跑测试。

效率对比

指标无流程使用此工作流
返工率高(方向错误发现晚)低(对齐与方案阶段发现问题)
代码一致性低(每次实现不同)高(有 final 方案约束)
需求共识无(各做各的理解)有(requirements.md 共享)
知识沉淀有(draft/final 可复用)
新人上手慢(缺乏参考)快(有历史方案参考)
协作效率低(难以理解他人思路)高(方案透明)

常见问题

Q: Grill 对齐和 draft.md 有什么区别?

Grill 对齐的是需求(做什么、不做什么、验收标准),draft 记录的是方案思路(怎么做)。简单任务可以跳过 Grill 直接写 draft;复杂或陌生领域建议两者都走。

Q: 每个 Task 都要走完整流程吗?

不一定。简单任务可以直接使用 Direct 模式。建议的判断标准:

  • 预计 > 30 分钟:建议使用 Draft-Final 模式
  • 涉及多个文件:建议使用 Draft-Final 模式
  • 不熟悉的领域:建议先 Grill 对齐,再 Draft-Final

Q: 如何选择 Clear 和 Compact?

优先 Clear:清空后回到干净基线,行为可预测。Compact 把历史压成摘要继续用,方便但会积累「沉积物」污染后续推理。实现阶段结束时、Review 开始前,建议 Clear。

Q: 团队如何共享这些文档?

  • 所有 requirements/draft/final 文件提交到 Git 仓库
  • 放在 specs/ 目录下,按功能组织
  • 新成员可以通过阅读历史文档快速了解项目

Q: 方案文档会过时吗?

会的。但这是可接受的:

  • Draft 记录的是当时的思路,有历史价值
  • Final 是实现时的方案,代码才是最终真相
  • 重大变更时可以补充新的方案文档

Q: 为什么不使用 OpenSpec 或 Kiro 等 Spec 框架?

我们的方法受规范驱动开发原则的启发,但选择手动实现这些原则:Grill 对齐、垂直切片、draft/final 都是手动组织的流程,不引入框架工具。这让我们能更好地与现有企业工作流(Jira、代码评审流程)集成,并对 Token 消耗有更精细的控制。详见为什么不用 Spec 框架

下一步

恭喜你完成了本章的学习!你现在已经掌握了:

  • ✅ 四种 Cursor 使用模式
  • ✅ 需求对齐(Grill)与任务切片的方法
  • ✅ 知识管理的最佳实践
  • ✅ 完整的开发工作流

继续学习下一章,了解如何收集和利用反馈来持续改进你的 AI 辅助开发实践。

最后更新于: