你有没有遇到过这样的情况:发出一个任务指令后,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 的可视化操作:
- 打开控制面板(
http://127.0.0.1:18789) - 在聊天界面,点击命令输入框旁的 「/」 按钮打开命令面板
- 搜索 “steer”,选择
/steer命令 - 在 pending 状态提示下,输入要注入的新指令
- 当前运行处于 active 状态时,面板会显示 pending 标记,直到 steer 被成功注入
八、常见问题与注意事项
问:我发了 /steer,但似乎没有效果,AI 还在继续原来的方向?
可能有两种情况:一是当前队列模式不是 steer,发送的消息被当作 collect 处理了(先检查 /queue);二是 AI 正处于上下文压缩(compact)阶段,steer 被自动降级为 followup——等当前轮次结束后,你的消息会作为下一轮处理。
问:steer 和 interrupt 有什么区别?应该用哪个?
interrupt(旧版)是强制中止当前整个运行,然后用最新消息从头开始新的运行。它会丢失当前轮次已执行的所有工具调用结果和中间状态。steer 则在工具调用边界处优雅注入,保留已完成的工作成果。现在建议始终用 steer,interrupt 被标记为 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 中文版官网。