Skip to main content
当一个会话运行已经在流式输出时,若此时有一个普通提示到达,并且队列模式为 steer(默认模式,无需配置),OpenClaw 会尝试将该提示发送到活动运行时。OpenClaw 和原生 Codex app-server harness 在传递细节上的实现方式不同。 本页介绍在 steer 模式下,普通入站消息的队列模式 steering。对于 followupcollect 模式,普通消息会跳过此路径,并等待当前活动运行完成。关于显式的 /steer <message> 命令,请参见 Steer

运行时边界

Steering 不会中断已经在运行的工具调用。OpenClaw 运行时会在工具启动边界以及模型边界进行检查:
  1. 助手请求工具调用。
  2. 在顺序模式下,OpenClaw 会在每次调用开始前立即检查,包括异步解析、验证和执行前钩子之后。
  3. 正在运行的调用完成。如果此后有待处理的 steer,则会跳过尚未开始的顺序尾部调用。
  4. 在并行模式下,OpenClaw 会先准备调用,然后在启动已准备调用前立即检查一次。已经越过该检查点的调用会继续一起执行。
  5. 每个被跳过的调用都会收到成对的工具开始/结束事件,以及一个合成的错误结果(Skipped due to queued user message.),顺序与助手源代码中的顺序一致。
  6. OpenClaw 会在下一次 LLM 调用前追加已准确排出的 steering 消息。
这样既能确保每个请求的工具调用都与结果配对,又能确保已接受的 steering 在任何后续工具启动前对模型可见。 原生 Codex app-server harness 暴露的是 turn/steer,而不是 OpenClaw 运行时内部的 steering 队列。OpenClaw 会在配置的静默窗口内批量收集排队的提示,然后按照所有用户输入的到达顺序,发送一个包含这些输入的 turn/steer 请求。Codex 的上游回合调度器负责其工具调度,并在下一个模型边界消费已接受的 steering;OpenClaw 不会向该运行时添加逐工具抢占机制。 Codex review 和手动压缩回合会拒绝同回合 steering。当运行时无法在 steer 模式下接受 steering 时,OpenClaw 会等待当前运行完成后再开始提示。

工具启动边界

OpenClaw 区分已开始的工作和已请求的工作:
  • 已经在运行的顺序调用会完成。后续调用尚未开始,因此 OpenClaw 会为它们返回合成的跳过结果,并让模型在可见的引导消息下重新考虑。
  • 并行批次具有一个原子启动检查点。在该检查点之前出现的引导消息会抑制所有已准备的调用;在该检查点之后到达的引导消息不会撤回任何调用。
  • 在并行检查点之前已确定的验证或策略结果仍然真实有效。只有尚未开始执行的调用才会收到引导跳过结果。
  • 记录保持仅追加且结构成对:助手工具调用、真实或合成的工具结果,然后是引导用户消息。
停止已经在运行的工作,与重定向未来的工作是不同的意图。当最新消息应中止当前运行而不是对其进行引导时,请使用 /queue interrupt(或 /stop)。

模式

突发示例

如果在代理执行工具调用时有四个用户发送消息:
  • OpenClaw 保留运行时配置的引导排空模式和 FIFO 顺序。逐条处理的消费者会将后续消息留到之后的边界;all 消费者会将排队的 FIFO 批次一起注入。Codex 会将其静默窗口期间收集的消息作为一个批次的 turn/steer 接收。
  • 使用 /queue collect 时,OpenClaw 不会进行引导。它会等待活动运行结束,然后在防抖窗口之后,使用兼容的排队消息创建一个后续回合。
  • 使用 /queue interrupt 时,OpenClaw 会中止活动运行,并启动最新消息,而不是进行引导。

作用范围

引导始终针对当前活动的会话运行。它不会创建新会话、不会更改活动运行的工具策略,也不会按发送者拆分消息。在多用户频道中,传入的提示已经包含发送者和路由上下文,因此下一次模型调用可以看到每条消息的发送者。 当你希望消息默认进入队列而不是引导当前活动运行时,请使用 followupcollect。当最新提示应替换活动运行时,请使用 interrupt

去抖

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

相关内容