🎭

Multi-Agent Orchestration 是什么?

多Agent编排详解 - 让Agent们组队干活

世界上有一种协作叫 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之间信息不一致