会话引导(Steering)
Steering 允许你在运行中的 Agent 循环中、工具调用之间注入消息。当你需要重新引导 Agent、提供新上下文或取消正在执行的计划时非常有用 —— 无需等待当前轮次完成。
工作原理
每个工具执行完毕后,PicoClaw 会检查当前会话的 Steering 队列。如果发现一条或多条消息:
- 剩余排队的工具将被跳过 —— 其结果被替换为占位符。
- Steering 消息被注入到对话中,作为用户消息。
- 模型被再次调用,使用更新后的上下文。
流程图
Agent 循环运行中
│
▼
工具 N 执行完毕
│
▼
检查 Steering 队列 ──── 为空 ──► 继续执行工具 N+1
│
│ (发现消息)
▼
跳过剩余工具
│
▼
将 Steering 消息注入对话
│
▼
使用更新后的上下文调用 LLM
│
▼
Agent 循环以新方向继续
作用域隔离的队列
Steering 队列按已解析的会话作用域隔离 —— 不是全局的。每个活跃会话维护自己的队列,因此发送到一个会话的 Steering 消息永远不会泄漏到另一个会话。
配置
Steering 模式通过 agents.defaults.steering_mode 进行配置:
| 值 | 行为 |
|---|---|
"one-at-a-time"(默认) | 每个轮询周期出队一条消息。 |
"all" | 一次性消费整个队列。 |
也可以通过环境变量设置:
export PICOCLAW_AGENTS_DEFAULTS_STEERING_MODE=all
轮询点
PicoClaw 在 Agent 循环的四个位置检查 Steering 队列:
- 循环开始时 —— 在执行任何工具之前。
- 每个工具执行后 —— 主要的拦截点。
- 直接 LLM 响应后 —— 当模型不调用工具直接响应时。
- 轮次结束前 —— 在返回轮次结果之前的最后机会。