Skip to content

OpenClaw 的 steer 队列模式会让新消息尝试转向进入当前正在运行的会话,但在工具调用执行期间不会中断。转向时机取决于运行时实现:Pi 在模型边界(每次 LLM 调用前)批量排空转向消息;Codex 则通过 turn/steer 在静默窗口后一次性发送所有收集到的用户输入。若运行时无法接受转向,消息会等待当前运行结束后才被处理。默认模式就是 steer,无需额外配置。

OpenClaw Steering 队列:steer/followup/collect/interrupt 区别与配置

当会话运行正在流式输出时,如果又收到一条普通提示消息,OpenClaw 在队列模式为 steer 时会默认尝试将该消息送入当前正在运行的会话。该默认行为不需要任何配置条目或队列指令。Pi 和原生 Codex 应用服务器(app-server)在实现投递细节上有所不同。

运行时边界(Runtime Boundary)

模式 steer 的转向不会中断正在执行的工具调用。Pi 在模型边界检查排队中的转向消息:

  1. 助手请求工具调用。
  2. Pi 执行当前助手消息中的工具调用批次。
  3. Pi 发出回合结束事件(turn end event)。
  4. Pi 排空排队中的转向消息。
  5. Pi 将这些消息作为用户消息追加到下一次 LLM 调用之前。

这样可以确保工具结果始终与请求它们的助手消息配对,然后让下一次模型调用看到最新的用户输入。

原生 Codex 应用服务器使用 turn/steer 端点代替 Pi 的内部转向队列。OpenClaw 会将排队中的提示在配置的静默窗口(quiet window)内分批,然后按到达顺序发送一个包含所有收集到的用户输入的单一 turn/steer 请求。

Codex review 模式和 manual compaction 会拒绝同回合转向(same-turn steering)。当运行时在 steer 模式下无法接受转向时,OpenClaw 会等待当前运行结束,再启动提示。

本页面介绍模式为 steer 时普通入站消息的队列转向行为。如果模式是 followupcollect,普通消息不会进入此转向路径;它们会等待当前运行结束。如果有明确的 /steer <message> 命令,请参见 Steer

四种队列模式对比

模式活跃运行中的行为后续行为
steer尽可能将提示转向到当前活跃运行时。如果转向不可用,则等待当前运行结束后再处理。
followup不转向。当前运行结束后,以后续回合(followup turn)执行排队消息。
collect不转向。当前运行结束后,在防抖窗口(debounce window)内合并兼容的排队消息,合并为一个后续回合。
interrupt不转向,而是中止当前活跃运行。中止后立即启动最新的消息。

突发消息示例

假设智能体正在执行一个工具调用时,有四名用户同时发送了消息:

  • 默认行为(steer:当前运行会在下一次模型决策前,按到达顺序收到全部四条消息。Pi 会在下一个模型边界排空它们;Codex 会作为一个批量的 turn/steer 接收。
  • /queue collect:OpenClaw 不转向。它会等待当前运行结束,然后在防抖窗口之后,用兼容的排队消息创建一个后续回合。
  • /queue interrupt:OpenClaw 中止当前运行,并立即启动最新收到的消息,而不是进行转向。

作用范围

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

当你希望消息默认排队而不转向当前运行时,请使用 followupcollect。当你希望最新提示替换当前运行时,请使用 interrupt

防抖(Debounce)

messages.queue.debounceMs 配置项适用于跟随后续回合(followup)和收集(collect)模式的消息投递。在 steer 模式下使用原生 Codex 服务器时,该配置也会设置发送批量 turn/steer 前的静默窗口。对于 Pi,活跃转向本身不使用防抖计时器,因为 Pi 会自然地批量收集消息直到下一个模型边界。

相关文档

常见问题

steer 模式会不会中断正在执行的工具调用?

不会。Steer 会在工具调用结束后、下一次 LLM 调用之前才送入转向消息,因此工具结果始终和请求它们的助手消息保持配对。

followup、collect 和 interrupt 模式有什么区别?

  • followup:当前运行结束后以独立后续回合执行排队消息。
  • collect:当前运行结束后,在防抖窗口内合并兼容消息为一个后续回合。
  • interrupt:直接中止当前运行并立即启动最新消息,不转向也不等待。

如何更改会话的默认队列模式?

可以通过 /queue 命令(例如 /queue collect)临时切换模式,也可以在配置中设置工作区的默认队列模式。防抖时间通过 messages.queue.debounceMs 配置。