头脑风暴 - 需求发现(AI 编码增强版)
引导 AI 在实现之前进行协作式需求发现,针对 AI 编码工作流优化:
- •任务优先(立即捕获想法)
- •行动先于提问(减少低价值问题)
- •技术选择先研究(避免让用户凭空想选项)
- •发散 → 收敛(拓展思维,然后锁定 MVP)
使用时机
从 $start 触发,当用户描述开发任务时,特别是:
- •需求不清晰或在演进中
- •有多条有效的实现路径
- •权衡很重要(用户体验、可靠性、可维护性、成本、性能)
- •用户可能不知道最佳选项
核心原则(不可妥协)
- •
任务优先(尽早捕获) 始终确保在开始时就有一个任务,这样用户的想法会被立即记录。
- •
行动先于提问 如果你能从仓库代码、文档、配置、约定或快速研究中得出答案 — 先做这些。
- •
每条消息一个问题 不要用一堆问题轰炸用户。问一个,更新 PRD,重复。
- •
优先提供具体选项 对于偏好/决策类问题,提供 2-3 个可行的、具体的方案及其权衡。
- •
技术选择先研究 如果决策取决于行业惯例/类似工具/成熟模式,先做研究,再提出选项。
- •
发散 → 收敛 在初步理解后,主动考虑未来演进、相关场景和失败/边界情况 — 然后收敛到一个明确排除范围的 MVP。
- •
不问元问题 不要问"我应该搜索吗?"或"你能粘贴代码让我继续吗?" 如果你需要信息:搜索/检查。如果被阻塞:问最小的阻塞性问题。
步骤 0:确保任务存在(始终)
在任何问答之前,确保任务存在。如果不存在,立即创建。
- •使用从用户消息中推导的临时工作标题。
- •标题不完美没关系 — 稍后在 PRD 中完善。
TASK_DIR=$(python3 ./.trellis/scripts/task.py create "brainstorm: <简短目标>" --slug <auto>)
立即用你已知的信息创建/初始化 prd.md:
# brainstorm: <简短目标> ## 目标 <一段话:做什么 + 为什么> ## 已知信息 * <来自用户消息的事实> * <从仓库/文档中发现的事实> ## 假设(临时) * <需要验证的假设> ## 待解决问题 * <仅阻塞性/偏好性问题;保持列表简短> ## 需求(演进中) * <从已知的开始> ## 验收标准(演进中) * [ ] <可测试的标准> ## 完成定义(团队质量标准) * 添加/更新了测试(单元/集成,视情况而定) * Lint / typecheck / CI 通过 * 如果行为变更则更新文档/笔记 * 如果有风险则考虑上线/回滚 ## 范围外(明确) * <本任务不做的事> ## 技术说明 * <检查过的文件、约束、链接、参考> * <研究笔记摘要(如适用)>
步骤 1:自动上下文(在提问之前先做这个)
在问"代码长什么样?"之类的问题之前,自己收集上下文:
仓库检查清单
- •确定可能受影响的模块/文件
- •定位现有模式(类似功能、约定、错误处理风格)
- •检查配置、脚本、现有命令定义
- •记录任何约束(运行时、依赖策略、构建工具)
文档检查清单
- •查找现有的 PRD/规范/模板
- •查找命令使用示例、README、ADR(如有)
将发现写入 PRD:
- •添加到
已知信息 - •将约束/链接添加到
技术说明
步骤 2:分类复杂度(仍然有用,但不阻止任务创建)
| 复杂度 | 标准 | 操作 |
|---|---|---|
| 微小 | 单行修复、错别字、显而易见的修改 | 跳过头脑风暴,直接实现 |
| 简单 | 目标明确、1-2 个文件、范围清晰 | 问 1 个确认问题,然后实现 |
| 中等 | 多文件、有些模糊 | 轻量头脑风暴(2-3 个高价值问题) |
| 复杂 | 目标模糊、架构选择、多种方案 | 完整头脑风暴 |
注意:任务已在步骤 0 创建。分类只影响头脑风暴的深度。
步骤 3:问题门控(只问高价值问题)
在问任何问题之前,运行以下门控:
门控 A — 我能不问用户就得出答案吗?
如果答案可以通过以下方式获得:
- •仓库检查(代码/配置)
- •文档/规范/约定
- •快速的市场/开源研究
→ 不要问。 获取它,总结,更新 PRD。
门控 B — 这是元问题/懒问题吗?
示例:
- •"我应该搜索吗?"
- •"你能粘贴代码让我继续吗?"
- •"代码长什么样?"(当仓库可用时)
→ 不要问。 采取行动。
门控 C — 这是什么类型的问题?
- •阻塞性:没有用户输入无法继续
- •偏好性:多个有效选择,取决于产品/UX/风险偏好
- •可推导:应该通过检查/研究来回答
→ 只问阻塞性或偏好性问题。
步骤 4:研究优先模式(技术选择时强制)
触发条件(任一 → 研究优先)
- •任务涉及选择方案、库、协议、框架、模板系统、插件机制或 CLI UX 约定
- •用户要求"最佳实践"、"别人怎么做的"、"推荐"
- •用户无法合理地列举选项
研究步骤
- •确定 2-4 个可比较的工具/模式
- •总结常见约定及其存在原因
- •将约定映射到我们的仓库约束
- •为我们的项目产出 2-3 个可行方案
研究输出格式(PRD)
在 PRD 中添加一个章节(在技术说明中或作为独立章节):
## 研究笔记 ### 类似工具的做法 * ... * ... ### 我们仓库/项目的约束 * ... ### 这里可行的方案 **方案 A:<名称>**(推荐) * 工作方式: * 优点: * 缺点: **方案 B:<名称>** * 工作方式: * 优点: * 缺点: **方案 C:<名称>**(可选) * ...
然后问一个偏好问题:
- •"你更倾向哪个方案:A / B / C(或其他)?"
步骤 5:扩展扫描(发散) — 初步理解后必须
在你能总结目标之后,在收敛之前主动拓宽思维。
扩展类别(每类保持 1-2 条)
- •
未来演进
- •这个功能在 1-3 个月后可能变成什么?
- •现在值得保留哪些扩展点?
- •
相关场景
- •哪些相邻的命令/流程应该与此保持一致?
- •是否有对等性期望(创建 vs 更新、导入 vs 导出等)?
- •
失败和边界情况
- •冲突、离线/网络故障、重试、幂等性、兼容性、回滚
- •输入验证、安全边界、权限检查
扩展消息模板(给用户)
我理解你想要实现:<当前目标>。 在深入设计之前,让我快速发散考虑三个类别(以避免后续返工): 1. 未来演进:<1-2 条> 2. 相关场景:<1-2 条> 3. 失败/边界情况:<1-2 条> 对于这个 MVP,你想包含哪些(或都不要)? 1. 仅当前需求(最小可行) 2. 添加 <X>(为未来扩展预留) 3. 添加 <Y>(提高健壮性/一致性) 4. 其他:描述你的偏好
然后更新 PRD:
- •MVP 中包含的 →
需求 - •排除的 →
范围外
步骤 6:问答循环(收敛)
规则
- •
每条消息一个问题
- •
尽可能使用选择题
- •
每次用户回答后:
- •立即更新 PRD
- •将已回答的项从
待解决问题移到需求 - •用可测试的复选框更新
验收标准 - •明确
范围外
问题优先级(推荐)
- •MVP 范围边界(包含/排除什么)
- •偏好决策(在提供具体选项后)
- •失败/边界行为(仅 MVP 关键路径)
- •成功指标和验收标准(什么证明它有效)
首选问题格式(选择题)
对于 <主题>,你更倾向哪种方案? 1. **选项 A** — <含义 + 权衡> 2. **选项 B** — <含义 + 权衡> 3. **选项 C** — <含义 + 权衡> 4. **其他** — 描述你的偏好
步骤 7:提出方案 + 记录决策(复杂任务)
需求足够清晰后,提出 2-3 个方案(如果还没通过研究优先模式完成):
基于当前信息,这里有 2-3 个可行方案: **方案 A:<名称>**(推荐) * 方式: * 优点: * 缺点: **方案 B:<名称>** * 方式: * 优点: * 缺点: 你更倾向哪个方向?
在 PRD 中记录结果为 ADR-lite 章节:
## 决策(ADR-lite) **背景**:为什么需要这个决策 **决策**:选择了哪个方案 **后果**:权衡、风险、潜在的未来改进
步骤 8:最终确认 + 实现计划
当待解决问题都解决后,用结构化摘要确认完整需求:
最终确认格式
以下是我对完整需求的理解: **目标**:<一句话> **需求**: * ... * ... **验收标准**: * [ ] ... * [ ] ... **完成定义**: * ... **范围外**: * ... **技术方案**: <简要总结 + 关键决策> **实现计划(小 PR)**: * PR1:<脚手架 + 测试 + 最小管道> * PR2:<核心行为> * PR3:<边界情况 + 文档 + 清理> 这看起来正确吗?如果是,我将开始实现。
PRD 目标结构(最终)
prd.md 应收敛为:
# <任务标题> ## 目标 <为什么 + 做什么> ## 需求 * ... ## 验收标准 * [ ] ... ## 完成定义 * ... ## 技术方案 <关键设计 + 决策> ## 决策(ADR-lite) 背景 / 决策 / 后果 ## 范围外 * ... ## 技术说明 <约束、参考、文件、研究笔记>
反模式(严格避免)
- •向用户索要可以从仓库推导的代码/上下文
- •在提供具体选项之前让用户选择方案
- •关于是否要研究的元问题
- •只盯着初始请求不考虑演进/边界
- •让头脑风暴漫无目的而不更新 PRD
与 Start 工作流的集成
高层流程:
用户描述任务 ↓ 步骤 0:确保任务存在(不存在则创建) ↓ 步骤 1:自动上下文(检查仓库/文档,如需要则研究) ↓ 步骤 2:分类复杂度 ↓ 步骤 4(如触发):研究优先 → 提出选项 ↓ 步骤 5:扩展扫描(发散) ↓ 步骤 6:问答循环(收敛;每轮更新 PRD) ↓ 步骤 8:最终确认 + 小 PR 计划 ↓ 实现
相关命令
| 命令 | 使用时机 |
|---|---|
$start | 触发头脑风暴的入口 |
$finish-work | 实现完成后 |
$update-spec | 工作中出现新模式时 |