在基于Claude Code构建Agent系统时,其内置的交互工具AskUserQuestion提供了独特的用户确认机制,支持并行多问题与单选/多选模式,极大地丰富了智能体的决策路径设计。
AskUserQuestion是Claude Code中一个强大的交互式工具,允许AI在执行过程中向用户发起结构化提问,以获取确认、选择或补充信息。该工具特别适用于需要用户介入的关键决策点,能有效提升Agent智能体的交互质量与任务执行准确性。
核心特性
- 并行提问:支持同时提出1-4个问题,每个问题独立配置。
- 灵活选择模式:每个问题可设置为单选(
multiSelect: false)或多选(multiSelect: true)。
- 界面清晰:每个选项均包含标签(
label)和详细说明(description),通过多标签页(Tab)呈现,直观易懂。
- 预设答案:支持通过
answers参数提供预设答案,实现基于上下文的智能交互。
参数详解
questions 参数
questions是一个数组,用于定义所有提问。每个问题对象结构如下:
questions: Array<{
question: string; // 必需:具体问题内容,必须以问号结尾
header: string; // 必需:问题分类标签,最多12字符
options: Array<{ // 必需:选项数组,必须包含2-4个选项
label: string; // 必需:选项显示名称,建议1-5个词
description: string; // 必需:选项详细说明
}>;
multiSelect: boolean; // 必需:是否允许多选
}>
answers 参数(可选)
answers参数用于预设答案,格式为键值对映射:
answers: {
[questionIndex: string]: string; // questionIndex 对应问题索引,值为选项的 label
}
应用示例
示例1:代码重构决策
当检测到代码重复时,Agent可以询问用户选择何种重构策略。以下配置生成一个单选问题:
{
"questions": [{
"question": "检测到代码重复,您希望如何重构?",
"header": "重构策略",
"options": [
{
"label": "提取公共函数",
"description": "将重复代码提取为独立函数"
},
{
"label": "创建基类",
"description": "设计父类抽象公共行为"
},
{
"label": "使用工具类",
"description": "创建静态工具类处理通用逻辑"
}
],
"multiSelect": false
}]
}

示例2:性能优化方案组合
通过组合多个问题,一次性收集用户对性能瓶颈和缓存策略的偏好,减少交互次数。以下示例包含两个单选问题:
{
"questions": [
{
"question": "API 响应时间过长,优先优化哪个部分?",
"header": "性能瓶颈",
"options": [
{
"label": "数据库查询",
"description": "优化 SQL 和添加索引"
},
{
"label": "网络请求",
"description": "减少 HTTP 调用和数据传输"
},
{
"label": "计算逻辑",
"description": "优化算法和数据处理"
}
],
"multiSelect": false
},
{
"question": "选择缓存策略?",
"header": "缓存方案",
"options": [
{
"label": "Redis 缓存",
"description": "分布式缓存,支持集群"
},
{
"label": "本地缓存",
"description": "应用内缓存,响应最快"
},
{
"label": "多级缓存",
"description": "本地 + 分布式缓存组合"
}
],
"multiSelect": false
}
]
}

在性能优化场景中,合理选择缓存策略至关重要,例如采用Redis缓存可以有效提升分布式系统的数据访问速度。
使用限制
AskUserQuestion工具专为结构化选择设计,存在以下约束:
- 选项固定:用户只能从预定义的2-4个选项中选择,不支持自由文本输入。
- 格式严格:每个选项必须包含
label和description。
- 交互定向:旨在快速收集决策,不适合开放性问题。若需文本输入,通常需预设“其他”选项引导用户后续描述。
该工具的设计为构建高效、用户友好的AI智能体提供了强大的交互基础,尤其适合需要逐步确认或分支决策的自动化流程。