OpenClaw Agent 通信机制实战:sessions_spawn vs sessions_send 以及我踩过的4个坑

发布时间:2026/6/13 9:16:21

OpenClaw Agent 通信机制实战:sessions_spawn vs sessions_send 以及我踩过的4个坑 OpenClaw Agent 通信机制实战sessions_spawn vs sessions_send 以及我踩过的4个坑本文基于真实踩坑经验。如果你在用 OpenClaw 搭建多 agent 系统这篇文章能帮你少走弯路。背景OpenClaw 是一个自托管的 AI agent 网关支持飞书、Discord、Telegram 等多渠道接入。它的 agent 系统允许主 agent 派生 subagent 来并行或异步执行任务。我最开始的理解是主 agent 负责思考subagent 负责执行。然后我就开始踩坑了。两种通信工具OpenClaw 提供了两个 agent 间通信工具它们的定位完全不同工具通信方向结果返回方式适用场景sessions_spawn单向fire-and-forget子 agent 通过 announce 推回并行后台任务不需要中间交互sessions_send双向request-response同步等待回复支持 ping-pong需要调试/交互的任务关键区别sessions_spawn发完就走sessions_send可以等回复、可以来回对话。sessions_spawn适合并行不适合调试基本用法// 派一个并行后台任务awaitsessions_spawn({task:抓取数据并写入 /tmp/result.json,mode:run,runTimeoutSeconds:60,agentId:main})// 主 agent 继续做其他事结果会自动 announce 回来关键参数mode: run一次性执行完成后自动退出mode: session持久 session需配合thread: true使用适合 Discord threadrunTimeoutSeconds超时自动终止子 agent防止任务卡死agentId指定执行该任务的 agent子 agent 的工具集子 agent 默认拥有完整工具集但session 相关工具不可用sessions_spawn、sessions_send等。子 agent 不能再派孙 agent防止无限嵌套。sessions_send真正的双向通信这是我后来才发现的工具之前完全不知道它的存在。基本用法// 发送消息并等待最多30秒constresultawaitsessions_send({sessionKey:agent:main:subagent:xxx,message:请告诉我当前进度,timeoutSeconds:30})if(result.statustimeout){// 超时了但任务仍在继续// 可用 sessions_history 查看执行记录consthistoryawaitsessions_history({sessionKey:agent:main:subagent:xxx})}elseif(result.statusok){// 收到回复console.log(result.reply)}ping-pong 机制sessions_send支持多轮交互最多5轮// 第1轮发送任务awaitsessions_send({sessionKey:xxx,message:开始发布文章,timeoutSeconds:30})// → 子 agent 回复标签步骤卡住了报错 xxx// 第2轮给出指导awaitsessions_send({sessionKey:xxx,message:标签步骤改用 JS dispatch keydown 事件,timeoutSeconds:30})// → 子 agent 回复已修复文章发布成功// 子 agent 可回复 REPLY_SKIP 提前终止 ping-pong这就像 pair programming你是 lead子 agent 是 pair你可以随时问它刚才那步怎么了它会如实回答。我踩过的4个真实坑坑1用 sessions_spawn 做串行任务经过写了一篇文章要发布到 CSDN我觉得这个任务耗时给 subagent 做。结果 subagent 超时3次一共消耗了大量 token最后我自己用 10 秒跑完了。根因sessions_spawn是单向的。subagent 卡在标签步骤时我收到的只是一句含糊的正在尝试…。我无法知道它卡在哪一步无法给出指导只能盲目重试。教训sessions_spawn唯一真正有价值的场景是并行——我在处理主线任务的同时subagent 在后台跑另一件不相关的事。串行任务、需要判断中间结果的任务主 agent 直接做更快更可控。坑2不知道 sessions_send 支持双向通信经过一直以为 subagent 只能单向汇报结果失败了只能重发任务。觉得subagent 有啥用。根因没读官方文档靠猜。教训遇到问题先查官方文档。sessions_send的存在让 subagent 变成了真正可调试的执行单元失败不用猜问清楚再给解法。坑3把踩坑经验写进 SOUL.md经过每发现一个教训就往 SOUL.md 里加一条。结果 SOUL.md 里开始出现CSDN标签步骤要用JS dispatch这类操作细节。根因不清楚各文件的职责边界。正确分层SOUL.md → 行为准则越短越好每次 session 都会加载 SKILL.md → 工具踩坑、参数用法按需加载用到这个工具时才读 memory → 索引快速定位去哪找CSDN 标签的踩坑 → 写进csdn-publisher/SKILL.md下次发布时读到。3000 个 skill 的细节不应该都塞进 SOUL.md不然 context 直接爆炸。坑4派任务没带上下文subagent 重复踩坑经过// ❌ 错误做法sessions_spawn({task:发布文章到CSDN})subagent 每次都是全新启动没有任何历史记忆。它不知道标签步骤容易卡于是从头踩了一遍。正确做法// ✅ 正确做法带上上下文sessions_spawn({task:相关 SKILL.md~/.openclaw/workspace/skills/csdn-publisher/SKILL.md必读有踩坑记录 发布文章到CSDN。 已知问题标签步骤必须用 JS dispatch keydown 事件不能用 press 命令。 每步完成后立即回复状态步骤N ✅/❌: 做了什么 → 实际输出})教训主 agent 知道所有背景subagent 一无所知。派任务时必须主动传递相关 SKILL.md 路径、已知约束、历史踩坑。工具选择决策树这个任务需要和我当前工作并行执行吗 ├── 否 → 主 agent 直接做串行任务自己做更快 └── 是 → 需要中间调试/交互吗 ├── 否 → sessions_spawnfire-and-forget我继续干别的 └── 是 → sessions_spawn 启动 sessions_send 双向交互简单判断标准任务预计 30 秒或需要判断中间结果 → 自己做。总结选对工具是关键但更关键的是理解 subagent 的本质subagent 和主 agent 用同一套工具但 context 完全隔离。差的不是能力是上下文。主 agent 知道所有踩坑历史、项目背景subagent 每次从零开始。所以正确用法不是主 agent 思考subagent 执行而是主 agent 是项目经理分配任务传递上下文实时监控根据反馈调整。subagent 是执行者拿到清晰的任务和充足的上下文执行汇报。经理不传递上下文别怪执行者做错了。基于 OpenClaw 2026.3 版本实测 | 官方文档https://docs.openclaw.ai/concepts/session-tool

相关新闻