name: ask-questions-if-underspecified description: 在实施前澄清需求。当出现严重疑问时使用。
提问若未明确指定
使用时机
当请求有多个合理解释或关键细节(目标、范围、约束、环境或安全性)不明确时,使用此技能。
不使用时机
当请求已经清晰,或者可以通过快速、低风险的发现阅读回答缺失细节时,不要使用此技能。
目标
询问避免错误工作所需的最小澄清问题集;在必须回答的问题得到解答(或用户明确批准在陈述假设下进行)之前,不要开始实施。
工作流程
1) 决定请求是否未明确指定
如果探索如何执行工作后,以下某些或全部内容不清晰,则将请求视为未明确指定:
- 定义目标(什么应该改变 vs 保持不变)
- 定义“完成”(验收标准、示例、边界情况)
- 定义范围(哪些文件/组件/用户在内/外)
- 定义约束(兼容性、性能、风格、依赖、时间)
- 识别环境(语言/运行时版本、操作系统、构建/测试运行器)
- 澄清安全性/可逆性(数据迁移、推出/回滚、风险)
如果存在多个合理解释,则假设其为未明确指定。
2) 首先询问必须回答的问题(保持简洁)
在第一轮中询问1-5个问题。优先选择能消除整个工作分支的问题。
使问题易于回答:
- 优化可扫描性(简短、编号的问题;避免段落)
- 尽可能提供多项选择选项
- 在适当情况下建议合理默认值(清楚地标记为默认/推荐选择;在列表中加粗推荐选择,或者如果在代码块中呈现选项,在块上方立即放置加粗的“推荐”行,并在块内标记默认值)
- 包括快速路径响应(例如,回复
defaults以接受所有推荐/默认选择) - 在有帮助时包括低摩擦的“不确定”选项(例如,“不确定 - 使用默认”)
- 如果减少摩擦,分离“需要知道”和“最好知道”
- 构建选项,使用户可以用紧凑的决策响应(例如,
1b 2a 3c);用通俗语言重述所选选项以确认
3) 在行动前暂停
直到必须回答的问题得到解答:
- 不要运行命令、编辑文件或产生依赖于未知数的详细计划
- 仅当不承诺方向时,执行明确标记的低风险发现步骤(例如,检查仓库结构、阅读相关配置文件)
如果用户明确要求在没有答案的情况下进行:
- 将您的假设陈述为简短的编号列表
- 请求确认;只有在他们确认或纠正后才进行
4) 确认解释,然后进行
一旦有了答案,用1-3句话重述需求(包括关键约束和成功的样子),然后开始工作。
问题模板
- “在我开始之前,我需要:(1) …, (2) …, (3) … 如果您不关心(2),我将假设 …”
- “这些中哪个应该是?A) … B) … C) … (选择一个)”
- “您会认为什么算‘完成’?例如:…”
- “我必须遵循的任何约束(版本、性能、风格、依赖)?如果没有,我将针对现有项目默认值。”
- 使用编号问题和字母选项以及清晰的回复格式
1) 范围?
a) 最小更改(默认)
b) 重构同时涉及该区域
c) 不确定 - 使用默认
2) 兼容性目标?
a) 当前项目默认值(默认)
b) 还支持旧版本:<指定>
c) 不确定 - 使用默认
回复:defaults(或 1a 2a)
反模式
- 不要问您可以通过快速、低风险的发现阅读回答的问题(例如,配置、现有模式、文档)。
- 如果紧密的多项选择或是/否能更快消除歧义,不要问开放式问题。