若定义不明确,请提问。

ask-questions-if-underspecified
分类通用
作者Agentic Awesome Skills 社区
许可MIT
评分4.60/5
使用10.7K

需求不足时询问

使用场景

当请求存在多种可能的解释,或关键细节(目标、范围、约束、环境或安全性)不明确时,使用此技能。

不适用场景

当请求已经很明确,或者可以通过快速、低风险的探索性阅读来解答缺失细节时,不要使用此技能。

目标

询问最少数量的澄清问题以避免无效工作;在必须回答的问题得到解答之前(或用户明确同意基于既定假设继续执行之前),不要开始实施。

工作流

1) 判断请求是否定义不足

如果在探索如何执行工作后,以下一项或多项不明确,则视为定义不足:
  • 定义目标(什么应该改变 vs 什么保持不变)
  • 定义“完成”(验收标准、示例、边缘情况)
  • 定义范围(哪些文件/组件/用户在范围内/范围外)
  • 定义约束(兼容性、性能、风格、依赖、时间)
  • 确认环境(语言/运行时版本、操作系统、构建/测试运行器)
  • 明确安全性/可逆性(数据迁移、发布/回滚、风险)

如果存在多种合理的解释,请将其视为定义不足。

2) 优先询问必须回答的问题(保持精简)

第一轮询问控制在 1-5 个问题。优先选择能排除整个工作分支的问题。

使问题易于回答:

  • 优化可扫描性(简短的编号问题;避免段落)

  • 尽可能提供多选题

  • 在适当的时候建议合理的默认值(清晰地标记为默认/推荐选项;在列表中将推荐选项加粗,或者如果在代码块中提供选项,在代码块上方紧跟一行加粗的“推荐”,并在代码块内部标记默认值)

  • 提供快速响应路径(例如:回复 defaults 以接受所有推荐/默认选项)

  • 在有帮助时提供低摩擦的“不确定”选项(例如:“不确定 - 使用默认值”)

  • 如果能降低沟通成本,将“必须知道”与“最好知道”分开

  • 组织选项以便用户可以用紧凑的方式回答(例如:1b 2a 3c);随后用自然语言复述所选选项以确认

3) 在行动前暂停

在获得必须的答案之前:
  • 不要运行命令、编辑文件或制定依赖于未知因素的详细计划
  • 仅在不决定最终方向的前提下,执行标记明确且低风险的探索步骤(例如:检查仓库结构、阅读相关配置文件)

如果用户明确要求在没有答案的情况下继续:

  • 将你的假设列为一个简短的编号列表

  • 请求确认;仅在用户确认或纠正后才继续执行

4) 确认理解,然后执行

获得答案后,用 1-3 句话复述需求(包括关键约束和成功标准),然后开始工作。

问题模板

  • “在开始之前,我需要确认:(1) ...,(2) ...,(3) ...。如果您不在意 (2),我将假设 ...”
  • “应该是以下哪一种?A) ... B) ... C) ... (请选择其一)”
  • “您认为什么样的状态算作‘完成’?例如:...”
  • “是否有我必须遵守的约束(版本、性能、风格、依赖)?如果没有,我将采用现有项目的默认设置。”
  • 使用编号问题配合字母选项,并提供清晰的回复格式
text
1) 范围?
a) 最小化更改(默认)
b) 在涉及该区域时进行重构
c) 不确定 - 使用默认值
2) 兼容性目标?
a) 当前项目默认值(默认)
b) 同时支持旧版本:<请指定>
c) 不确定 - 使用默认值

请回复:defaults(或 1a 2a)

反模式

  • 不要询问可以通过快速、低风险的探索性阅读(如配置、现有模式、文档)即可回答的问题。
  • 如果紧凑的选择题或“是/否”问题能更快消除歧义,请不要询问开放式问题。

局限性

  • 仅在任务明确符合上述范围时使用此技能。
  • 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
  • 如果缺少必要的输入、权限、安全边界或验收标准,请停止并请求澄清。