x

/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 直接给结论,不用解释过程
Left-click: follow link, Right-click: select node, Scroll: zoom
x