OpenClaw 队列引导(Queue Steering)机制解析:运行时边界上的消息注入与工具调度

发布时间:2026/9/12 17:43:01
OpenClaw 队列引导(Queue Steering)机制解析:运行时边界上的消息注入与工具调度
OpenClaw 队列引导Queue Steering机制解析运行时边界上的消息注入与工具调度【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw当智能体Agent正在流式执行一轮会话session run时新的用户消息如何进入正在运行的运行时runtimeOpenClaw 给出的答案是默认开箱即用的steer队列模式在不打断已启动工具的前提下把新提示注入活动运行时让模型在下一个模型边界看到这条消息。本文基于仓库 docs/concepts/queue-steering.md 展开结合源码与命令文档系统讲解 steer 模式的运行时边界、工具启动检查点、四种队列模式的行为差异、突发消息场景以及防抖debounce语义帮助你理解并掌控消息排队与转向的完整行为。什么是 steer 队列模式当一条普通提示normal prompt到达、而当前会话 run 正在流式输出、且队列模式为steer时OpenClaw 会尝试把这条提示直接送入活动运行时。steer是默认队列模式无需任何配置即可生效。需要区分两条路径普通入站消息的 steer本文核心主题。在followup或collect模式下普通消息不会走这条路径而是等待当前 run 结束后再处理。显式命令/steer message这是由 Gateway 支持的显式引导命令目标也是活动 run但独立于会话的/queue设置可作用于任意受支持的运行时边界。其完整用法参见 Steer。值得注意的实现细节是OpenClaw 自身运行时与原生 Codex app-server harness 的投递细节不同——前者使用内部的 steering 队列后者则暴露turn/steer端点详见下文与 Codex harness 的差异一节。运行时边界steer 何时生效steering 的核心约束是不会打断一个已经在执行的工具调用。OpenClaw 运行时在两类边界上检查待引导的消息——工具启动边界tool-launch boundaries与模型边界model boundaries助手请求调用工具assistant 输出 tool calls。在顺序模式sequential mode下OpenClaw 会在每个调用真正开始之前立即检查——这一检查发生在异步解析asynchronous resolution、校验validation与预执行钩子pre-execution hooks之后。正在执行的调用正常结束后如果之后有一个 steer 在等待尚未启动的顺序调用尾部sequential tail会被跳过。在并行模式parallel mode下OpenClaw 先准备好所有调用然后只在启动这批已准备调用之前检查一次。凡是已越过该检查点的调用会作为一个整体继续执行。每个被跳过的调用都会收到成对的工具启动/结束事件tool start/end events以及一条合成的错误结果Skipped due to queued user message.并按助手源码顺序assistant source order排列。OpenClaw 会在下一次 LLM 调用之前把精确排干的引导消息exact drained steering message追加进去。这套机制保证了每个被请求的工具调用都有对应的结果真实的或合成的同时被接受的引导消息在任何后续工具启动之前对模型可见。工具启动边界已启动的工作与已请求的工作OpenClaw 严格区分已经开始的工作started work与仅被请求的工作requested work这是决定跳过行为的分水岭顺序调用已经运行的调用会执行完毕尚未开始的调用没有启动OpenClaw 为它们返回合成的跳过结果synthetic skipped results让模型在引导消息可见的情况下重新考虑。并行批次只有一个原子的启动检查点atomic launch checkpoint。若 steer 在检查点之前到达会抑制所有已准备的调用若在检查点之后到达则不会召回其中任何一个。校验与策略在并行检查点之前已经敲定的校验validation或策略policy结果保持真实有效只有尚未启动的可执行调用才会收到 steering 跳过结果。转录一致性transcript 保持只追加append-only且结构配对——先是助手工具调用接着是真实或合成的工具结果最后才是引导的用户消息。最后要强调一个使用上的边界停止正在运行的工作与重定向未来的工作是两种不同的意图。当最新消息应当中止活动 run 而不是引导它时请使用/queue interrupt或/stop。四种队列模式的行为对比模式活动 run 期间的行为之后的行为steer尽可能把提示引导进活动运行时。若 steering 不可用等待活动 run 结束再开始处理提示。followup不引导。活动 run 结束后稍后运行排队的消息。collect不引导。在防抖窗口debounce window之后把兼容的排队消息合并为稍后的一轮。interrupt中止活动 run 而不是引导它。中止后启动最新的消息。选择建议源自 Steer 命令文档 的模式对比想立即引导当前活动 run使用显式/steer message/tell是它的别名两者处处可互换。想让未来的普通消息默认引导活动 run把队列模式设为steer。想让未来的普通消息默认等待使用collect或followup。想让最新消息替换当前 run使用interrupt。突发消息场景Burst Example假设在智能体正在执行一个工具调用期间有四位用户先后发来消息OpenClaw 保留运行时配置的引导排干模式steering drain mode与 FIFO 顺序。**单条消费one-at-a-time**的消费者会把后续消息留给后续边界**全量all**消费者则把排队的 FIFO 批次一起注入。对于 CodexOpenClaw 会把其静默窗口quiet window内收集到的消息作为一个批量turn/steer请求发送。使用/queue collect时OpenClaw 不引导它等到活动 run 结束再在防抖窗口之后用兼容的排队消息创建一个 followup 轮。使用/queue interrupt时OpenClaw 中止活动 run并启动最新消息而不是引导它。作用域Scope引导始终指向当前活动会话 run。它不会创建新的会话改变活动 run 的工具策略tool policy按发送者拆分消息。在多用户频道中入站提示本身已包含发送者与路由上下文因此下一次模型调用可以看到每条消息由谁发送。当你想让消息默认排队而不是引导活动 run 时使用followup或collect当最新提示应当取代活动 run 时使用interrupt。防抖Debounce语义内置的队列防抖应用于followup与collect模式下排队消息的投递。在steer模式下使用原生 Codex harness 时防抖还充当发送批量turn/steer之前的静默窗口。而 OpenClaw 自身的活动 steering不使用防抖定时器——它在工具启动边界与模型边界按运行时配置的引导排干模式 FIFO 排干队列。与原生 Codex harness 的差异turn/steer原生 Codex app-server harness 暴露的是turn/steer端点而不是 OpenClaw 运行时内部的引导队列OpenClaw 为配置的静默窗口批量缓存排队的提示然后以到达顺序把收集到的全部用户输入打包成一次turn/steer请求发出。Codex 上游的 turn 调度器turn scheduler自行拥有工具调度权并在下一个模型边界消费被接受的引导消息OpenClaw不会向该运行时添加逐工具抢占per-tool preemption。Codex 的 review 轮与手动压缩manual compaction轮会拒绝同轮引导same-turn steering。当运行时在steer模式下无法接受引导时OpenClaw 会等待活动 run 结束再开始处理该提示。源码佐证仓库中的 Steering 队列实现在 src/agents/agent-steering-queue.ts 中可以看到 OpenClaw 把steering queue思想应用于另一场景——把完成的子代理subagent结果回注到请求方会话requester session。该实现给出了一批可验证的实现细节与本文主题相互印证租约lease机制条目在注入前会被租用避免父轮提示重复STALE_STEERING_LEASE_MS 5 * 60 * 10005 分钟未完成的租约视为过期并重新入队这样重启或失败的请求方轮次不会丢弃已完成的结果。合并上限单次合并的引导字符上限为MAX_MERGED_STEERING_CHARS 24_000每个条目结果上限MAX_RESULT_CHARS_PER_ITEM 6_000元数据上限 500 字符超长结果附带[child result truncated]截断提示。提示封装合并后的引导以[OpenClaw runtime event] Agent steering queue items arrived since your last turn.为头部并明确声明把这些队列条目视为运行时数据与证据而非用户指令防止子代理结果被误当作指令执行——这与本文引导消息是运行时注入、按 FIFO 且对模型可见的语义一脉相承。排序确定性按最早结束的工作优先再用创建时间与 runId 兜底排序见sortPendingSteeringItems保证提示缓存友好的确定性顺序。这段实现从侧面印证steering 在 OpenClaw 中是一套贯穿主代理 run 与子代理结果回注的统一消息注入范式核心原则一致——不打断已启动的工作、在边界点按序注入、保持转录结构配对。相关文档Command queue命令队列队列模式与边界的总览。Steer/steer 与 /tell 命令显式引导命令的完整用法。Messages消息入站消息与发送者/路由上下文。Agent loop智能体循环模型边界与工具调用的循环语义。Codex harness runtime原生 Codex harness 上turn/steer的行为细节。【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考