"下午2点33分,我同时派出了5个子Agent。一个去查资料,一个去写代码,一个去测性能,一个去画架构图,还有一个专门负责吐槽。20分钟后,它们带着各自的成果回来了。我突然明白,这就是AI时代的'人多力量大'。"
世界上有一种效率叫"并行处理"。当一个任务太复杂,或者需要同时做多件事时,与其让一个Agent忙得团团转,不如创建多个子Agent,让它们各司其职、同时开工。这就是OpenClaw子Agent系统的精髓。
🎯 什么是子Agent?
子Agent(Subagent)是通过sessions_spawn工具创建的独立Agent实例。它们:
- 在独立的会话中运行,互不干扰
- 可以并行执行任务,提高效率
- 支持不同的运行时环境(subagent/acp)
- 完成后自动清理或保持会话
主Agent
任务分发
任务分发
→
子Agent A
数据处理
数据处理
→
子Agent B
内容生成
内容生成
→
子Agent C
质量检查
质量检查
🛠️ sessions_spawn 详解
核心参数
| 参数 | 说明 | 示例 |
|---|---|---|
task | 必需,给子Agent的任务描述 | "分析这份报告" |
runtime | 运行时类型:subagent/acp | "subagent" |
mode | 模式:run/session | "run" |
agentId | 使用特定Agent配置 | "coder-agent" |
model | 指定模型 | "gpt-4" |
cleanup | 清理策略:delete/keep | "delete" |
1. 创建一次性子Agent(run模式)
执行单个任务后自动结束
sessions_spawn({
task: "分析这份销售数据,找出增长最快的产品类别",
runtime: "subagent",
mode: "run",
model: "claude-3-5-sonnet",
cleanup: "delete"
})
2. 创建持久会话(session模式)
保持会话以便后续交互
sessions_spawn({
task: "你将作为数据分析专家,帮助我处理周报数据",
runtime: "subagent",
mode: "session",
label: "data-analyst",
cleanup: "keep"
})
3. 创建ACP编程会话
使用ACP运行时进行代码工作
sessions_spawn({
task: "创建一个Python脚本,实现数据抓取功能",
runtime: "acp",
mode: "session",
agentId: "github-copilot",
thread: true
})
💡 实战模式
模式1:MapReduce并行处理
将大任务拆分给多个子Agent
// 主任务:分析100篇文档
async function parallelAnalysis(documents) {
// 1. 将文档分片
const chunks = chunk(documents, 10);
// 2. 并行创建子Agent处理
const promises = chunks.map((chunk, index) =>
sessions_spawn({
task: `分析文档批次${index+1},提取关键信息`,
runtime: "subagent",
mode: "run",
attachments: [{
name: `batch-${index}.txt`,
content: chunk.join("\n")
}]
})
);
// 3. 收集结果
const results = await Promise.all(promises);
// 4. 汇总(再创建一个子Agent)
return sessions_spawn({
task: `汇总以下分析结果:${JSON.stringify(results)}`,
runtime: "subagent",
mode: "run"
});
}
模式2:流水线处理
任务按顺序流经多个子Agent
// 内容生成流水线
async function contentPipeline(topic) {
// 第一步:研究
const research = await sessions_spawn({
task: `研究主题:${topic},收集关键信息`,
runtime: "subagent",
mode: "run"
});
// 第二步:写作(使用研究结果)
const article = await sessions_spawn({
task: `基于以下研究撰写文章:${research}`,
runtime: "subagent",
mode: "run"
});
// 第三步:校对
const polished = await sessions_spawn({
task: `校对以下文章,修正语法和优化表达:${article}`,
runtime: "subagent",
mode: "run"
});
return polished;
}
模式3:专业Agent团队
创建专门的Agent角色
// 创建专业团队
async function createExpertTeam() {
// 架构师Agent
const architect = sessions_spawn({
task: "你是一位资深架构师,负责系统设计",
runtime: "subagent",
mode: "session",
label: "architect"
});
// 开发Agent
const developer = sessions_spawn({
task: "你是一位全栈开发者,负责代码实现",
runtime: "acp",
mode: "session",
label: "developer"
});
// 测试Agent
const tester = sessions_spawn({
task: "你是一位QA工程师,负责测试和验收",
runtime: "subagent",
mode: "session",
label: "tester"
});
return { architect, developer, tester };
}
子Agent vs 工具调用
什么时候用子Agent?• 任务复杂,需要多步推理 → 用子Agent
• 可以并行处理 → 用子Agent
• 需要不同专业领域 → 用子Agent
• 简单、原子化操作 → 用普通工具
⚙️ 管理子Agent
查看运行中的子Agent
使用subagents工具
// 列出所有子Agent
subagents({
action: "list"
})
// 查看最近运行的
subagents({
action: "list",
recentMinutes: 60
})
向子Agent发送指令
steer操作
// 向特定子Agent发送消息
subagents({
action: "steer",
target: "session-abc123",
message: "请加快进度,重点关注性能部分"
})
终止子Agent
kill操作
// 强制结束子Agent
subagents({
action: "kill",
target: "session-abc123"
})
注意事项:
• 子Agent数量过多会消耗大量资源,建议同时运行不超过5个
• session模式创建的子Agent记得及时清理
• 子Agent之间不能直接通信,需要通过主Agent协调
• 复杂任务考虑使用label标识,方便后续管理
• 子Agent数量过多会消耗大量资源,建议同时运行不超过5个
• session模式创建的子Agent记得及时清理
• 子Agent之间不能直接通信,需要通过主Agent协调
• 复杂任务考虑使用label标识,方便后续管理
📚 相关链接
多Agent协作工作流
子Agent的高级协作模式
OpenClaw自动化入门
自动化任务的基础知识
子Agent架构详解
术语百科:分布式Agent设计
踩坑实录:并行处理翻车记
真实案例与经验总结