/steer 命令详解
/steer 是 Hermes Agent 在 Agent 运行过程中注入提示词的核心机制。
核心原理
用户输入 /steer 你忽略之前的分析,直接给结论
↓
agent.steer(text) ← 线程安全,存入 _pending_steer
↓
当前 tool batch 继续执行(不中断)
↓
tool batch 完成后
↓
_drain_pending_steer() 将文字追加到最后一个 tool result 中
↓
模型下一次迭代时"看到"这个提示
与 /interrupt 的区别
| /steer | /interrupt | |
|---|---|---|
| 行为 | 等待当前工具批次完成 | 立即中断正在执行的工具 |
| 注入时机 | 当前 batch 结束后追加 | 立即停止 |
| 副作用 | 无副作用 | 可能中断正在写的文件等 |
| 典型用途 | 纠正方向、补充信息 | 紧急停止、取消任务 |
使用方式
/steer 你忽略之前的分析,直接给结论
/steer 补充:还要考虑成本因素
/steer 重新用中文回答
语法:/steer <提示内容> — 提示内容会在线程安全锁保护下存入 _pending_steer,多个 /steer 会用换行拼接。
代码层面的关键实现
存储(run_agent.py L1090-1098):
# /steer 机制 — 在下一个工具结果中注入用户提示,不打断 agent
self._pending_steer: Optional[str] = None
self._pending_steer_lock = threading.Lock() # 线程安全
steer() 方法(L3965-3999):
def steer(self, text: str) -> bool:
# 线程安全地追加到 _pending_steer
# 多次调用会 \n 拼接
# 返回 True 表示接受
消费时机:在每个 tool batch 完成后,通过 drain hook 追加到最后的 tool result,不插入新的 user turn(保持消息角色交替)。
典型使用场景
- Agent 分析方向走偏了 →
/steer 回到主题:预算应该放在第一位 - 需要补充信息 →
/steer 另外用户是在长沙,冬天很冷 - 想要快速切换语言 →
/steer 请用英文回答 - 想让 Agent 直接给结论 →
/steer 直接给结论,不用解释过程