第十章

子代理与委托

🎧 语音播放

理解 Hermes 的并行任务处理能力

🎯 本章目标

  • 理解为什么要委托子代理
  • 掌握 delegate_task 工具的用法
  • 理解并行 vs 串行的权衡

📚 前置知识

  • 第五章的 Agent 循环

💡 学完收获

  • 能够使用子代理加速任务
  • 理解隔离上下文的概念

10.1 为什么要委托?

有些任务可以并行处理,有些任务是独立的:

💡 场景:市场调研

假设你要调研"AI Agent 现状"。你可以:

  • 方式 A(串行):先调研技术,再调研市场,再调研竞品... → 3x 时间
  • 方式 B(并行):派 3 个子代理同时调研,最后汇总 → 1x 时间

10.2 并行 vs 串行

串行 vs 并行

flowchart LR subgraph Serial["❌ 串行 — 总时间 3T"] A1["任务 A"] --> A2["任务 B"] --> A3["任务 C"] end subgraph Parallel["✅ 并行 — 总时间 T"] B1["任务 A"] B2["任务 B"] B3["任务 C"] end style Serial fill:#fee2e2,stroke:#ef4444 style Parallel fill:#d1fae5,stroke:#059669

10.3 delegate_task 工具

通过 delegate_task 工具可以启动子代理:

📤 delegate_task
tools/delegate_tool.py
{
  "name": "delegate_task",
  "parameters": {
    "goal": "What the subagent should do",
    "context": "Background information",
    "toolsets": ["web", "file"],
    "max_iterations": 30
  }
}

10.4 委托执行流程

委托执行流程 Delegation Flow

flowchart TD A["🧠 主 Agent"] --> B["📤 delegate_task"] B --> C["🎯 创建子 AIAgent"] C --> D["📋 独立上下文"] D --> E["⚙️ 独立迭代预算"] E --> F["🔄 子代理执行"] F --> G["📝 返回结果"] G --> A style A fill:#dbeafe,stroke:#2563eb style F fill:#d1fae5,stroke:#059669

10.5 上下文隔离

每个子代理有独立的上下文:

不共享
消息历史、工具调用记录各自独立
可传递
通过 context 参数共享关键信息
⚙️ 每个子代理有独立的 IterationBudget — 互不影响

10.6 线程池执行

多个子代理可以并行执行:

tools/delegate_tool.py
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
    futures = [
        executor.submit(agent.run_conversation, goal, context)
        for goal in goals
    ]
    results = [f.result() for f in futures]

10.7 使用场景

🔍 研究任务
多个子主题同时调研
📊 分析任务
多个数据源并行抓取
🧪 实验任务
多个方案同时验证
📝 创作任务
多个文档同时起草

📚 本章总结

本章重点:

  • 委托可以将任务并行化,大幅加速
  • 子代理有独立的上下文和迭代预算
  • 适合复杂任务的分解
  • 使用 ThreadPoolExecutor 实现并行

一句话记忆点: 委托就是"分而治之"——让多个 Agent 同时工作

延伸思考

  1. 子代理如何避免重复工作?
  2. 如果子代理失败了,主代理如何知道?
  3. 委托的粒度多大最合适?太多子代理会有什么后果?