# Workflow Requirements Clarification

> 需求澄清。只负责明确"要解决什么问题"，生成 spec.md 的前三章节（背景、目标、需求）。禁止在本阶段讨论设计方案——设计是 workflow-system-design skill 的职责。

- Skill: `davidyichengwei/workflow-requirements-clarification` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add davidyichengwei/workflow-requirements-clarification`
- Raw SKILL.md: https://api.skillmd.com/api/skills/davidyichengwei/workflow-requirements-clarification/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: davidyichengwei (https://skillmd.com/u/davidyichengwei)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/davidyichengwei/workflow-requirements-clarification

---


# 需求澄清

## 核心定位

**AI 负责调研代码背景，用户负责提供需求信息。**

### AI 职责划分

**AI 自己调研（读代码）**：
- 现有实现是怎样的
- 代码路径、数据流
- 已有的接口和数据结构
- 技术约束（如使用的框架）
- 相关模块的职责

**向用户询问**：
- 为什么需要这个功能
- 要解决什么问题
- 具体要做哪些功能
- 目标和成功标准
- 非目标（不做什么）
- 性能/兼容性等非功能需求

**规则**：如果信息可以从 codebase 获取，**AI 必须自己调研**，不问用户。

### 苏格拉底式提问

向用户询问需求信息时，采用**苏格拉底式提问**——刨根问底，理解问题本质：

| 技巧 | 说明 | 示例 |
|------|------|------|
| **追问 Why** | 不接受表面答案，追问到问题本质 | 用户："加个缓存" → AI："为什么需要缓存？慢到什么程度？目标是多少？" |
| **指出矛盾** | 发现用户表述中的矛盾时，引导用户澄清 | 用户："要高并发，但不能改接口" → AI："异步化会改变接口语义，这两个目标是否冲突？" |
| **揭示遗漏** | 引导用户思考未考虑的场景 | AI："你考虑过 X 失败的情况吗？" |

### AI 生成内容的前置条件

1. **AI 已完成代码调研**（理解现状，并向用户确认）
2. **AI 已充分追问**（理解问题本质）
3. **加载相关规范**（如 `bp-distributed-systems` 等）

## 触发条件

- 用户描述功能需求但缺乏具体细节
- 用户请求开发新功能
- `spec.md` 不存在或需求章节为空

---

## 对话模式

### AI 角色边界

| AI 应该做 | AI 不应该做 |
|----------|------------|
| 提问，追问 Why | 未经请求就给答案 |
| 指出矛盾或遗漏 | 未追问清楚就生成内容 |
| 质疑不清晰的表述 | 跳过追问直接给建议 |
| **用户请求时**生成内容 | 生成后不询问用户意见 |

### 每轮对话结构

```
1. 说明当前阶段和目标
2. 提出一个开放式问题（让用户思考）
3. 等待用户回答
4. 评估用户回答：
   - 清晰完整 → 复述确认，进入下一问题
   - 模糊 → 追问具体含义
   - 有矛盾 → 指出矛盾
   - 有遗漏 → 引导思考
5. 用户澄清后，再次确认
```

---

## 工作流程

### Step 0: 评估复杂度并创建 spec

| 复杂度 | 信号 | 处理方式 |
|--------|------|----------|
| **简单** | bug fix、配置调整、单点修改 | 不创建 spec，1-2 轮对话后直接进入 code-generation |
| **中等** | 涉及多文件、单模块功能 | 创建 spec |
| **复杂** | 跨模块、新特性、架构变更 | 创建 spec |

**中等及以上**：立即创建目录并复制模板：

```bash
mkdir -p docs/design-docs/<module>/<feature>/
cp skills/workflow-requirements-clarification/reference/spec_template.md \
   docs/design-docs/<module>/<feature>/spec.md
```

路径规则：根据功能所属模块确定。文件名必须是 `spec.md`。

### Step 1: 代码调研（AI 自主完成）

**目标**：理解现有实现，不询问用户

**AI 操作**：
1. 调用 `codebase-researcher` subagent 深度调研相关代码（模块结构、接口、依赖关系、数据流）
2. 识别相关模块、接口、数据结构
3. 生成现状分析摘要

**向用户汇报（必须）**：
```
我先调研了一下相关代码：

**相关模块**：
- [文件路径1]: [职责说明]
- [文件路径2]: [职责说明]

**现有实现**：
[概述当前的实现方式、数据流、关键接口]

**技术约束**：
- [约束1，如使用的框架、协议]
- [约束2，如已有的接口规范]

请确认我的理解是否正确？有遗漏或错误的地方吗？
```

**结束条件**：用户确认理解正确。**必须等用户确认后才能进入 Step 2**。

**实时更新 spec**：用户确认后，更新 spec.md 的 `1.2 现状分析` 和 `1.3 主要使用场景`。

### Step 2: 澄清背景与问题

**目标**：让用户说清楚"要解决什么问题"

**开场白**：
```
请描述一下：**现在遇到了什么问题？这个问题带来了什么影响？**
```

**追问方向**：
- "你说的 X 具体是指什么？"
- "影响范围有多大？有数据吗？"
- "没有这个功能，现在是怎么解决的？"

**结束条件**：用户能清晰回答"要解决什么问题"，AI 复述确认无误。

**实时更新 spec**：确认后，更新 spec.md 的 `1.1 问题描述`。

### Step 3: 明确目标与边界

**目标**：让用户定义"成功标准"和"不做什么"

**开场白**：
```
好的，问题我理解了。

接下来请你想一下：
- **这次的目标是什么？怎么算做完了？**
- **有什么是明确不做的？**
```

**追问方向**：
- "你说'性能要好'，具体是多少？怎么测量？"
- "这几个目标的优先级是什么？"
- "如果时间不够，哪些可以不做？"

**结束条件**：用户给出明确、可衡量的目标和边界。

**实时更新 spec**：确认后，更新 spec.md 的 `2. 目标` 和 `2.1 非目标`。

### Step 4: 明确功能性需求

**目标**：让用户说清楚"具体要做哪些功能来达成目标"

**开场白**：
```
目标明确了。

接下来请你描述一下：**具体需要哪些功能来达成这个目标？**
```

**追问方向**：
- "这个功能的输入是什么？输出是什么？"
- "有哪些操作/场景需要支持？"
- "用户/调用方会怎么使用这个功能？"

**结束条件**：用户给出具体的功能列表，AI 复述确认无误。

**实时更新 spec**：确认后，更新 spec.md 的 `3.1 功能性需求`。

### Step 5: 确认非功能性需求

**目标**：引导用户思考隐藏的约束条件

> **分布式系统场景**：如果需求涉及网络通信、多节点协调、数据一致性、故障恢复，**必须加载 `bp-distributed-systems` Skill**。

**开场白**：
```
最后想请你考虑一下：**有没有隐藏的约束条件？**

比如：性能要求、接口兼容性、升级回滚策略？
```

**非功能性需求 checklist**（AI 根据需求场景判断是否相关，相关则询问，并给出具体例子帮助用户理解）：

| 类别 | 何时询问 | 引导问题 | 具体例子 |
|------|---------|---------|---------|
| 性能 | 涉及热路径、数据处理 | 延迟/吞吐量要求？并发量预估？ | "比如：单次请求延迟 < 10ms？支持 1000 QPS？" |
| 可用性 | 涉及关键链路 | SLA 要求？故障降级方案？ | "比如：节点挂了怎么办？还能继续提供服务吗？" |
| 一致性 | 涉及分布式、事务 | 强一致/最终一致？隔离级别？ | "比如：并发写同一行时谁赢？读能看到正在写的数据吗？多个操作需要原子性吗？跨节点读写一致吗？" |
| 兼容性 | 涉及接口、协议变更 | API 是否需向后兼容？ | "比如：新增字段后，旧客户端解析会报错吗？旧版本写入的数据新版本能读吗？" |
| 升级 | 涉及持久化格式变更 | 滚动升级安全吗？需要数据迁移吗？ | "比如：新旧版本混部时数据互通吗？" |
| 回滚 | 有持久化变更 | 能回滚吗？回滚后数据丢失吗？ | "比如：升级失败回滚到旧版本，新写入的数据还在吗？" |
| 安全 | 涉及权限、敏感数据 | 权限控制？数据脱敏？审计日志？ | "比如：谁能调用这个接口？操作需要记录吗？" |
| 可观测 | 新功能、复杂逻辑 | 需要哪些监控指标？告警阈值？ | "比如：需要监控成功率、延迟分布吗？什么情况告警？" |
| 资源 | 涉及大数据量处理 | 内存/CPU/磁盘限制？ | "比如：单次请求最多用多少内存？" |
| 可扩展 | 涉及数据增长 | 数据量增长预期？水平扩展？ | "比如：数据量翻倍时性能会怎样？" |
| 持久性 | 涉及数据存储 | 允许丢数据吗？持久化策略？ | "比如：断电重启后数据还在吗？" |

**结束条件**：用户确认关键约束，或明确表示"没有其他约束"。

**实时更新 spec**：确认后，更新 spec.md 的 `3.2 非功能性需求`。

### Step 6: 最终确认

**目标**：回顾 spec 前三章节的完整性，确认无遗漏。

**操作**：
1. 读取 spec.md 前三章节内容
2. 向用户展示摘要，确认无需补充或修改
3. 如有修改，更新对应章节内容

**结束语**：
```
spec.md 前三章节已完成：docs/design-docs/<module>/<feature>/spec.md
（已填写：1. 背景、2. 目标、3. 需求）

如果准备好了，说"开始设计"进入 system design 阶段。
```

---

## 强制规则

1. **AI 自主调研代码背景**：现有实现、代码路径等信息 AI 必须自己读代码获取
2. **只问用户需求信息**：为什么做、做什么、不做什么、约束条件
3. **只填前三章节**：spec.md 只填写 1. 背景、2. 目标、3. 需求
4. **正确的文件路径**：`docs/design-docs/<module>/<feature>/spec.md`
5. **禁止生成后续章节**：设计方案由 `workflow-system-design` skill 负责
6. **必须使用 cp 复制模板**：禁止从头创建 spec.md
7. **实时更新 spec**：每个步骤结束后立即更新对应章节，不要等到最后一次性写入

## 反模式

| ❌ 错误做法 | ✅ 正确做法 |
|------------|-----------|
| 问用户"现有实现是怎样的" | AI 自己读代码调研 |
| 从头创建 spec.md | **必须用 `cp` 复制模板** |
| 生成到宿主工具私有目录 | 生成到 `docs/design-docs/` |
| 文件名 `xxx-spec.md` | 文件名必须是 `spec.md` |
| 填写设计方案章节 | 只填前三章节 |
| 一次问多个问题 | 每轮只问一个核心问题 |
| 所有步骤完成后才写 spec | 每步结束后实时更新对应章节 |

## 参考资料

- [完整 spec 模板](reference/spec_template.md)

