OpenClaw 的 sessions_send 机制
引言OpenClaw 中Agent 之间 Agent to AgentA2A 的精准通信主要通过的 sessions_* 工具集来实现。目标是让分布在不同工作区或通讯平台的智能体能够协同工作而无需用户手动干预。sessions_send 是工具集中的核心工具允许一个会话向另一个指定的活跃会话发送消息。它的功能描述和使用规范存放在 Workspace 的 TOOLS.md 文件中在 AI 启动时注入。sessions_* 工具集sessions_list看在线名单找合适的同事。sessions_history翻阅旧档案不用重复问老板。sessions_send精准发消息让同事去干活。sessions_spawn开个新窗口雇个临时工处理专事。这套工具集让 AI Agent 不再是孤岛而是一个能够互相通信A2A的智能集群。举个例子我们可以把 OpenClaw 想象成一家全能助理公司。你作为老板平时只跟总管助理主会话说话但公司后台其实还有很多专业助理在协同办公比如财务助理、工作助理、采购助理。sessions_* 工具集就是这些助理之间沟通、协作的一套流程和制度。想象一个场景你想买一台高性能笔记本但不确定这月的预算和奖金够不够。当你对总管助理说“我想买台 MacBook算算我的奖金够不够付”总管助理首先需要知道现在有哪些专业助理可以帮忙。总管助理调用 sessions_list。它在后台看到在 WhatsApp 上的财务助理和在 Slack 上的工作助理都处于活跃状态总管助理需要去问工作助理关于奖金的消息再问财务助理关于本月支出的信息。它调用 sessions_send 给工作助理发信“请查一下老板这个月的绩效奖金是多少”工作助理查到后通过回复确认Ping-Pong机制回信说“奖金是 5000 元”总管助理还需要知道你这个月已经花了多少钱。它调用 sessions_history 直接去翻看财务助理那边的账本对话转录日志。它发现你前几天在 WhatsApp 上跟财务助理说“昨天买衣服花了 2000 元”。它不需要再问你一遍直接从日志里就获取了上下文。现在总管助理知道你有多少钱了但它还不知道电脑现在卖多少钱。为了不干扰现有的助理工作它决定找个专门的实习生去干这件杂事。它调用 sessions_spawn 临时产生一个新的比价助理会话这个新分身助理专门去网页上搜索最新价格汇报给总管助理。任务完成后这个临时会话就可以关掉。通过这四个工具的配合在 Telegram 上的总管助理最后会直接回复你“老板我问了工作助理listsend你这月有 5000 奖金。翻了财务助理的记录history你已经花了 2000。我刚派个新的分身spawn去查了价电脑要 8000。所以你还得再存 5000 才够哦”架构中的位置Layer 2 网关控制面与 Session Router默认维持会话间的物理与内存隔离。在复杂的工业级测试中如果 Agent 之间共享内存一个发生逻辑幻觉的节点会瞬间污染整个测试工具链。这道隔离墙确保了每一个 Agent 都在自己的单间里工作从源头上掐断了风险的横向蔓延。红色穿透线sessions_send 是唯一被允许动态穿透隔离墙、建立跨会话路由的内部协议。起点在 Layer 4 的沙箱执行层终点指向另一个沙箱。sessions_send 根本没有任何聊天软件的属性就是一条受到网关严格监控的跨进程通信管道。这段路由就是确保代码数据不泄露、执行权限不越界的核心安检通道。Layer 5 混合记忆系统这里把原始日志、知识图谱和向量索引完全独立在 Layer 3 的推理大脑之外。这就是状态外置。大脑只负责运算所有的记忆和审计痕迹全部沉淀在外部存储中。这种架构是满足 B 端审计要求的基础设施。完整执行流程第一步目标解析其实就是分布式系统中的寻址。采用 sessionKey 或 label 查找实际上是在构建一套动态的服务注册表。通过标签寻址可以让系统具备极强的扩展性。第二步权限检查这是核心防御筹码。A2A 策略结合沙箱限制本质上是在 AI 内部构建了一套防火墙。让它们在受控的权限范围内进行有限的协作。第三步消息投递 第四步等待回复启动目标 Agent 并选择性地同步等待这其实就是异步任务队列。通过控制等待行为可以防止主程序因为某个子节点的推理延迟而陷入假死。第五步 A2A 协商设定了最多 5 轮的限制。防止递归深度溢出收敛复杂度。第六步最终通知状态外置。数据投递回原始频道意味着所有的中间协商过程都是透明且可追溯的。这不仅是信息的同步更是审计日志的归档。A2A 多轮协商流程在实际的业务中Agent A 作为一个请求者在得到 Agent B 的执行确认后。如果继续进行“谢谢”、“辛苦了”之类的礼貌性回复会造成逻辑上的冗余。这个流程通过在第三次指令中预设 REPLY_SKIP 逻辑。让 Agent B 在完成动作后直接触发系统级的最终通知。sessions_send 参数基础参数7个1. sessionKey (目标会话标识): 字符串类型指定消息要发送到的目标 Agent 会话的唯一 ID。类似于工位编号确保消息准确送达。2. text (消息内容主体): 字符串类型承载要发送给目标 Agent 的文本指令或信息。3. replySkip (跳过回复标志): 布尔类型控制目标 Agent 是否需要回复。True 表示跳过回复实现单向通信以避免无效对话循环。4. announceSkip (跳过广播标志): 布尔类型控制该消息是否在用户界面或公共频道中显示。True 表示静默执行不在 UI 上显示。5. images (图像资源): 数组类型允许传递图像文件。6. files (文件资源): 数组类型允许传递各种类型的文件附件。7. metadata (元数据): 字典类型用于携带额外的结构化信息如业务流水号、优先级等方便追踪和审计。扩展参数6个8. wait (同步/异步标志): 布尔类型控制发送消息后是否等待目标 Agent 的响应。True 表示同步等待False 表示异步发送。9. timeout (超时时间): 数值类型通常以秒为单位设置等待目标 Agent 响应的最长时间。超时后系统会中断连接并采取相应措施。timeoutSeconds 0: 加入队列并返回 { runId, status: accepted }。timeoutSeconds 0: 等待最多 N 秒直到完成,然后返回 { runId, status: ok, reply }。10. priority (优先级): 数值类型用于在并发场景下确定消息处理的优先级顺序。11. context_mode (上下文模式): 枚举类型定义发送消息时是否包含历史会话上下文。可选项包括none: 不包含任何上下文。current: 只包含当前消息的上下文。full: 包含完整的历史会话上下文。12. trace_id (追踪 ID): 字符串类型用于追踪消息的整个生命周期贯穿所有相关 Agent 和服务方便问题排查和审计。13. max_tokens (最大 Token 数量): 数值类型限制目标 Agent 在处理该消息时可以使用的最大 Token 数量用于成本控制。四种模式Reply 是否需要回复ON 回复SKIP不需要回复Announce是否全局可见ON 可见SKIP 不可见协作模式Reply ON Ann ON适用复杂任务的分工协作与人类监管。举例在代码安全分析过程中Agent A 发现了一个潜在的漏洞它需要和 Agent B安全专家进行多轮的对话探讨漏洞的成因和修复方案。这种模式必须让两个 Agent 之间进行充分的信息交换。任务派发模式Reply SKIP Ann ON适用主 Agent 向子 Agent 下达耗时任务。举例主 Agent 需要让 Agent B 对上千行代码进行静态分析。这种分析任务可能需要几分钟甚至更长时间主 Agent 下达指令后子 Agent 执行分析然后主 Agent 不用等待就可以去处理其他的任务。这种模式能有效提升系统的并发处理能力。暗中核查模式Reply ON Ann SKIP适用向内存 Agent 悄悄校验事实不打扰用户。举例在代码审计或者芯片验证过程中Agent A 在本地生成了代码片段Agent B 在后台对这个片段的安全性、合规性进行校验。校验结果会写入系统的审计日志但是不会主动向Agent A 发送任何信息更不会打扰用户。这套机制是对代码安全进行持续审计的前提。底层遥测模式Reply SKIP Ann SKIP适用向日志或监控 Agent 悄无声息地单向灌输数据。举例Agent C 负责收集系统运行的各项指标比如 CPU 占用率、内存使用情况以及 Agent 之间的通讯延迟。Agent C 将这些数据悄无声息地发送到监控系统用于诊断和性能优化。这种模式是实现工业级系统监控的基础。任务派发和暗中核查这两种模式对应了 sessions_send 流程图中强调的 replySkip 和 announceSkip 参数是实现工业级管控的核心。