内容提要
AskUserQuestion是Claude Code的结构化提问工具,通过预设选项卡片降低用户认知负担,提升决策效率。它严格限定触发条件,仅在无法从请求或代码推断且无合理默认值时使用。技术实现支持1-4个问题、每问2-4选项,自动附加“其它”选项,推荐值置首。与计划模式工具分工明确,形成“澄清-展开-批准”流水线,将AI提问收敛为可预测的交互原语。
延伸解读
设计哲学:约束即效率
AskUserQuestion 的核心并非让 AI 提问,而是通过结构约束将提问收敛为可预测的交互原语。它强制 Claude 将模糊需求拆解为 1-4 个问题、每问 2-4 个选项,并自动附加「其它」作为逃生舱。这种设计将自由文本的认知负担转化为点选操作,同时通过「推荐值置首」和「(推荐)」后缀,让用户快速识别倾向,从而将决策时间从分钟级压缩到秒级。
触发边界:避免过度打扰
工具明确限定仅在无法从请求、代码或合理默认值推断时使用,并列举了不该问的场景,如答案可从代码读出或只有一种明显做法。这体现了「不主动打扰」的设计原则,防止 AI 将不确定性问题随意抛给用户。同时,它强调与计划模式工具的分工:Ask 用于澄清方案分叉,而非询问「方案 OK 吗」,后者应交给 ExitPlanMode,避免重复请求批准。
协作流水线:澄清-展开-批准
AskUserQuestion 与 EnterPlanMode、ExitPlanMode 构成完整决策流水线:先用 Ask 澄清需求或方案选择,再用 EnterPlanMode 展开详细计划,最后用 ExitPlanMode 请求批准。这种时序设计确保用户在每个阶段只面对必要决策,且不会在看不到计划时被询问「是否批准」。文章特别指出,用户只有在 ExitPlanMode 调用后才能看到计划,因此用 Ask 问「方案 OK 吗」是无效的。
Q&A
AskUserQuestion 工具的主要作用是什么?
AskUserQuestion 是 Claude Code 内置的结构化提问工具,它将问题渲染成交互式选择面板,用户通过点击预设选项来回答,而不是输入自由文本。它旨在降低用户认知负担、提供结构化输入、收敛歧义,并自动附加“其它”选项作为逃生舱。
AskUserQuestion 在什么情况下应该使用?
当 Claude 被卡住且决策真正属于用户时使用,具体包括:无法从请求推断、无法从代码推断、没有合理默认值。不应在答案能从代码读出、只有一种明显合理做法、或计划模式中询问“方案 OK 吗”时使用。
AskUserQuestion 的技术实现有哪些关键设计点?
支持一次问 1-4 个问题,每个问题有 2-4 个选项,自动附加“其它”选项,推荐值放在首位并标注“(Recommended)”,返回值以问题文本为 key 映射到选项文本,还有可选的视觉预览字段。
AskUserQuestion 与 EnterPlanMode、ExitPlanMode 如何分工?
AskUserQuestion 用于在计划模式中澄清需求或选择方案,EnterPlanMode 用于展开完整计划,ExitPlanMode 用于请求批准。不应在计划模式中用 Ask 询问“方案 OK 吗”,因为用户看不到计划。
为什么推荐值要放在第一个选项并标注“(Recommended)”?
这是通过约定俗成的位置和后缀实现的,不引入额外字段,保持入参简单,界面渲染无需特殊处理,同时强制 Claude 将推荐意见写入选项文本,用户一眼可见,便于快速采纳。
AskUserQuestion 如何降低用户的认知负担?
它将复杂决策拆分为多个独立卡片,每个卡片聚焦一个决策,用户只需点击选项而非打字,权衡说明直接标注在选项下,推荐值前置,且自动附加“其它”选项,避免用户被选项绑架。
AskUserQuestion 的 prompt 约束有哪些?
包括严格的适用边界、透明化“其它”选项、多选参数语义、推荐值表达形式、与计划模式的时序关系、卡片短标签必填、问题必须以问号结尾。这些约束规范了何时问、怎么问、如何呈现。