Claude CLI AskUserQuestion 工具详解:让 AI 开口问你

0 阅读4分钟

Gemini_Generated_Image_xnf0boxnf0boxnf0.png

在使用 Claude Code 处理复杂任务时,你是否遇到过这样的场景:AI 默默地做了一大堆工作,最终交出的结果却完全不是你想要的?或者,AI 在关键节点做出了一个错误的假设,导致整个方向跑偏?

AskUserQuestion 工具正是为了解决这个问题而存在的。它让 Claude 具备了"开口提问"的能力,在模糊、关键或多选的节点上主动与你确认,而不是自行猜测。


什么是 AskUserQuestion?

AskUserQuestion 是 Claude Code 内置的一个工具(Tool),专门用于在任务执行过程中向用户收集信息或决策

与普通的文字对话不同,AskUserQuestion 会渲染一个结构化的交互组件,提供:

  • 清晰的问题说明
  • 预设的可选答案(2-4 个选项)
  • 可选的 Markdown 预览(适合对比代码、UI 布局等)
  • 多选模式(允许用户选择多个选项)
  • 用户始终可以选择"Other"并输入自定义文本

从用户体验角度看,这远比 AI 在聊天框里输出一段文字问题更加清晰、高效。


核心参数解析

AskUserQuestion 接受如下结构的参数:

{
  "questions": [
    {
      "question": "你希望使用哪种认证方式?",
      "header": "Auth method",
      "multiSelect": false,
      "options": [
        {
          "label": "JWT Token",
          "description": "无状态,适合分布式系统,前端自行管理 token。",
          "markdown": "// JWT 示例\nconst token = jwt.sign({ userId }, SECRET, { expiresIn: '7d' });"
        },
        {
          "label": "Session Cookie",
          "description": "服务端管理状态,适合传统 Web 应用。"
        },
        {
          "label": "OAuth 2.0",
          "description": "支持第三方登录,适合需要集成 GitHub/Google 等场景。"
        }
      ]
    }
  ]
}

关键字段说明

字段类型说明
questionstring完整的问题文本,应以问号结尾
headerstring显示为标签/芯片的简短标题,最多 12 个字符
multiSelectboolean是否允许多选,默认 false
optionsarray2-4 个选项,每项包含 label、description,可选 markdown
options.markdownstring可选的预览内容,支持代码片段、ASCII 图、配置示例

适用场景

Claude 在以下情况下应当使用 AskUserQuestion:

1. 需求模糊,存在多种合理解读

用户说"优化数据库查询"——是加索引?改 ORM 写法?引入缓存?还是拆分查询?

在动手之前,先问清楚,省去反复返工。

2. 存在多个同等合理的技术方案

实现实时通信,可以选 WebSocket、Server-Sent Events 或轮询。

每种方案各有取舍,让用户做决策,而不是 AI 擅自选一个。

3. 即将执行高风险或不可逆操作

即将删除数据库表、强制推送 git、覆盖现有配置文件……

这类操作应当暂停并明确征得用户同意,即使用户之前说过"自动执行"。

4. 偏好问题,没有标准答案

代码风格选 Prettier 还是 ESLint?注释用中文还是英文?

5. 发现了预期之外的状态

发现了不认识的配置文件、未知分支、异常的文件结构——先问再动。


Claude 在什么时候不该使用 AskUserQuestion?

工具有使用边界,滥用反而会让 AI 显得犹豫不决、烦人啰嗦。

  • 任务指令已经非常明确,不存在歧义
  • 问题可以通过读取项目文件、配置、文档自行推断
  • 属于显而易见的单步操作(比如"修复拼写错误")
  • 询问"我的计划可以吗?"——这种确认场景应该使用 ExitPlanMode,而不是 AskUserQuestion

在 Windows 平台上使用 Claude Code

安装 Claude Code

Claude Code 基于 Node.js,在 Windows 上通过 npm 全局安装:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

# 验证安装
claude --version

推荐:在 Windows 上使用 Windows Terminal + PowerShell 7,获得更好的 ANSI 颜色支持和 Unicode 渲染效果。

配置 API Key

# 设置环境变量(当前会话)
$env:ANTHROPIC_API_KEY = "sk-ant-xxxxx"

# 或永久写入用户环境变量
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", "sk-ant-xxxxx", "User")

也可以通过 Claude Code 内置的认证流程:

claude
# 按照提示完成认证

启动并体验 AskUserQuestion

在项目目录下启动 Claude Code:

cd C:\Projects\MyApp
claude

当 Claude 遇到需要你决策的节点时,AskUserQuestion 工具会被自动调用,终端中将渲染出交互式选项界面。


实战示例:AskUserQuestion 改变工作流的场景

场景一:添加用户认证功能

用户:给我的 Express 应用添加用户认证

没有 AskUserQuestion,AI 可能默默实现了一套基于 Session 的认证,而你其实想要 JWT。

有了 AskUserQuestion,Claude 会先问:

? 请选择认证方式
  ① JWT Token(无状态,适合前后端分离)
  ② Session Cookie(有状态,适合传统 Web)
  ③ OAuth 2.0(第三方登录)
  > Other

你的一次点击,节省了可能数小时的返工。


总结

维度要点
本质Claude Code 的内置交互工具,渲染结构化问答 UI
触发时机模糊需求、多方案抉择、高风险操作、用户偏好
Windows 配置Node.js + npm 安装,推荐 Windows Terminal
核心价值在关键节点引入人类判断,减少猜测,降低返工
使用边界不适用于需求明确、可自行推断、单步操作场景