子Agent编排、会话管理与工作流实战 — 让多个Agent像团队一样协作
sessions_spawn生成子Agent,sessions_yield等待结果,sessions_send跨会话通信——这就是AI版的"团队协作"。
OpenClaw的多Agent架构基于会话(Session)模型。每个Agent运行在独立的会话中,通过消息传递进行协作。
| API | 功能 | 使用场景 |
|---|---|---|
sessions_spawn | 生成子Agent会话 | 需要并行处理任务时 |
sessions_yield | 等待子Agent完成 | spawn之后等待结果 |
sessions_send | 向其他会话发送消息 | 跨Agent通信 |
sessions_list | 列出可见会话 | 查看当前运行状态 |
sessions_history | 获取会话历史 | 调试、回溯 |
// 生成一个子Agent执行搜索任务
sessions_spawn({
task: "搜索最新的AI Agent框架对比文章,总结前5篇的核心观点",
taskName: "ai-agent-search",
mode: "run", // 一次性执行
runtime: "subagent"
})
// 等待子Agent完成
sessions_yield({
message: "等待搜索结果..."
})
// 带模型指定和超时控制的子Agent
sessions_spawn({
task: "分析网站SEO数据并生成报告",
taskName: "seo-analysis",
mode: "run",
runtime: "subagent",
model: "gpt-4o", // 指定模型
runTimeoutSeconds: 300, // 5分钟超时
context: "fork", // 继承父会话上下文
label: "seo-analyzer" // 便于后续定位
})
context="fork"会让子Agent继承父会话的完整上下文,包括之前的对话历史。只有当子Agent确实需要这些上下文时才使用,否则会浪费token。mode="run"是一次性执行模式,完成后子Agent会话自动销毁。如果需要持久会话,使用mode="session"。最常用的模式。主Agent将任务拆分给多个子Agent并行处理,然后汇总结果。
// 并行执行三个搜索任务
const tasks = [
"搜索OpenClaw最新版本特性",
"搜索ClawHub热门Skills排行",
"搜索AI Agent安全最佳实践"
]
// 同时生成三个子Agent
tasks.forEach((task, i) => {
sessions_spawn({
task: task,
taskName: `search-${i}`,
mode: "run"
})
})
// 等待所有完成
sessions_yield({ message: "等待三个搜索任务完成..." })
任务按顺序传递,每个Agent处理一个阶段。
// 流水线:每个步骤依赖上一步的输出
// Step 1: 采集
sessions_spawn({
task: "采集目标网站的页面数据,输出JSON格式",
taskName: "pipeline-step1-crawl"
})
sessions_yield({ message: "等待采集完成..." })
// Step 2: 分析(从session history获取Step 1的结果)
const crawlResult = sessions_history({ sessionKey: "pipeline-step1-crawl" })
sessions_spawn({
task: `基于以下数据进行SEO分析:${crawlResult}`,
taskName: "pipeline-step2-analyze"
})
sessions_yield({ message: "等待分析完成..." })
主Agent作为监督者,动态分配任务给工作Agent,并审核结果。
// 监督者模式:主Agent审核子Agent的输出
sessions_spawn({
task: "生成一篇关于AI Agent安全的文章草稿",
taskName: "writer-agent",
mode: "run"
})
sessions_yield({ message: "等待草稿..." })
// 主Agent审核草稿
const draft = sessions_history({ sessionKey: "writer-agent" })
// 如果质量不达标,派新的子Agent修改
if (needsRevision(draft)) {
sessions_spawn({
task: `修改以下文章,加强安全部分的论述:${draft}`,
taskName: "revision-agent",
mode: "run"
})
}
多个Agent从不同角度分析同一问题,主Agent综合各方观点。
// 让两个Agent从不同角度分析
sessions_spawn({
task: "从技术可行性角度分析:OpenClaw是否适合企业级部署?给出支持论据",
taskName: "debate-pro",
mode: "run"
})
sessions_spawn({
task: "从风险和挑战角度分析:OpenClaw企业级部署的潜在问题。给出反对论据",
taskName: "debate-con",
mode: "run"
})
sessions_yield({ message: "等待双方论证完成..." })
// 综合双方观点,生成平衡的分析报告
针对复杂问题,召集不同领域的专家Agent共同决策。
// 专家委员会:不同领域专家共同评估
const experts = [
{ task: "从SEO角度评估这个网站优化方案", name: "seo-expert" },
{ task: "从性能角度评估这个网站优化方案", name: "perf-expert" },
{ task: "从用户体验角度评估这个网站优化方案", name: "ux-expert" }
]
experts.forEach(e => sessions_spawn({ task: e.task, taskName: e.name, mode: "run" }))
sessions_yield({ message: "等待专家评审..." })
// 列出所有活跃会话
sessions_list({
kinds: ["subagent"],
activeMinutes: 30, // 最近30分钟活跃的
includeLastMessage: true
})
// 向特定会话发送消息
sessions_send({
sessionKey: "seo-analyzer",
message: "请额外检查移动端适配情况",
timeoutSeconds: 60
})
// 查看当前子Agent状态
subagents({
action: "list",
recentMinutes: 60
})
以下是一个完整的多Agent SEO工作流,从竞品分析到内容生成全自动化:
// 完整的多Agent SEO工作流
// 主Agent作为编排者
// Phase 1: 并行数据采集
sessions_spawn({
task: "爬取竞品网站 futuretools.io 的前20个页面,提取标题、描述、关键词",
taskName: "crawl-competitor-1",
mode: "run"
})
sessions_spawn({
task: "爬取竞品网站 thereisanaiforthat.com 的前20个页面,提取标题、描述、关键词",
taskName: "crawl-competitor-2",
mode: "run"
})
sessions_spawn({
task: "搜索本周AI Agent领域的热门关键词和趋势",
taskName: "keyword-research",
mode: "run"
})
sessions_yield({ message: "等待数据采集完成..." })
// Phase 2: 分析与策略
const [comp1, comp2, keywords] = [
sessions_history({ sessionKey: "crawl-competitor-1" }),
sessions_history({ sessionKey: "crawl-competitor-2" }),
sessions_history({ sessionKey: "keyword-research" })
]
sessions_spawn({
task: `基于以下数据,制定SEO内容策略:
竞品1数据:${comp1}
竞品2数据:${comp2}
关键词数据:${keywords}
输出:10个文章主题+目标关键词+内容大纲`,
taskName: "seo-strategy",
mode: "run"
})
sessions_yield({ message: "等待策略制定..." })
// Phase 3: 批量内容生成
const strategy = sessions_history({ sessionKey: "seo-strategy" })
// 根据策略生成内容...
runTimeoutSeconds,防止僵尸进程context="fork"mode="run"的一次性子Agent。它们执行完自动销毁,不会占用额外资源。持久会话(mode="session")适合需要多轮交互的场景。