
【免费下载链接】archiveSkill Compose is an open-source agent builder and runtime platform for skill-powered agents. No workflow graphs. No CLI.项目地址https://gitcode.com/gh_mirrors/sk/archive点击查看免费下载Skill Compose 是一个开源的智能体Agent构建与运行时平台它的Steering转向机制允许你在 AI 正在运行的时候中途改道——不用停止任务、不用推倒重来只需发一条引导消息运行中的 Agent 就会在下一个工具调用边界读到你的指令并调整策略。本文用通俗的方式拆解这套运行时转向机制的设计思路、关键代码位置和使用方法。为什么需要中途改道大多数 Agent 任务都是多轮执行LLM 思考 → 调用工具 → 看结果 → 再思考……一轮循环可能持续几十秒甚至几分钟。传统模式下如果你发现 Agent 走错了方向只有两个选择⏸️ 停止整个运行重新发起任务已完成的步骤全部作废⏳ 等待它自己醒悟赌它能从错误路径中绕回来Steering 提供了第三种选择不打断运行直接注入一条消息让 Agent 在工具结果刚到手、还没决定下一步的时刻看到它从而自然地改变后续行为。这就像给一个正在开车的司机递纸条而不是直接把车熄火。Steering 是什么一条插队的用户消息从机制上看Steering 的本质非常简单把你的消息包装成一条[User Steering Message]角色的 user 消息插入 Agent 的对话上下文让它随下一次 LLM 调用一起被模型看到。官方文档在 docs/docs/concepts/agents.md 中完整描述了这套Mid-Execution Intervention执行中干预流程核心是四个动作聊天开始后Agent 开始执行运行期间你输入一条消息并发送前端 UI 里会显示引导按钮对应 web/src/i18n/locales/zh-CN/chat.json 中的 steering 文案消息被注入上下文标记为[User Steering Message]Agent 在下一次 LLM 调用前读到它SSE 流中同时推送一个steering_received事件供前端展示消息如何从浏览器传到 LLM三步链路整个 Steering 链路跨过了前端、API 和 Agent 运行时三层源码都集中在app/agent/目录下你输入引导消息 ↓ ① 前端调用 steer API API 端点混合路由本 worker 直投 / 跨 worker 走文件系统队列 ↓ ② EventStream.inject() 写入注入队列 Agent 主循环在工具边界检查并消费消息 ↓ ③ 拼入上下文发起下一次 LLM 调用第①步前端乐观更新。聊天引擎 web/src/hooks/use-chat-engine.ts 会先在界面上乐观地显示这条引导消息再调用steer(traceId, message)请求后端。第②步API 混合路由。转向端点定义在 app/api/v1/agent.py公开 Agent 的对应端点在 app/api/v1/published.py。它采用双通道策略场景路径特点同一个 uvicorn worker直接调用event_stream.inject()内存直投零延迟多个 workerDocker 部署常见写入/tmp/agent_steering/{trace_id}/文件系统队列由流所在 worker 轮询取走第③步Agent 循环在工具边界消费。这是 Steering 最巧妙的设计下一节细讲。关键实现一EventStream 双向通道app/agent/event_stream.py 中的EventStream是 Agent生产者与 API 端点消费者之间的异步事件通道。它在一个类里承担了两个方向的通信正向Agent → 前端push()/ 异步迭代把思考、工具调用、结果等事件推给 SSE 流反向前端 → Agentinject() / has_injection() / get_injection_nowait() 三个方法构成 Steering 消息的投递—探测—取件接口这个设计借鉴了 Pi Agent 的 EventStream 模式CSP 风格的推/拉通道额外还带一个 15 秒心跳防止 nginx 等代理掐断空闲的长连接——长任务里人还在等的体验由此保住。关键实现二为什么在工具边界注入Agent 主循环在 app/agent/agent.py 中只在两个精确时刻检查是否有待注入的引导消息注入点时机效果 工具结果之后工具执行完毕、下一次 LLM 调用之前Agent 同时看到工具结果 你的引导一并决策 即将收尾之前LLM 决定end_turn结束、但引导消息还在排队Agent 不结束多跑一轮处理你的消息为什么不立刻打断正在生成的内容因为 LLM 的输出是不可逆的——强行截断会产生半截的工具调用。而在工具边界介入Agent 手头已有完整的工具结果作为事实基础此时读入别查数据库了改用缓存方案这样的指令决策最自然、副作用最小。收尾前的拦截agent.py#L1612-L1625尤其有意思如果 Agent 本来要交卷了发现还有引导消息它会执行self.max_turns max(self.max_turns, turns 1)——动态追加一个轮次额度然后带着你的消息回到 LLM而不是直接结束。工具结果后的注入agent.py#L1851-L1861逻辑相同。关键实现三文件系统消息队列如何保证可靠多 worker 部署时接消息的 worker和正在跑 Agent 的 worker往往不是同一个进程内存通道失效。app/agent/steering.py 用共享文件系统搭了一条极简的消息队列工程细节很值得借鉴原子写入先把内容写到.tmp临时文件再rename()为.msg——同一文件系统上 rename 是原子操作轮询端永远不会读到写了一半的消息见 steering.py#L34-L43防冲突文件名时间戳_ns 进程PID 随机字节组合多个 worker 同时写入也不会撞名轮询消费流所在 worker 每 300ms 扫一次.msg文件读进 EventStream 后立即删除见 steering.py#L53-L76生命周期清理运行结束后cleanup_steering_dir()删掉整个 trace 目录不残留垃圾这套机制有完整的单元测试覆盖包括顺序消费、文件清理、流关闭后轮询退出等场景见 tests/test_core/test_steering.py。快速上手两种方式触发 Steering方式一Web 界面最简单在 Chat 页面对话时只要 Agent 还在运行输入框保持可用。输入消息按回车或点引导按钮即可前端会立刻显示这条引导消息SSE 流收到steering_received事件后与 Agent 的实际反应对应起来。方式二API 调用适合自动化集成# 对运行中的 Agent 流发送引导消息 curl -X POST http://localhost:62610/api/v1/agent/run/stream/{trace_id}/steer \ -H Content-Type: application/json \ -d {message: Focus on the validation logic instead}成功返回{status: injected, trace_id: ...}。如果任务已经结束会返回 409找不到运行记录返回 404——前端拿到 409 时还会把消息排队等下一轮运行开始后自动重发避免你辛辛苦苦打的字丢失。更多事件类型与错误码参考 docs/docs/reference/api.md。总结三个设计取舍边界注入而非硬中断在工具调用间隙读消息兼顾及时与不破坏 LLM 生成完整性动态追加轮次Agent 准备收尾时能再给一次机会而不是让引导消息石沉大海混合传输内存直投 文件系统原子队列单机零延迟、多 worker 也可靠对新手来说理解 Steering 的关键就一句话你的引导消息不会打断 Agent 的思考而是在它看结果、定计划的间隙递进它的视野里。想深入阅读可以从 app/agent/steering.py、app/agent/event_stream.py 和官方概念文档 docs/docs/concepts/agents.md 三个入口顺藤摸瓜代码量不大一次读完。赞分享【免费下载链接】archiveSkill Compose is an open-source agent builder and runtime platform for skill-powered agents. No workflow graphs. No CLI.项目地址https://gitcode.com/gh_mirrors/sk/archive点击查看免费下载相关推荐PicoClaw Steering 机制深度解析让运行中的 Agent 即时响应新指令PicoClaw Steering 机制深度解析让运行中的 Agent 即时响应新指令 Steering转向 是 PicoClaw 中的一项核心运行时能力人工智能AI 应用AI Agent交互助手工具调用MCP ClientsAgent 记忆如何控制 CowAgent 正在运行的任务用 /steer 转向和 /cancel 中止如何控制 CowAgent 正在运行的任务用 /steer 转向和 /cancel 中止 让 CowAgent 执行一个长任务多轮工具调用、长流式回复、后AI Agent人工智能多智能体工具调用Agent 记忆AI 技能交互助手即时通讯自主智能体RAG浏览器控制Attractor转向与子代理机制如何在运行中完全掌控你的AI编程AgentAttractor转向与子代理机制如何在运行中完全掌控你的AI编程Agent Attractor 是 StrongDM 开源的一套自然语言规范NLSpec创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考