OpenClaw多Agent编排实战

让你的AI团队像交响乐一样协作

前言:一个人干活太累

世界上有一种痛苦叫做:一个Agent干所有事。写代码、测代码、写文档、发通知——全是你一个人。这不是Agent,这是打工人。

OpenClaw的多Agent编排就是要解决这个问题。让专业的Agent干专业的事,而你只需要当好那个指挥家。

三种编排模式

并行模式

多个Agent同时开工

适合独立任务

串行模式

按顺序执行

适合流水线

层级模式

主Agent调度子Agent

适合复杂项目

并行模式:多线程的快乐

当你需要同时搜索多个主题、分析多个数据源时,并行模式是你的好朋友。

// 并行启动多个子Agent
const agents = await Promise.all([
  sessions_spawn({
    task: "搜索OpenAI最新动态",
    runtime: "subagent",
    mode: "run"
  }),
  sessions_spawn({
    task: "搜索Anthropic最新动态",
    runtime: "subagent",
    mode: "run"
  }),
  sessions_spawn({
    task: "搜索Google AI最新动态",
    runtime: "subagent",
    mode: "run"
  })
]);

// 等待所有结果
const results = await Promise.all(
  agents.map(a => waitForCompletion(a.sessionKey))
);
并行模式最佳场景:竞品监控(同时追踪多个对手)、多源聚合(RSS、API、爬虫同时跑)、批量处理(多个文件并行分析)。

串行模式:流水线的艺术

当任务之间有依赖关系时,串行模式更合适。比如:先搜索→再分析→最后写报告。

// 串行执行流水线
const searchData = await sessions_spawn({
  task: "搜索AI行业新闻,收集10条热点",
  runtime: "subagent",
  mode: "run"
});

const analysisResult = await sessions_spawn({
  task: `分析以下数据:${searchData.result}`,
  runtime: "subagent",
  mode: "run"
});

const report = await sessions_spawn({
  task: `生成报告:${analysisResult.result}`,
  runtime: "subagent",
  mode: "run"
});

层级模式:CEO和员工的关系

这是最强大的模式。主Agent像CEO一样做决策,子Agent像员工一样执行具体任务。

// 主Agent创建持久会话
const ceo = await sessions_spawn({
  task: "你是项目管理者,协调多个专家Agent完成任务",
  runtime: "subagent",
  mode: "session",
  label: "project-manager"
});

// 主Agent可以随时调度子Agent
await sessions_send({
  sessionKey: ceo.sessionKey,
  message: "让code-agent去修复那个bug"
});

// 查看子Agent状态
const status = await subagents({
  action: "list",
  recentMinutes: 60
});

核心工具详解

sessions_spawn:孵化子Agent

参数 说明 示例
task 任务描述 "搜索AI新闻"
runtime 运行时类型 "subagent" 或 "acp"
mode 执行模式 "run"(一次性) 或 "session"(持久)
agentId 指定Agent类型 "code-agent"
label 会话标签 "seo-worker"
thread 是否绑定线程 true (Discord用)

subagents:管理子Agent团队

// 列出活跃的子Agent
const team = await subagents({
  action: "list",
  recentMinutes: 30
});

// 向某个子Agent发送指令
await subagents({
  action: "steer",
  target: "seo-worker",
  message: "暂停当前任务,先处理紧急bug"
});

// 终止某个子Agent
await subagents({
  action: "kill",
  target: "failed-agent"
});

实战案例:AI新闻自动生产线

我们用多Agent编排构建了一个自动化的AI新闻生产系统:

// 妙趣AI的新闻生产线
async function produceDailyNews() {
  // 第一阶段:并行搜索
  const sources = await Promise.all([
    spawnAgent("搜索OpenAI博客"),
    spawnAgent("搜索Anthropic动态"),
    spawnAgent("搜索Hugging Face"),
    spawnAgent("搜索Hacker News AI话题")
  ]);
  
  // 第二阶段:汇总分析
  const analyst = await sessions_spawn({
    task: "汇总以上搜索结果,精选10条最有价值的新闻",
    runtime: "subagent",
    mode: "run"
  });
  
  // 第三阶段:内容生产
  const writer = await sessions_spawn({
    task: `生成妙趣风格的新闻日报HTML,数据:${analyst.result}`,
    runtime: "subagent",
    mode: "run"
  });
  
  // 第四阶段:发布
  await publishToWebsite(writer.result);
  await notifyToDiscord(writer.result);
}
生产效率:单人执行需要4小时,多Agent并行只需45分钟。这才是真正的工业化。

常见问题与解决方案

Q: 子Agent卡住怎么办?

A: 设置超时时间,使用runTimeoutSeconds参数:

await sessions_spawn({
  task: "执行任务",
  runtime: "subagent",
  runTimeoutSeconds: 300  // 5分钟超时
});

Q: 如何让主Agent知道子Agent完成了?

A: 使用sessions_yield让主Agent等待:

// 启动子Agent后
await sessions_yield({
  message: "等待子Agent完成..."
});

Q: 子Agent之间如何通信?

A: 通过主Agent中转,或者使用共享的存储空间(如文件系统或数据库)。

重要提醒:不要无限spawn子Agent。每个子Agent都会消耗资源。设置合理的并发限制,比如同时最多运行5个子Agent。

最佳实践总结

  1. 选择正确的模式:独立任务用并行,依赖任务用串行,复杂决策用层级
  2. 设置超时:永远不要相信网络请求会永远成功
  3. 监控状态:定期subagents list查看团队状态
  4. 优雅降级:某个子Agent失败时,有备选方案
  5. 日志追踪:每次spawn都记录日志,方便排查问题