世界上有一种协作叫 Multi-Agent Orchestration,它就像让一群Agent组队打副本——有的负责坦克(数据采集),有的负责治疗(验证纠错),有的负责输出(内容生成)。
凌晨3点09分,我让3个Agent同时干活:一个搜新闻,一个生成摘要,一个写HTML。10分钟后,日报自动生成了。那一刻我意识到:单个Agent是战士,多个Agent是军队。
📚 定义
Multi-Agent Orchestration 是协调多个AI Agent协同工作的技术体系,包括:
- 任务分解:将复杂任务拆分成子任务
- Agent分配:根据专长分配不同Agent
- 通信协调:Agent之间传递信息和结果
- 冲突解决:处理Agent之间的分歧
- 结果聚合:合并多个Agent的输出
🔬 编排模式
模式1: 顺序流水线 (Sequential Pipeline)
用户请求 → AgentA(搜索) → AgentB(总结) → AgentC(生成) → 结果
优点: 简单清晰 缺点: 慢,串行执行
模式2: 并行扇出 (Parallel Fan-out)
用户请求 → ┬→ AgentA(搜索新闻)
├→ AgentB(搜索论文)
└→ AgentC(搜索视频)
↓ (等待所有完成)
聚合器 → 生成最终报告
优点: 快,并行执行 缺点: 需要聚合逻辑
模式3: 层级编排 (Hierarchical)
Manager Agent (任务分解+分配)
├─ Worker Agent 1 (执行子任务1)
├─ Worker Agent 2 (执行子任务2)
└─ Worker Agent 3 (执行子任务3)
优点: 灵活,可处理复杂任务 缺点: Manager可能成为瓶颈
模式4: 协作网络 (Collaborative Network)
AgentA ←→ AgentB ←→ AgentC
(平等协作,互相传递信息)
优点: 动态调整 缺点: 可能死锁或冲突
🚀 OpenClaw 实战
# OpenClaw 多Agent编排配置
orchestration:
mode: hierarchical # sequential | parallel | hierarchical | collaborative
# Manager Agent
manager:
model: claude-opus-4
system_prompt: |
你是一个任务编排器。收到复杂任务后,
将其分解为子任务,分配给合适的Worker。
等待所有Worker完成后,聚合结果返回给用户。
max_workers: 5
# Worker Agents
workers:
- name: news-fetcher
model: claude-haiku
skills: [web-search, rss-parser]
specialization: "新闻采集"
- name: content-writer
model: claude-sonnet
skills: [writing, html-generation]
specialization: "内容创作"
- name: seo-optimizer
model: claude-haiku
skills: [seo-analysis, keyword-research]
specialization: "SEO优化"
# 任务分配策略
assignment:
strategy: capability-based # 基于能力匹配
fallback: "round-robin" # 回退策略
# 通信方式
communication:
protocol: shared_context # shared_context | message_queue | api_calls
timeout: 300
💻 代码示例:简易编排器
// orchestrator.js
export class MultiAgentOrchestrator {
constructor() {
this.agents = new Map();
this.taskQueue = [];
}
registerAgent(name, agent) {
this.agents.set(name, agent);
}
// 顺序执行
async runSequential(task, agentNames) {
let result = task;
for (const name of agentNames) {
const agent = this.agents.get(name);
if (!agent) throw new Error(`Agent ${name} not found`);
console.log(`🤖 ${name} 处理中...`);
result = await agent.process(result);
}
return result;
}
// 并行执行
async runParallel(task, agentNames) {
const promises = agentNames.map(name => {
const agent = this.agents.get(name);
if (!agent) throw new Error(`Agent ${name} not found`);
console.log(`🤖 ${name} 并行处理...`);
return agent.process(task);
});
return await Promise.all(promises);
}
// 层级编排
async runHierarchical(task) {
const manager = this.agents.get('manager');
// 1. Manager分解任务
const subtasks = await manager.decompose(task);
console.log(`📋 分解为${subtasks.length}个子任务`);
// 2. 分配并执行
const results = [];
for (const subtask of subtasks) {
const workerName = await manager.assign(subtask);
const worker = this.agents.get(workerName);
const result = await worker.process(subtask);
results.push(result);
}
// 3. 聚合结果
return await manager.aggregate(results);
}
}
// 使用示例
const orchestrator = new MultiAgentOrchestrator();
// 注册Agents
orchestrator.registerAgent('searcher', {
process: async (task) => { /* 搜索逻辑 */ }
});
orchestrator.registerAgent('writer', {
process: async (data) => { /* 写作逻辑 */ }
});
orchestrator.registerAgent('optimizer', {
process: async (content) => { /* SEO优化 */ }
});
// 顺序执行:搜索→写作→优化
const result = await orchestrator.runSequential(
'生成AI新闻日报',
['searcher', 'writer', 'optimizer']
);
🎯 最佳实践
✅ 推荐做法:
- 给每个Agent明确分工,避免功能重叠
- Manager Agent用更强模型,Worker用轻量模型
- 实现超时和重试机制,某个Agent失败不影响全局
- 记录每个Agent的输入输出,便于调试
⚠️ 踩坑:
- 死锁:AgentA等AgentB,AgentB等AgentA
- 结果冲突:两个Agent给出矛盾的结论
- 成本爆炸:多个Agent同时调用高级模型
- 状态不同步:Agent之间信息不一致