智能子Agent协作详解
delegate_task 是 Hermes Agent 的并行多智能体任务分发机制,允许一个主 Agent(Parent)同时 Spawn 多个子 Agent(Children)并行处理独立子任务。
架构原理
主 Agent(Parent)
│
├── delegate_task(task="分析销售数据")
│ └── 子Agent-A:分析销售趋势
│
├── delegate_task(task="生成报表") ← 并行同时执行
│ └── 子Agent-B:生成图表
│
└── delegate_task(task="发送通知")
└── 子Agent-C:发送邮件/微信
关键机制
| 机制 | 说明 |
|---|---|
| ThreadPoolExecutor | 子 Agent 在独立线程中并行运行 |
| 隔离上下文 | 每个子 Agent 有独立 conversation history,不继承父 Agent 的中间过程 |
| 工具限制 | 子 Agent 禁用 delegate_task、clarify、memory(写)、send_message、execute_code |
| 文件系统协调层 | 并发子 Agent 共享文件系统时,通过文件锁协调避免写冲突 |
| Interrupt 传播 | 父 Agent 的 interrupt() 会级联传播到所有子 Agent |
两种角色
| 角色 | 说明 | 嵌套能力 |
|---|---|---|
| leaf(默认) | 叶子节点,只能执行任务,不能再分派 | ❌ 不能再 spawn |
| orchestrator | 编排者,可以 spawn 自己的 worker | ✅ 可嵌套(需 max_spawn_depth >= 2) |
配置参数
delegation:
max_concurrent_children: 3 # 单批次最大并行子Agent数
max_spawn_depth: 1 # 1=flat,2=orchestrator可嵌套
orchestrator_enabled: true # 全局开关
subagent_auto_approve: false # 子Agent危险命令是否自动批准
使用方式
单任务分发
delegate_task(
goal="帮我分析这份销售数据,找出Top10商品",
context="数据在 /data/sales.csv",
toolsets=["file", "terminal"]
)
批量并行分发
delegate_task(tasks=[
{"goal": "分析销售数据", "context": "文件1"},
{"goal": "分析库存数据", "context": "文件2"},
{"goal": "分析客户数据", "context": "文件3"},
])
真实案例
案例1:五金门店日报并行分析
delegate_task(tasks=[
{
"goal": """你是销售分析Agent。请分析今天销售数据,给出:
1) 销售额/订单数
2) Top5爆款商品
3) 与昨日对比
4) 异常预警""",
"context": "数据库: wujin_db, 表: orders, 日期: 2026-04-29",
"toolsets": ["terminal", "file"]
},
{
"goal": """你是库存分析Agent。请分析今天库存数据,给出:
1) 安全库存预警(低于安全线的商品)
2) 今日出库TOP10
3) 需要补货的商品列表""",
"context": "数据库: wujin_db, 表: inventory, 日期: 2026-04-29",
"toolsets": ["terminal", "file"]
},
{
"goal": """你是员工绩效Agent。请分析今天员工表现,给出:
1) 每位员工的订单数和销售额
2) 业绩排名
3) 是否有迟到早退""",
"context": "数据库: wujin_db, 表: employees, 日期: 2026-04-29",
"toolsets": ["terminal", "file"]
}
])
案例2:竞品调研(orchestrator 嵌套场景)
delegate_task(
goal="你是一个调研编排者。帮我调研竞品A/B/C的以下信息:价格体系、热销产品、营销策略。每个竞品分配一个子Agent,最后汇总成对比报告",
context="竞品列表:品牌A、品牌B、品牌C",
role="orchestrator" # 允许继续分派
)
案例3:批量文档处理
delegate_task(tasks=[
{"goal": "总结这份合同的关键条款", "context": "文件: /contracts/合同A.pdf"},
{"goal": "总结这份合同的关键条款", "context": "文件: /contracts/合同B.pdf"},
{"goal": "总结这份合同的关键条款", "context": "文件: /contracts/合同C.pdf"},
{"goal": "总结这份合同的关键条款", "context": "文件: /contracts/合同D.pdf"},
])
# 4个合同同时处理,比串行快4倍
五金AI智能体实际应用
你之前做的五金AI智能体分析体系(Agent-01到Agent-06)实际上就是这种模式的雏形:
主控Agent
├── Agent-01 数据采集 ──┐
├── Agent-02 每日分析 ──┼── ClickHouse ── Agent-06 预警推送
├── Agent-03 库存预测 ──┘
├── Agent-04 供应商分析
└── Agent-05 财务月报
delegate_task 把这个能力内置成原生工具,可以在一个对话内自动完成协作编排。