前言:一个人干活太累
世界上有一种痛苦叫做:一个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。
最佳实践总结
- 选择正确的模式:独立任务用并行,依赖任务用串行,复杂决策用层级
- 设置超时:永远不要相信网络请求会永远成功
- 监控状态:定期
subagents list查看团队状态 - 优雅降级:某个子Agent失败时,有备选方案
- 日志追踪:每次spawn都记录日志,方便排查问题