你有没有遇到过这样的情况:发出一个任务指令后,AI 开始执行,但中途你意识到方向跑偏了——或者你想追加一个约束、修正一个细节、让它停下来重新聚焦。如果只能等它把当前这轮跑完再发下一条指令,效率会大打折扣。

OpenClaw 为此提供了两个专用命令:/steer/redirect。它们让你可以在任务运行中直接注入新指令,而不必打断整个工作流或从头重来。本文将带你完整理解这两个命令的工作原理、使用场景,以及背后的队列模式体系。更多资源请访问 OpenClaw 中文版官网

一、问题背景:AI 在执行中,你该怎么介入?

OpenClaw 的 AI 智能体在处理任务时,以”轮次(Turn)”为单位串行执行。每一轮从收到消息开始,经过思考、调用工具、生成回复,到发出最终答复结束。这期间智能体处于”运行中(Active Run)”状态。

在这个状态下,如果你发来新消息,OpenClaw 必须决定怎么处理:是立即打断、等当前任务结束、还是以某种方式注入?不同的选择有截然不同的后果,这就是队列模式(Queue Mode)系统存在的原因。

二、五种队列模式:理解调控的底层逻辑

在讲 /steer/redirect 之前,先理解 OpenClaw 的消息队列体系,因为这是这两个命令的工作基础。

模式 行为 适用场景
collect(默认) 将运行期间收到的所有消息合并为一条,在当前轮次结束后作为一个整合的 followup 轮次处理 正常对话,不需要打断 AI 执行
steer 在当前轮次运行中立即注入新消息,在下一个工具调用边界处取消待执行工具,转向新指令 需要实时纠正方向,但不想完全重来
followup 将消息排入队列,等当前轮次结束后作为独立的新轮次处理(不合并) 需要保持每条消息独立处理
steer-backlog 立即 steer + 同时保留为 followup 轮次 既要实时介入,又要让 AI 在完成当前转向后继续处理原始请求
interrupt(旧版) 立即中止当前运行,用最新消息重新开始 已过时,建议用 steer 替代

你可以通过 /queue 命令查看或更改当前会话的队列模式:

# 查看当前队列设置
/queue

# 切换到 steer 模式(本次会话持久生效)
/queue steer

# 切换回默认的 collect 模式
/queue collect

# 设置带选项的 collect 模式
/queue collect debounce:2s cap:25 drop:summarize

三、/steer:在运行中实时注入新方向

基础用法

/steer 有两种形态:

形态一:针对主会话的 steer(通过队列模式实现)

当会话的队列模式设置为 steer 时,你发送的任何普通消息都会被当作 steer 处理——无需特殊前缀。这是最自然的使用方式:

# 先切换到 steer 模式
/queue steer

# 之后发送的消息,在 AI 运行中时会自动成为 steer
等一下,先不要写代码,先列出实现思路再说

形态二:针对子智能体的 /steer 命令

/steer <id|#> <message>

这里的 <id|#> 是子智能体的 ID 或编号(用 /subagents list 查看),<message> 是你要注入的新指令:

# 查看当前运行的子智能体
/subagents list

# 输出示例:
# #1 [running] code-review-agent - 正在分析 PR #42...
# #2 [running] web-scraper - 正在抓取第 3 页...

# 对 #1 子智能体发出 steer
/steer 1 别分析样式问题了,只关注安全漏洞和性能瓶颈

# 对 #2 子智能体发出 steer
/steer 2 改抓这个 URL:https://example.com/new-page

/steer 的工作机制

理解 steer 的关键是”在下一个工具调用边界处注入“这一设计:

  • steer 不会立即中断正在进行的工具调用(比如 AI 已经在执行一个 shell 命令)
  • 当前工具调用完成后,在准备发起下一个工具调用之前,steer 消息被注入到上下文中
  • 待执行的工具调用队列被清空,AI 重新根据原始任务 + steer 指令来决定下一步行动
  • 如果此时 AI 正在压缩上下文(compact),steer 会被拒绝,自动降级为 followup

这意味着 steer 是一种”柔性介入“:不强制中断,而是在安全的边界点注入新方向,避免工具调用被暴力截断造成的状态混乱。

steer 的重要限制

steer 不是”撤销”。如果 AI 已经通过流式输出(block streaming)向频道发出了消息,那些内容无法被收回。steer 只影响后续的推理和行动,不会改变已发出的内容。

实战场景:代码审查跑偏了

用户:帮我审查 src/ 目录下所有文件的代码质量

AI:[开始运行,正在分析 main.py...]
    [发现 main.py 有 23 个样式问题...]
    [开始分析 utils.py...]

---此时用户发现 AI 在花大量时间分析样式,想纠正方向---

用户:/steer 只看安全和性能,样式问题不用管

AI:[在下一个工具边界处收到 steer]
    [重新聚焦,跳过样式检查]
    [开始针对 SQL 注入、内存泄漏等安全问题分析...]

四、/redirect:子智能体的方向重定向

/redirect 是针对 ACP(Agent Control Protocol)会话的专用控制命令,用于在子智能体运行期间改变其执行路径。

/acp steer <session> <message>    # ACP 会话级别的 steer
/steer <id|#> <message>           # 子智能体级别的 steer/redirect

从 v2026.3.31 起,/steer/redirect 都已集成到控制面板的聊天命令面板(Chat Command Palette)中,支持可视化操作,并显示 active-run 状态下 /steer 的 pending 状态。

/redirect 与 /steer 的区别

维度 /steer /redirect
作用对象 主会话 / 子智能体 ACP 会话 / 子智能体运行路径
介入时机 下一个工具调用边界 当前运行,可触发更强的路径转向
是否重启运行 不重启,注入到当前运行流 在无法就地注入时,可中止当前工作并用新消息重启
适用场景 微调方向(加约束、改重点) 根本性方向改变(换任务目标)

五、/btw:不打断主任务的侧边提问

OpenClaw 还提供了一个与 steer 理念相关但场景不同的命令:/btw(By The Way,顺带问一下)。

/btw 你现在执行到哪一步了?预计还要多久?

/btw 的特点是:它是一个关于当前会话的临时侧问,不会注入到主任务的执行流中,AI 会给出一个即时的状态说明,然后主任务继续按原计划执行,完全不受影响。

命令 是否影响主任务执行 是否注入上下文 适用场景
/steer ✅ 影响(改变方向) ✅ 注入 纠偏、加约束、改重点
/btw ❌ 不影响 ❌ 不注入 查询状态、确认进度、提问
/stop / /kill ✅ 强制中止 完全停止任务

六、队列配置:全局与按渠道的精细控制

队列模式可以在配置文件中全局设置,也可以按渠道独立配置:

{
  "messages": {
    "queue": {
      "mode": "collect",          // 全局默认队列模式
      "debounceMs": 1000,         // 等待 1 秒静默再触发 followup
      "cap": 20,                  // 最多积压 20 条消息
      "drop": "summarize",        // 超出上限时:生成摘要而非直接丢弃
      "byChannel": {
        "discord": "steer",       // Discord 默认使用 steer 模式
        "telegram": "collect",    // Telegram 默认使用 collect 模式
        "whatsapp": "followup"    // WhatsApp 默认使用 followup 模式
      }
    }
  }
}

drop 策略说明

  • drop: "old":超出 cap 时丢弃最早的消息
  • drop: "new":超出 cap 时丢弃最新的消息
  • drop: "summarize":超出 cap 时将被丢弃的消息生成一条摘要,注入为合成的 followup 提示词

七、实战组合:五个典型使用模式

模式一:长任务实时纠偏(steer 模式 + /steer)

# 切换到 steer 模式,准备随时介入
/queue steer

# 发出长任务
分析我们 Q1 的所有客户反馈邮件,生成问题分类报告

# 执行中发现 AI 在处理一些不相关的内部转发邮件
---等一下,只看真实客户发的邮件,内部转发的忽略

# AI 在下一个工具边界处调整范围,继续执行

模式二:保留原任务的同时注入补充(steer-backlog)

/queue steer-backlog

# 发出主任务
帮我写一份技术方案文档,覆盖后端架构和数据库设计

# 执行中想追加要求,但又不想完全打断
---同时,文档里要加一个安全审计章节

# AI 会立即收到新要求(steer),并在完成当前转向后
# 还会回来处理原始请求(backlog)

模式三:多子智能体独立调控

# 同时有两个子智能体在跑
/subagents list
# #1 [running] research-agent - 正在搜索竞品信息
# #2 [running] writer-agent   - 正在起草介绍段落

# 对 research-agent 添加约束
/steer 1 把搜索范围限制在 2025 年后发布的内容

# 对 writer-agent 改变重点
/steer 2 先写优势对比,不要先写背景介绍

# 两个调控互相独立,各自在对应子智能体的边界处生效

模式四:steer + /btw 组合监控

# 发出耗时任务
批量处理 workspace/reports/ 下的 50 份文档,提取关键数据

# 想了解进度,但不想打断
/btw 处理到第几份了?有没有遇到格式解析错误?

# AI 给出状态回复,主任务继续运行

# 发现有特定模式的文件可以跳过
/steer 所有文件名包含 "draft" 的直接跳过

模式五:控制面板可视化操作(v2026.3.31+)

从 v2026.3.31 起,控制面板的聊天命令面板支持 /steer/redirect 的可视化操作:

  1. 打开控制面板(http://127.0.0.1:18789
  2. 在聊天界面,点击命令输入框旁的 「/」 按钮打开命令面板
  3. 搜索 “steer”,选择 /steer 命令
  4. 在 pending 状态提示下,输入要注入的新指令
  5. 当前运行处于 active 状态时,面板会显示 pending 标记,直到 steer 被成功注入

八、常见问题与注意事项

问:我发了 /steer,但似乎没有效果,AI 还在继续原来的方向?

可能有两种情况:一是当前队列模式不是 steer,发送的消息被当作 collect 处理了(先检查 /queue);二是 AI 正处于上下文压缩(compact)阶段,steer 被自动降级为 followup——等当前轮次结束后,你的消息会作为下一轮处理。

问:steer 和 interrupt 有什么区别?应该用哪个?

interrupt(旧版)是强制中止当前整个运行,然后用最新消息从头开始新的运行。它会丢失当前轮次已执行的所有工具调用结果和中间状态。steer 则在工具调用边界处优雅注入,保留已完成的工作成果。现在建议始终用 steerinterrupt 被标记为 legacy。

问:如果发出 steer 后,AI 还是把已发出的错误内容留在了频道里,怎么办?

steer 无法撤回已通过流式输出发出的内容。如果你使用的是 Teams,已发出的消息可以通过 Teams 的消息编辑功能修改(v2026.3.24 新增了这一能力)。对于 Telegram、Slack 等平台,可以手动删除或通过智能体的编辑消息工具(如果已配置)处理。

问:debounceMs 太小会有什么影响?

如果你快速连续发送多条消息,且 debounceMs 设置很小,每条消息都可能被单独处理为一个 steer,导致 AI 频繁被打断和重定向。建议将 debounceMs 设为 1000~2000 ms,让连续快速发送的消息有机会被合并。

总结

/steer/redirect 的核心价值是让 OpenClaw 的人机交互模型从”发出任务 → 等待结果”升级为”发出任务 → 实时参与 → 动态调整”。这在处理长时间、多步骤任务时尤为关键——当你发现 AI 方向跑偏时,不必等它跑完再重来,而是直接在执行流中注入修正。

配合队列模式(steer / steer-backlog / collect)的灵活配置,以及 /btw 的无侵入状态查询,你可以在 AI 自主执行的同时保持精准的方向控制。

想了解更多 OpenClaw 斜杠命令和智能体控制技巧,欢迎访问 OpenClaw 中文版官网