跳转至

引导队列

当普通 Prompt 到达时,如果会话运行处于活动状态且队列模式为 steer(默认,无需配置),OpenClaw 会尝试将该 Prompt 发送到活动运行时,包括在工具执行期间。OpenClaw 和原生 Codex app-server 框架以不同方式实现投递细节。

本页介绍 steer 模式下普通入站消息的队列模式转向。在 followup 或 collect 模式下,普通消息会跳过此路径,并等待活动运行结束。对于显式的 /steer <message> 命令,参见 Steer。

较早的后续消息不会禁用后续输入的转向。OpenClaw 会在先前转向尝试结束后,将每个新的转向尝试应用于活动运行。运行时拒绝的消息仍按原始顺序排队;被接受的转向会进入活动轮次。

运行时边界

转向不会中断已经在运行的工具调用。OpenClaw 运行时会在工具启动边界以及模型边界处进行检查:

  1. 助手请求工具调用。
  2. 在顺序模式下,OpenClaw 会在每次调用启动前立即检查,包括在异步解析、验证和预执行钩子之后。
  3. 正在运行的调用结束。如果之后有转向在等待,则未开始的顺序尾部会被跳过。
  4. 在并行模式下,OpenClaw 先准备调用,然后在启动已准备的调用前立即检查一次。已经越过该检查点的调用会一起继续。
  5. 每个被跳过的调用都会收到成对的工具开始/结束事件和一个合成结果(Skipped to process an incoming message.),顺序与助手源顺序一致。该结果会告知模型工具未运行,Control UI 会将其标记为 Skipped。
  6. OpenClaw 会在下一次 LLM 调用前追加精确排空的转向消息。

这确保每个请求的工具调用都与一个结果配对,同时保证被接受的转向在任何后续工具启动前对模型可见。

内部更新(包括子代理完成报告)也使用此转向边界。这些更新可以从聊天转录中隐藏,并且不会出现在用户消息队列中。因此,被跳过的工具不一定意味着有用户消息在等待;代理会先处理传入的更新,再决定接下来调用哪些工具。

在内置运行时中,每个被转向的用户输入都会按顺序获得自己的已投递答案。较晚的答案不会替换较早输入已完成的答案,即使转向跳过了其待处理工具。

被转向的频道回复会将该消息的引用或转发上下文带入模型输入。引用内容仍属于会话数据;命令和对待处理问题的回答使用字面传入文本。纯文本转录条目也会保留字面输入。

原生 Codex app-server 框架暴露 turn/steer,而不是 OpenClaw 运行时的内部转向队列。OpenClaw 会为配置的静默窗口批量处理排队 Prompt,然后发送单个 turn/steer 请求,其中包含按到达顺序收集的所有用户输入。Codex 的上游轮次调度器负责其工具调度,并在模型边界处排空待处理输入;OpenClaw 不会为该运行时添加逐工具抢占。转录提交确认持久化,而不是确认后续模型请求已读取该输入。

Codex 审查和手动压缩轮次会拒绝同轮转向。当运行时无法在 steer 模式下接受转向时,OpenClaw 会等待活动运行结束后再启动该 Prompt。

在没有原生钩子准入的 Codex 安装中,当原生子代理生成可用时,其他人的消息会作为后续消息排队,而不是转向活动轮次。如果线程策略已禁用原生生成(包括 ChatGPT Token 共享和仅报告委派),其他人仍可以转向正在运行的轮次。

一旦 OpenClaw 轮次结束或已移交,新 Prompt 会等待下一轮次,即使清理仍在运行。当前轮次内的重试和压缩仍可以接收转向。当模型请求失败而转向消息仍在等待时,该消息不会接管轮次:OpenClaw 会为原始消息重试或回退,转向消息随后作为自己的轮次运行。

工具启动边界

OpenClaw 区分已启动的工作和已请求的工作:

  • 已经在运行的顺序调用会完成。后续调用尚未启动,因此 OpenClaw 会为它们返回合成的跳过结果,并让模型在转向可见的情况下重新考虑。
  • 并行批次有一个原子启动检查点。在其之前存在的转向会抑制所有已准备的调用;在其之后到达的转向不会召回其中任何一个。
  • 在并行检查点之前已确定的验证或策略结果仍保持真实。只有未启动的可执行调用才会收到转向跳过结果。
  • 转录保持仅追加且结构上配对:助手工具调用、真实或合成工具结果,然后是转向用户消息。

因转向而被跳过的工具不会触发失败警告。即使后续调用被跳过,真正的工具失败仍可报告。

停止已在运行的工作与重定向未来工作是不同的意图。当最新消息应中止活动运行而不是转向它时,使用 /queue interrupt(或 /stop)。

模式

模式 活动运行行为 后续行为
steer 在可以时将该 Prompt 转向到活动运行时。 如果转向不可用,则等待活动运行结束。
followup 不转向。 在活动运行结束后稍后运行排队消息。
模式 活动运行行为 后续行为
collect 不转向。 在防抖窗口后,将兼容的排队消息合并为一个后续回合。
interrupt 中止活动运行,而不是转向它。 中止后启动最新消息。

突发示例

如果四个用户在代理执行工具调用时发送消息:

  • OpenClaw 保留运行时配置的转向排空模式和 FIFO 顺序。逐个消费者会将后续消息保留到后续边界;all 消费者会一起注入排队的 FIFO 批次。Codex 会将其静默窗口期间收集的消息作为一个批量 turn/steer 接收。
  • 使用 /queue collect 时,OpenClaw 不转向。它等待活动运行结束,然后在防抖窗口结束后使用兼容的排队消息创建一个后续回合。
  • 使用 /queue interrupt 时,OpenClaw 中止活动运行并启动最新消息,而不是转向。

范围

转向始终针对当前活动会话运行。它不会创建新会话、更改活动运行的工具策略,或按发送者拆分消息。在多用户频道中,传入提示已包含发送者和路由上下文,因此下一次模型调用可以看到每条消息由谁发送。

通过 agent RPC 启动的可见用户回合也可以接收兼容的转向。带有可选回复的直接后台回合会将新的人类消息排队,供一个后续回合提供所需答案。

具有相同权限的不同已登录用户可以相互转向对方的活动回合,包括从不同浏览器或在重新连接后。该回合保留其原始所有者的权限、工具绑定和审批目标。个人工具(screen 和 theme)代表一个指定人员操作。当多个人转向了该回合时,代理必须将该人员已验证的 requester_profile.id 作为 user 传递,以选择更改谁的视图或外观,如果不确定则询问。每条经过身份验证的 Control UI 消息都包含其请求者的已验证个人资料 id,位于代理的用户角色对话上下文中。会话工具和 sessions_spawn 在多人转向该回合时,也使用请求者的已验证 requester_profile.id 作为 user。会话访问和派生子权限使用该人员的权限。被转向的回合,与会话中的后续回合一样,使用会话所选的模型账户。在多人回合中,未选择的会话调用仅可使用所有者的权限用于该回合自身的会话;其他目标和全会话发现需要使用请求者的 requester_profile.id 作为 user 的会话工具。没有 user 选择器的个人指令和其他个人设置无法从多人转向的回合中读取或更改。该人员应使用新的 Control UI 消息在自己的回合中询问。对于混合人员回合中的 Crabbox 打开并显示请求,创建不带 presentation 的环境,然后使用 screen 配合 desktop_show 或 portal_show、其 environmentId 以及请求者的 requester_profile.id 作为 user。不同权限(角色范围、会话访问上限、沙箱要求、允许的代理、模型访问、访问授权或工具策略)会将消息作为后续项排队;对执行策略、工作区或绑定工具的更改也可能需要后续项。

自动凭据轮换和模型回退也会保留活动回合。在所选模型保持不变、回退仍被允许且当前权限匹配时,新输入可以转向该回合。选择或锁定模型、固定不同账户或更改工具权限可能需要后续回合。对待定问题的回答仍会发送给问题的原始所有者。

个人 USER.md 上下文遵循会话分配的人类所有者,否则遵循其经过身份验证的人类创建者。具有相同权限的另一位参与者可以转向而不切换该个人上下文,且收集的消息保持相同的会话选择。重新分配在下一个新回合生效;它不会替换正在运行的回合的个人指令。个人上下文选择不会授予工具权限或更改审批目标。

已接受的跨会话转向在发送回合结束后保留所选发送者的源权限。访问撤销仍可在输入提交其转录之前阻止该输入。

可见消息或发送确认并不意味着活动运行时已消费它。当已接受的消息正在等待工作器设置或工作区同步时,Control UI 会显示特定通知。等待后续回合的消息会显示在编辑器上方的队列中,包括当 Gateway 将一条无法转向的消息排队时。它们会在重新连接期间一直保留在那里,直到被消费或取消,而不会再次发送。

当你希望消息默认排队而不是转向活动运行时,使用 followup 或 collect。当最新提示应替换活动运行时,使用 interrupt。

取消待处理的转向

经过授权的 Gateway 客户端可以在投递开始前,使用 chat.abort({ sessionKey, runId }) 撤回一条仍在 OpenClaw 运行时转向队列中等待的消息。使用该消息的 chat.send 返回的 runId。这会撤回该消息,而不会停止活动运行或将其作为后续项重试。

一旦投递开始,取消无法保证撤回或撤销已完成的工作。如果无法确认投递,现有的转向安全措施可以停止活动运行,以避免重放消费状态不确定的输入。

防抖

内置队列防抖适用于已排队的 followup 和 collect 投递。在原生 Codex harness 的 steer 模式下,它还会在发送批量 turn/steer 之前设置静默窗口。OpenClaw 主动转向不使用防抖计时器;在工具启动和模型边界处,它会按照运行时配置的转向排空模式以 FIFO 方式排空。

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