跳转至

询问用户

ask_user 允许智能体向人类提出一到三个结构化问题,然后等待回答。它适用于真正属于用户的决策,而不是常规确认,或智能体可以从请求、代码或合理默认值中自行获取的信息。

该工具仅在主会话中可用。子智能体及其他非主要运行不会获得它。

回答问题

你可以在任何受支持的会话界面中回答:

  • 网页版 Control UI 会在输入框正上方停靠一个问题面板。对于多问题提示,面板一次显示一个问题,并通过一个简短的步骤条逐步推进。问题解决后,面板关闭,聊天记录会以紧凑摘要的形式保留完整问题与你的回答。被跳过或已过期的问题也会连同结果保留其措辞。 在待处理问题之间切换时,已选选项和键入的回答都会保留,即使键入的文本与某个选项标签相同。
  • TUI 在 Gateway 模式和本地模式下都会显示问题提示。使用方向键或数字键选择选项,使用 其他… 键入回答,或使用 跳过。多选提示允许你在确认前切换选项;多问题提示一次推进一个问题。按 Esc 可返回输入框而不作回答,然后输入 /question 重新打开提示。
  • Telegram 会将每个选项渲染为适用于单个单选问题的全宽原生按钮。其他… 会切换到 Telegram 的回复输入,而不会结束该问题。
  • Discord、Slack 和 Mattermost 会为单选、单问题提示渲染原生按钮。Mattermost 会在其接受的点按上结束提示;在其他地方结束的问题会保留按钮,直到有人点按某个按钮并被告知该问题已被回答。
  • 对于由活动中的 OpenClaw 运行创建的问题,当你当前权限与创建者权限匹配时,可以在任何频道上使用纯文本回复。回复时使用数字、选项标签或你自己的答案。对于多选问题,请用逗号分隔选项。

来自独立的附加 MCP 客户端的问题不会带有 OpenClaw 运行的创建者绑定。请使用 Control UI、TUI 或原生应用中的问题控件来回答这些问题,而不是通过普通频道消息。

具有 operator.sessions.write 权限的访客可以在他们创建的会话中回答来自其自身授权智能体运行的普通问题。Control UI 会在重新连接后恢复这些待处理问题。访问他人的会话不会暴露他们的问题,也不会使这些问题可被回答。秘密、管理性及无会话问题保持其现有的特权访问要求。回答问题不会授予智能体额外权限。

OpenClaw 始终启用自由文本的 其他 回答。智能体不得在其编写的选项列表中添加 Other 选项。

绝不要用凭据回答 ask_user。当智能体需要 API 密钥时,它使用 secrets 工具,其掩码提示会存储该值,而不会让它进入聊天、对话记录或模型上下文。

平台行为

答案在所有受支持的会话界面上均可用。网页版 Control UI 和 TUI 一次显示一个问题;折叠提示后会恢复输入框,并显示一个细长的待处理问题指示器。TUI 的 /question 命令可重新打开该提示,而普通回复仍然可以回答符合条件的待处理问题。iOS、macOS 和 Android 会显示内联卡片;多个问题会堆叠显示,这是有意为之的触屏友好惯例。TUI 会在聊天中保留一条紧凑的解决通知;其他平台则会保留问题到回答的摘要,且不会定时清除。跳过 在所有地方都可用,并表示拒绝整个提示。

多问题和多选提示在消息通道上会降级为可读文本。Control UI 和 TUI 保留完整的结构化步骤条。TUI 会显示剩余时间、关闭已过期的提示,并在重新连接或切换会话后恢复所选会话的待处理问题。本地模式将问题保留在正在运行的进程中;退出 TUI 后它们不会保留。

异步问题

Codex 异步问题使用 Control UI 输入框上方的同一个面板。它们打开时不会抢占键盘焦点,并且在智能体继续工作时消息框仍可使用。折叠面板后可保持紧凑的未回答问题数量,并让当前问题保持可见。新消息、问题自身已完成的轮次,以及折叠的工作历史都不会关闭该问题或重新打开已最小化的面板。当后续运行成功完成时,较早的提醒会离开停靠栏。重叠运行、评论、中断和失败运行都不会使问题失效。成功的重启恢复也会将较早的提醒移入历史;仅重启不会。

对话记录会将该问题标记为 不再待处理,并提供 回答 按钮以重新打开。重新打开会保留草稿,直到你提交、跳过或后续运行完成。将提醒移入历史不会回答它、授予权限或将底层任务标记为完成。即使插件替换了输入框,问题停靠栏也仍然可用。

使用面板上的请求箭头可在待处理请求之间切换,而不会丢失回答草稿。新的阻塞性问题优先;异步问题仍可通过相同的导航使用。提交异步回答会发送一条普通聊天消息,并使用现有的发件箱和重试控件。跳过会将该请求从停靠栏移除,而不发送回答。对话记录会保留摘要。仅最小化既不会回答问题,也不会跳过问题。

问题摘要会显示你的回答是已排队、正在发送、失败,还是已在保存的对话历史中确认。如果投递失败或重新连接后变得不确定,重试回答 会重试现有的发件箱消息,而不是提交第二个回答。放弃 会移除该排队回答,并在该对话当前打开的窗格中重新打开其保留的草稿。

保存的回复在重新加载后仍保持已确认状态,包括在发件箱中编辑过的回答,或包含引用的问题标题的回答。当这些标题使单个回答产生歧义时,摘要会显示保存的回复文本,而不会将其拆分。

超时且无答案

默认超时时间为 900 秒。timeoutSeconds 会被限制在 30 到 3600 秒范围内。这是最大人工等待时间,受更早的代理运行取消或整体运行超时约束。待处理问题不会延长显式运行预算。

如果问题在收到答案之前过期或被取消,工具将返回 status: "no_answer"。随后代理会基于其最佳判断继续执行。被中止的代理运行会取消其待处理的 Gateway 问题。

Gateway 问题记录包含可选的来源 runId。客户端可以使用它,将 Prompt 及其最终答案摘要与正确的代理轮次关联起来,包括在重新连接后使用 question.list 或 question.get 恢复该问题的情况。

工具模式

{
  questions: Array<{
    id: string; // unique snake_case answer key
    header: string; // short label; truncated to 12 characters
    question: string; // one sentence
    options: Array<{
      label: string;
      description?: string;
    }>; // 2-4 options
    multiSelect?: boolean;
  }>; // 1-3 questions
  timeoutSeconds?: number; // integer; default 900, clamped to 30-3600
}

当 multiSelect: true 时,用户可以选择多个选项。每个问题的答案值都会以数组形式返回。

已回答结果示例:

{
  "status": "answered",
  "answers": {
    "answers": {
      "deploy_target": ["Staging (Recommended)"]
    }
  }
}

外层 answers 是协议的 QuestionAnswers 信封;其内层 answers 映射以 questionId 为键,每个问题对应一个已选值数组。

模型指引

面向模型的契约要求代理:

  • 仅在真正由用户决定的事项上受阻时才提问;
  • 每次调用只问一个问题,除非多个答案必须一起提交,因为单问题提示可以使用原生消息控件;
  • 将所有可选项放入 options,而不要只写在问题文本中;
  • 仅当多个选项可以一次选择时使用 multiSelect;
  • 将推荐选项放在第一位,并在其标签后添加 (Recommended);
  • 省略自行编写的 Other 选项,因为自由文本会自动添加;
  • 在 no_answer 后基于最佳判断继续执行。

代理不应使用 ask_user 来询问是否可以继续,或确认其自身计划。

  • 密钥 — 当答案为密钥时,使用凭据安全路径
  • 控制 UI — 停靠答案面板出现的位置
  • 工具概览 — 其余内置工具界面

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw