ORANGE BOOK · OPENCLAW

第九章 子代理与 AI 团队


一、为什么需要子代理

回想第八章的"早报"工作流:

1. 抓天气
2. 抓邮件
3. 抓微信
4. 抓日程
5. 抓新闻
6. 汇总

如果一步步串行跑,6 步合计 50 秒。如果前 5 步并行,总耗时 = max(5 步) ≈ 12 秒。

更大的问题是:复杂任务里"贵的脑子"和"便宜的手"应该分开。例如:

  • 主代理(贵脑子,DeepSeek-Reasoner / Claude Sonnet)做规划:决定要分几路、每路问什么;
  • 子代理(便宜手,DeepSeek-Chat / 本地 Qwen3-8b)执行:抓数据、做翻译、做提取。

子代理是"做大事 + 省钱"的关键基础设施

二、子代理的本质

子代理 = 从主代理派生出去的、独立会话、独立模型、独立超时的"小型 OpenClaw"。

关键属性:

属性 说明
独立会话 子代理看不到主代理的对话历史
独立模型 主代理用 Claude,子代理可以用 DeepSeek,省钱
独立工具 默认拿不到主代理的全部 Skills,要显式声明
独立超时 简单任务给 60 秒,复杂任务给 600 秒
并行 可以同时跑多个,最多默认 5 个
必须自包含 主代理必须把所有上下文塞进 instruction 里
完成后回报 通过 onComplete 把结果回传给主代理

三、第一个子代理:3 行代码

在 OpenClaw 的 tui 或 web 界面,主代理可以这样调用:

sessions_spawn({
  instruction: "查一下今天杭州的天气,输出一句话总结,含温度区间和是否需要带伞",
  model: "deepseek/deepseek-chat",
  timeout: 60
})

它会立刻派生一个子代理在后台跑,60 秒后把结果返回。

完整参数:

sessions_spawn({
  instruction: "<必填> 子代理的任务描述,要自包含所有上下文",
  model: "deepseek/deepseek-chat",   // 用什么模型
  skills: ["weather-cn"],            // 显式赋予哪些工具
  timeout: 60,                       // 最大执行时间(秒)
  thinking: false,                   // 是否启用"深度思考"模式
  onComplete: "总结结果给主代理",       // 完成后做什么
  onError: "abort"                   // 报错时怎么办:abort/retry/skip
})

四、并行:让 4 个子代理同时干

最大威力的玩法。例:早报场景

// 在主代理里
const tasks = [
  {
    instruction: "用 weather-cn 查今天杭州天气,输出一句话总结",
    skills: ["weather-cn"],
    model: "deepseek/deepseek-chat"
  },
  {
    instruction: "用 gmail-assistant 拉过去 24 小时的邮件,按紧急/重要/常规分类,每类不超过 3 条",
    skills: ["gmail-assistant"],
    model: "deepseek/deepseek-chat"
  },
  {
    instruction: "用 wechat-bridge 抓所有 @我 的群消息和重要私聊,最多 5 条",
    skills: ["wechat-bridge"],
    model: "deepseek/deepseek-chat"
  },
  {
    instruction: "用 calendar-sync 列今天日程,按时间排,最多 5 条",
    skills: ["calendar-sync"],
    model: "deepseek/deepseek-chat"
  }
];

const results = await Promise.all(tasks.map(t => sessions_spawn(t)));

注意:默认最多 5 个子代理并行。超过会被排队,避免速率限制。

主代理拿到 4 份返回,做最后的"汇总成一份早报"——这一步用贵的脑子(DeepSeek-Reasoner / Claude Sonnet)。

成本估算:4 个子代理 × DeepSeek-Chat(便宜)+ 1 个主代理 × DeepSeek-Reasoner(贵)= 每天 0.05 元,每月 1.5 元。

五、用斜杠命令直接玩

不写 JS 代码,在 tui / web 界面直接发:

/subagents spawn --model deepseek/deepseek-chat --timeout 60
帮我查 https://hacker-news.firebaseio.com 上最新 10 条头条,输出标题中文翻译。

OpenClaw 立刻给你弹出子代理 ID:#sa-7f3a9b2

/subagents list             # 列出所有运行中的子代理
/subagents info sa-7f3a9b2  # 查看一个子代理的状态
/subagents kill sa-7f3a9b2  # 杀掉
/subagents wait sa-7f3a9b2  # 阻塞主代理等它跑完

六、模型搭配的最佳实践

三档分配

任务难度        推荐模型              超时       并行数
─────────────  ───────────────────  ────────   ──────
简单任务        本地 qwen3-8b /      60s        4-5 个
(查询/分类)   DeepSeek-Chat
─────────────  ───────────────────  ────────   ──────
中等任务        DeepSeek-Chat /      180s       3-4 个
(总结/起草)   GPT-4.1-mini
─────────────  ───────────────────  ────────   ──────
复杂任务        DeepSeek-Reasoner /  600s       1-2 个
(决策/写代码) Claude Sonnet 4.6

在工作流里如何用

工作流配置里可以直接声明:

- name: 派 4 个子代理并行抓数据
  parallel:
    - skill: subagent
      args:
        instruction: "查天气..."
        model: deepseek/deepseek-chat
        timeout: 60
    - skill: subagent
      args:
        instruction: "拉邮件..."
        model: deepseek/deepseek-chat
        timeout: 60
    - skill: subagent
      args:
        instruction: "查日历..."
        model: deepseek/deepseek-chat
        timeout: 60
    - skill: subagent
      args:
        instruction: "找新闻..."
        model: deepseek/deepseek-chat
        timeout: 60
  output: data_pack

- name: 主代理汇总
  prompt: ./prompts/morning-brief.md
  inputs: { data: "{{data_pack}}" }
  model: deepseek/deepseek-reasoner
  output: brief

七、嵌套:编排者 + 工人

更复杂的场景里,你需要"主代理 → 编排者 → 工人"三层结构。

启用嵌套

默认 maxSpawnDepth: 1(子代理不能再派生子代理)。在 ~/.openclaw/openclaw.json

{
  "subagents": {
    "maxSpawnDepth": 2,
    "maxParallel": 5,
    "defaultTimeout": 120
  }
}

用法示意

例:写一份"行业研究报告"

主代理(你)
  ↓ 派生
研究编排者(subagent)
  ↓ 派生 5 个工人
  ├─ 工人 1:抓厂商 A 的官网
  ├─ 工人 2:抓厂商 B 的官网
  ├─ 工人 3:抓行业新闻
  ├─ 工人 4:抓券商研报
  └─ 工人 5:抓 Twitter / 知乎评论
        ↓
编排者汇总成一份初稿
  ↓
主代理审稿、润色、出最终版

完整示例代码(在主代理里):

sessions_spawn({
  instruction: `
    你是一名行业研究编排者。请按以下步骤执行:

    1. 派生 5 个工人子代理,分别抓取:
       - 厂商 A 官网产品页
       - 厂商 B 官网产品页
       - 36氪 / 虎嗅最近一个月相关文章
       - 雪球研报
       - 推特 / 知乎舆情

    2. 等所有工人返回,汇总成"行业研究初稿",包含:
       - 市场规模
       - 主要玩家与定位
       - 用户口碑
       - 价格趋势
       - 风险与机会

    3. 输出 Markdown 格式,5000 字内。
  `,
  model: "deepseek/deepseek-chat",
  timeout: 600,
  thinking: false
});

八、子代理的 5 大注意事项

1. 必须把上下文塞进 instruction

子代理看不到主代理的 memory、看不到用户的桌面文件,所有需要的它都得自己拿到

错例:

sessions_spawn({ instruction: "请按上面提到的格式输出" })  // ❌ "上面提到的"它不知道

正例:

sessions_spawn({
  instruction: `
请按以下格式输出:
| 序号 | 内容 | 评分 |

任务:分析 ~/Desktop/反馈.csv
  `
})

2. 并行别超过 5 个

更多会被外部 API 限流,反而更慢。

3. 简单任务不要用子代理

主代理自己就能算 2+3,再派子代理纯属浪费。

4. 永远设 timeout

不设的话死循环就把你的 API 余额烧空了。

5. 关键决策不要全权交子代理

子代理可以"做",但"决定要不要做"应该留给主代理(甚至留给你)。

九、什么时候该用子代理

不要为了用而用。下列场景别用子代理:

  • 任务总耗时 < 5 秒(启动子代理本身就有开销)
  • 子任务之间有强依赖(必须 A 完成再做 B),子代理只擅长并行
  • 任务本身就是模型能直接回答的(像"翻译这一句话")
  • 你的总预算 < 1 元/天(子代理虽然便宜但是会调多次)

十、实战:让 4 个 AI"一起选房"

需求:你和女朋友想在杭州滨江租一套房,想让 AI 替你24 小时盯各大平台,每天早上给一份"今日新房推荐"。

工作流

name: rent-hunt
schedule: "0 8 * * *"
context:
  city: 杭州
  district: 滨江
  budget_max: 6000
  must_have: [独立卫浴, 通燃气, 公寓楼/电梯, 近地铁1km内]
  avoid: [一楼, 顶楼, 朝北]

steps:
  - name: 派 4 个子代理抓不同平台
    parallel:
      - { skill: subagent, args: {
          instruction: "用 browser-pilot 抓贝壳 {{city}} {{district}} 不超过 {{budget_max}} 元的最新 50 条租房,输出 JSON 列表",
          skills: [browser-pilot],
          model: deepseek/deepseek-chat,
          timeout: 120
        }, output: beike }
      - { skill: subagent, args: {
          instruction: "抓自如",
          skills: [browser-pilot],
          model: deepseek/deepseek-chat,
          timeout: 120
        }, output: ziru }
      - { skill: subagent, args: {
          instruction: "抓蛋壳/相寓",
          skills: [browser-pilot],
          model: deepseek/deepseek-chat,
          timeout: 120
        }, output: danke }
      - { skill: subagent, args: {
          instruction: "抓闲鱼/豆瓣租房小组(个人房东)",
          skills: [browser-pilot],
          model: deepseek/deepseek-chat,
          timeout: 120
        }, output: c2c }

  - name: 主代理筛选+排序
    prompt: |
      综合 4 路数据:
      贝壳 {{beike}}
      自如 {{ziru}}
      蛋壳 {{danke}}
      闲鱼 {{c2c}}

      1. 去重(地址相似度 > 80% 视为同一套)
      2. 必须满足:{{must_have}}
      3. 排除:{{avoid}}
      4. 综合评分(位置/性价比/装修/通勤)
      5. 输出 Top 10
    model: deepseek/deepseek-reasoner
    output: top10

  - name: 推送
    skill: notify-bridge
    args:
      target: wechat:女朋友
      content: "{{top10}}"

跑一周,真正合适的房子会被打捞出来,你和女朋友只看 Top10

十一、子代理成本测算

以"早报 + 周报 + 租房 + 演唱会监控"4 个工作流为例:

工作流 频率 子代理用量 单次成本 月成本
早报 每天 1 次 4 子 + 1 主 ¥0.05 ¥1.5
周报 每周 1 次 4 子 + 1 主 ¥0.10 ¥0.4
租房 每天 1 次 4 子 + 1 主 ¥0.30 ¥9
演唱会监控 每分钟 1 次 1 子 ¥0.001 ¥45(注意!)

注意演唱会监控这种"高频"任务,别开子代理——直接用 browser-pilot 即可,主代理调度就好。本表是对照警示。

合理设计,4 个常用工作流月成本可以 < 15 元

十二、本章你应该完成的

  • 在 tui 里跑一次 sessions_spawn,体验子代理是怎么"派出去 + 回来"的
  • 改造你的"个人早报"工作流,把抓数据 4 步并行化
  • 至少看一次 openclaw workflow stats,确认成本在预算内
  • 关闭你不再需要的子代理,避免后台积压

本章一图回顾

        主代理(贵脑子,做决策)
              │
       sessions_spawn()
              │
   ┌──────────┼──────────┬──────────┬──────────┐
   ↓          ↓          ↓          ↓          ↓
  子1        子2        子3        子4        子5
(便宜手)(便宜手)(便宜手)(便宜手)(便宜手)
   ↓          ↓          ↓          ↓          ↓
        Promise.all 等所有人完成
              ↓
        主代理汇总,输出最终结果

下章预告

权力越大、责任越大。一个能动手的 AI 同时也是一个能"误伤"的 AI。下一章 第十章 安全与隐私 我们认真讨论:怎么把 OpenClaw 用得安全、API Key 不被偷、敏感数据不泄露、Prompt Injection 攻击不能得逞。