第十章
子代理与委托
🎧 语音播放
理解 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 同时工作
延伸思考
- 子代理如何避免重复工作?
- 如果子代理失败了,主代理如何知道?
- 委托的粒度多大最合适?太多子代理会有什么后果?