OpenClaw Sub-Agent 架构详解

OpenClaw 学习笔记

分类:技术架构

核心主题:OpenClaw Sub-Agent 子代理架构

主要内容:深入解析 OpenClaw 的主-子 Agent 架构设计、sessions_spawn 工具、推送式通信机制、steer 重定向、并行任务分解策略及实际案例分析,帮助开发者掌握构建分布式多 Agent 系统的核心方法。

关键词:OpenClaw, Sub-Agent, 子代理, sessions_spawn, steer, 分布式架构, 并行执行, AI Agent, 多 Agent 协作

一、主-子 Agent 架构设计理念

OpenClaw 的 Sub-Agent 架构是一种 主从式(Master-Slave)多 Agent 协作模式,其核心思想是将复杂的单线程任务拆解为多个可并行执行的子任务,由主 Agent(Master Agent)统一调度,多个子 Agent(Sub-Agent)各自独立执行,最终将结果汇聚回主 Agent 进行整合输出。

1.1 架构核心要素

核心设计思想:"分而治之"(Divide and Conquer)。将一个大问题分解为多个独立的小问题并行解决,可以显著降低单次推理的上下文长度,避免 LLM 在长上下文中丢失注意力,同时大幅提升任务完成速度。

1.2 架构优势

优势说明
并行加速多个子 Agent 可以同时执行,充分利用 API 并发能力,将整体耗时从串行的 T 缩短至接近 max(T1, T2, ..., Tn)
上下文隔离每个子 Agent 拥有独立的上下文窗口,避免跨领域信息相互干扰,减少幻觉
专注力提升子 Agent 只需关注单一子任务,Prompt 更加聚焦,输出质量更高
可扩展性新的子任务类型可以通过定义新的 Sub-Agent 模板轻松加入
容错性单个子 Agent 失败不影响其他子 Agent 的执行结果

1.3 适用场景

二、sessions_spawn 工具详解

sessions_spawn 是 OpenClaw 中实现 Sub-Agent 创建的核心工具。它负责在主 Agent 的会话中动态派生出全新的子 Agent 会话,并为每个子会话注入独立的系统提示词(System Prompt)和执行目标。

2.1 基本语法与参数

sessions_spawn(
  "task": "子任务的详细描述",
  "prompt": "子 Agent 的系统提示词和执行指令",
  "subagent_name": "子 Agent 标识名称(可选)"
)
参数类型必需说明
taskstring子任务的描述,主 Agent 用于追踪和记录本次派生子任务的用途
promptstring子 Agent 的系统级指令,定义了子 Agent 的身份、行为准则和执行目标
subagent_namestring子 Agent 的名称标识,便于在结果返回时识别来源

最佳实践

prompt 参数的质量直接决定子 Agent 的输出质量。建议在 prompt 中明确指定:子 Agent 的角色身份、需要完成的具体任务、输出格式要求(如 Markdown 结构)、输出长度限制、以及是否需要返回特定数据结构。

2.2 工作流程

  1. 调用触发:主 Agent 在推理过程中判断需要创建子 Agent,发起 sessions_spawn 工具调用。
  2. 会话创建:OpenClaw 运行时创建一个全新的 LLM 会话,分配独立的上下文窗口。
  3. 注入 Prompt:prompt 参数作为系统提示词注入新会话。
  4. 异步执行:子 Agent 独立开始执行,主 Agent 继续其他工作(或等待结果)。
  5. 结果返回:子 Agent 完成执行后,通过推送式机制将结果返回给主 Agent。

2.3 实际用法示例

// 主 Agent 调用 sessions_spawn 创建三个并行子 Agent
sessions_spawn({
  task: "撰写市场分析报告的行业概况章节",
  prompt: "你是一位资深行业分析师。请撰写市场分析报告中的'行业概况'章节,...(略)",
  subagent_name: "industry_analysis"
})

三、子 Agent 通信机制(推送式结果返回)

OpenClaw 的子 Agent 采用 推送式(Push-based)结果返回机制。与传统的请求-响应(Request-Response)模式不同,子 Agent 在完成任务后主动将结果推送给主 Agent,主 Agent 无需轮询等待。

3.1 推送机制的工作原理

  1. 订阅(Subscription):主 Agent 创建子 Agent 时,自动建立一条回调通道。
  2. 执行(Execution):子 Agent 独立执行任务,期间与主 Agent 无通信。
  3. 完成通知(Completion):子 Agent 执行完毕后,将输出内容打包并通过回调通道推送回主 Agent 的上下文。
  4. 结果注入(Injection):推送的结果以结构化消息的形式注入到主 Agent 的对话上下文中,主 Agent 可以像普通对话消息一样读取和处理。

推送式 vs 拉取式

特性推送式(OpenClaw)拉取式(传统)
实时性高,子 Agent 完成即通知中,取决于轮询间隔
资源消耗低,无需持续轮询高,需要周期性检查状态
实现复杂度低,框架自动处理中,需自行实现轮询逻辑
可扩展性高,适合大量子 Agent中,轮询开销随数量增加

3.2 结果聚合策略

主 Agent 在接收到所有子 Agent 的推送结果后,需要执行结果聚合(Aggregation)。常见的聚合策略包括:

关键设计考虑:推送式机制要求主 Agent 具备"等待"能力——它需要挂起当前推理,待所有子 Agent 返回后再继续。OpenClaw 通过异步事件循环实现了这一点,主 Agent 在发起 sessions_spawn 后进入等待状态,子 Agent 结果分批到达,当所有预期结果收齐后,主 Agent 自动恢复执行。

3.3 超时与容错

四、steer 重定向工具

steer 是 OpenClaw 中用于 会话重定向 的重要工具。它允许在多个子 Agent 会话之间进行流转控制,将一个会话的上下文或执行权转移给另一个会话。

4.1 steer 的核心作用

4.2 基本语法

steer({
  "target_session": "目标会话 ID",
  "message": "传递给目标会话的消息内容"
})

4.3 典型使用模式

模式一:主->子 任务分发

主 Agent 使用 steer 将任务上下文传递给特定的子 Agent,子 Agent 在此基础上继续执行。

// 主 Agent 将已收集的部分数据 steer 给子 Agent
steer({
  target_session: "sub_agent_1",
  message: "基于以下数据完成竞品分析章节:..."
})

模式二:子->主 结果回传

子 Agent 完成工作后,使用 steer 将执行权交还给主 Agent,同时携带执行结果。

// 子 Agent 完成后将结果 steer 回主 Agent
steer({
  target_session: "master_agent",
  message: "竞品分析已完成,结果如下:..."
})

steer vs sessions_spawn

两者的核心区别在于:sessions_spawn 用于创建新的子 Agent 会话,而 steer 用于在已有的会话之间进行流转。通常的组合用法是:先用 sessions_spawn 创建子 Agent,再通过 steer 管理后续的交互流程。

4.4 高级用法:链式 steer

在复杂的工作流中,可以在多个子 Agent 之间建立链式流转:

// 子 Agent A 完成 -> steer 给子 Agent B -> 子 Agent B 完成后 -> steer 回主 Agent
Agent_A → steer(Agent_B, data) → Agent_B 处理 → steer(Master, result)

这种链式模式适用于需要多阶段流水线处理的场景,如:数据采集 -> 数据清洗 -> 数据分析 -> 报告生成。

五、并行任务分解策略

并行任务分解是 Sub-Agent 架构中最关键的环节。合理地将任务分解为可并行执行的子任务,直接决定了系统的效率和输出质量。

5.1 分解原则

任务分解四原则:
  1. 独立性(Independence):子任务之间应尽量无数据依赖,确保可以真正并行执行。
  2. 均匀性(Uniformity):各子任务的复杂度应大致相当,避免出现"长尾"——某个子 Agent 耗时过长拖累整体进度。
  3. 完整性(Completeness):所有子任务的加总应覆盖原始任务的全部需求,无遗漏。
  4. 可合并性(Mergeability):各子任务的输出格式应便于主 Agent 进行后续的拼接和整合。

5.2 常见分解模式

模式一:按章节/模块分解

适用于长文档生成,将文档按章节或模块切分,每个子 Agent 负责一个章节。

// 写市场报告:按章节分解
Sub-Agent 1: 行业概况
Sub-Agent 2: 市场规模
Sub-Agent 3: 竞争格局
Sub-Agent 4: 趋势预测
Sub-Agent 5: 结论建议

模式二:按数据源分解

适用于多源信息检索与整合,每个子 Agent 负责查询和分析一个独立数据源。

// 竞品调研:按数据源分解
Sub-Agent 1: 爬取并分析公司官网
Sub-Agent 2: 查询行业数据库
Sub-Agent 3: 分析社交媒体舆情
Sub-Agent 4: 查阅财报和公开信息

模式三:按视角/维度分解

适用于多维度分析,每个子 Agent 从不同角度分析同一组数据。

// 产品分析:按分析维度分解
Sub-Agent 1: 技术可行性分析
Sub-Agent 2: 商业价值评估
Sub-Agent 3: 用户体验评价
Sub-Agent 4: 市场竞争定位

5.3 动态分解 vs 静态分解

特性静态分解动态分解
分解时机在发起子 Agent 前一次性完成根据中间结果逐步调整
灵活性低,分解方案固定高,可根据实际情况调整
适用场景任务结构清晰、可预见性强任务不确定性高、需探索性执行
实现复杂度高(需要反馈循环)

在实际应用中,推荐采用 半动态分解 策略:主 Agent 先进行初步的静态分解,执行过程中根据子 Agent 返回的中间结果动态调整后续分解方案。

六、实际案例分析(写市场报告的多 Agent 协作)

本章通过一个完整的实际案例——"AI 芯片行业市场分析报告"的生成过程,展示 Sub-Agent 架构如何在实际场景中落地。

6.1 任务总览

目标:生成一份涵盖 AI 芯片行业概况、市场规模、竞争格局、技术趋势和投资建议的完整市场分析报告。

预计输出:约 8000-10000 字的中文专业报告。

6.2 架构设计

Agent 拓扑结构

                +------------------+
                |   主 Agent (Master) |
                |   (统筹 & 整合)     |
                +--------+---------+
                         |
          +--------------+--------------+
          |              |              |
          v              v              v
    +-----------+  +-----------+  +-----------+
    | Sub-Agent |  | Sub-Agent |  | Sub-Agent |
    |  行业概况  |  |  市场规模  |  |  竞争格局  |
    +-----------+  +-----------+  +-----------+
          |              |              |
          v              v              v
    +-----------+  +-----------+  +-----------+
    | Sub-Agent |  | Sub-Agent |  | Sub-Agent |
    |  技术趋势  |  |  投资建议  |  |  风险提示  |
    +-----------+  +-----------+  +-----------+

6.3 执行流程

  1. 阶段一:主 Agent 任务规划
    • 主 Agent 分析用户需求,制定报告大纲(6 个主要章节)
    • 为每个章节设计详细的子 Agent Prompt
    • 启动 sessions_spawn 并行创建 6 个子 Agent
  2. 阶段二:子 Agent 并行执行
    • 6 个子 Agent 同时开始各自的工作,彼此独立
    • 每个子 Agent 内部可能进一步调用工具(如 WebSearch、数据查询 API)
    • 执行时间:约 2-3 分钟(因 API 并发度和任务复杂度而异)
  3. 阶段三:结果推送与聚合
    • 子 Agent 逐一完成,通过推送式机制将结果返回主 Agent
    • 主 Agent 按章节顺序拼接各子 Agent 输出
    • 主 Agent 进行整体润色:统一语气风格、消除冗余、补充过渡段
  4. 阶段四:最终输出
    • 主 Agent 执行最终的格式化和质量检查
    • 输出完整的市场分析报告

6.4 关键 Prompt 示例

子 Agent "竞争格局" 的 Prompt 设计:

你是一位资深的 AI 芯片行业分析师,专注于竞争格局分析。请基于你的知识,撰写一份关于 AI 芯片行业竞争格局的详细分析,内容包括:1) 主要市场参与者(NVIDIA、AMD、Intel、华为、寒武纪等)的市场份额和定位;2) 各厂商的核心竞争优势;3) 新兴创业公司的突破方向;4) 竞争格局的未来演变趋势。请使用专业客观的语气,引用具体数据(可标注估计值),篇幅约 1500 字,使用 Markdown 格式输出。

6.5 效果对比

指标单 Agent(串行)多 Sub-Agent(并行)提升
总执行时间~12 分钟~3 分钟4x 加速
上下文 Token 消耗~80K tokens(单次长上下文)~60K tokens(6 * 10K 独立上下文)减少 25%
各章节质量评分6.5/10(长上下文后期质量下降)8.5/10(每个子 Agent 专注单一章节)+30%
内容重复度中高(跨章节引用同一信息)低(上下文隔离)显著改善

案例启示

本案例展示了 Sub-Agent 架构在真实复杂任务中的显著优势。最关键的成功因素是:合理的任务分解粒度(6 个子 Agent 恰好覆盖所有章节)和高质量的 Sub-Agent Prompt 设计(明确角色、任务、格式要求)。

七、性能与资源管理

Sub-Agent 架构虽然带来了并行加速的好处,但也引入了额外的资源开销。合理的性能与资源管理是确保系统稳定高效运行的前提。

7.1 Token 消耗分析

总 Token 消耗 = 主 Agent Token + Σ(各子 Agent Token)。需要关注以下方面:

7.2 并发控制

参数说明推荐值
max_concurrency同时运行的子 Agent 最大数量5-10(取决于 API Rate Limit)
rate_limit_rpm每分钟 API 请求数限制根据 API 提供方设定
rate_limit_tpm每分钟 Token 消耗限制根据 API 提供方设定
retry_max_attempts失败重试最大次数2-3
timeout_per_agent单个子 Agent 超时时间120-300 秒

重要提示

并发数并非越高越好。过高的并发可能导致 API Rate Limit 触发、Token 配额快速耗尽、以及结果质量下降。建议从较低的并发数开始(如 3-5),根据实际运行情况逐步调优。

7.3 内存与上下文管理

7.4 监控与可观测性

在生产环境中运行 Sub-Agent 架构时,建议监控以下关键指标:

优化建议

对于耗时特别长的子 Agent(如需要多次工具调用的),可以考虑将嵌套工具调用也优化为并行模式,或提前拆分更细粒度的子任务。

八、核心要点总结

Sub-Agent 架构核心要点

  1. 分治思想:Sub-Agent 架构的本质是"分而治之"——将复杂任务拆解为多个独立子任务并行执行,再汇总整合。这是突破单 Agent 能力上限的关键方法论。
  2. sessions_spawn 是入口:该工具是创建子 Agent 的唯一途径,其 prompt 参数设计质量直接决定子 Agent 的执行效果。好的 Prompt = 清晰的角色 + 明确的任务 + 具体的格式要求。
  3. 推送式通信天生高效:子 Agent 完成后主动推送结果给主 Agent,无需轮询,天然适合异步并行场景。主 Agent 通过事件驱动的方式自动聚合结果。
  4. steer 控制执行流:steer 工具提供了更精细的会话间流转能力,适用于需要链式处理或阶段性切换执行权的高级场景。
  5. 任务分解是艺术:好的任务分解遵循独立性、均匀性、完整性和可合并性原则。实践中推荐半动态分解策略,兼顾效率与灵活性。
  6. 资源管理不可忽视:Token 消耗、并发控制、超时和重试策略需要根据实际场景精心配置。监控和可观测性是生产化部署的基础。
  7. 质量优于数量:并非子 Agent 越多越好。过多的子 Agent 会增加调度开销和聚合复杂度。找到合理的分解粒度是关键。
  8. 主 Agent 的整合能力是瓶颈:无论子 Agent 的输出多么优秀,最终的输出质量取决于主 Agent 的整合能力。主 Agent 的 Prompt 设计应重点关注结果拼接、冲突解决和风格统一。
总结一句话:OpenClaw 的 Sub-Agent 架构是一种优雅而强大的多 Agent 协作模式,它将大模型的单线程推理扩展为多线程分布式计算,是构建复杂 AI 应用的核心基础设施之一。掌握其设计理念和工具链,能够显著提升 AI Agent 系统的任务处理能力、输出质量和执行效率。