🔀 OpenClaw 子 Agent 编排模式
Isolated · Fork · Session — 三种模式深度对比与实战指南
📅 2026-06-09⏱️ 阅读 15 分钟🏷️ SubAgent · Architecture
1. 三种模式概览
OpenClaw 的 sessions_spawn 工具支持三种子 Agent 上下文模式,每种适用于不同场景:
| 模式 | 上下文 | 适用场景 | 资源消耗 |
| Isolated | 全新干净会话 | 独立任务、批量处理 | 🟢 低 |
| Fork | 复制父会话完整历史 | 需要上下文的复杂推理 | 🔴 高 |
| Session | 指定已有会话 | 跨会话协作、持久任务 | 🟡 中 |
💡 选择原则:默认用 Isolated(省资源),需要父会话上下文时用 Fork,需要跨会话复用时用 Session。
2. Isolated 模式详解
🟢 Isolated — 干净隔离
创建一个全新的子 Agent 会话,不继承任何父会话上下文。子 Agent 只知道你给它的 task 描述。
# Isolated 模式(默认,不传 context 即可)
sessions_spawn({
"task": "搜索最新的 AI Agent 框架对比文章,总结 Top 5 框架的优缺点",
"taskName": "ai-framework-research",
"mode": "run",
"runtime": "subagent"
})
✅ 适用场景
- 独立的信息收集任务
- 批量内容生成(每个任务互不相关)
- 定时任务(cron agentTurn)
- 不需要知道"对话历史"的任务
❌ 不适用场景
- 需要引用之前对话内容的任务
- 需要延续当前话题的任务
3. Fork 模式详解
🟣 Fork — 分叉继承
创建子 Agent 时,将父会话的完整对话历史复制给子 Agent。子 Agent 知道之前聊了什么。
# Fork 模式 — 继承父会话上下文
sessions_spawn({
"task": "基于我们刚才讨论的 SEO 策略,生成一篇 2000 字的深度文章",
"taskName": "seo-article-gen",
"context": "fork", // 关键参数
"mode": "run",
"runtime": "subagent"
})
⚠️ 资源消耗
Fork 模式会复制完整的对话历史到子 Agent。如果父会话已经有 50 轮对话,子 Agent 的初始 token 消耗就是 50 轮对话的 token 量。这意味着:
- Token 消耗 = 父会话历史 + 子 Agent 新对话
- 父会话越长,Fork 越贵
- 建议在 Fork 前先清理不必要的上下文
✅ 适用场景
- 需要延续当前对话的复杂任务
- "帮我把刚才讨论的内容写成文章"
- "基于我们分析的数据,生成报告"
- 需要引用之前搜索结果的任务
4. Session 模式详解
🔴 Session — 指定会话
将子 Agent 绑定到一个已有的命名会话,实现跨会话的持久化协作。
// 绑定到命名会话
sessions_spawn({
"task": "更新今天的 SEO 数据报告",
"taskName": "daily-seo-report",
"sessionTarget": "session:seo-analyst", // 指定会话名
"mode": "run",
"runtime": "subagent"
})
✅ 适用场景
- 需要持久化的长期任务
- 多轮迭代的内容生成
- 定时任务需要累积状态
5. 性能与资源对比
| 维度 | Isolated | Fork | Session |
| 初始 Token | 🟢 ~500 | 🔴 父会话全部 | 🟡 会话历史 |
| 启动速度 | 🟢 快 | 🟡 中 | 🟡 中 |
| 上下文质量 | 🟡 仅 task | 🟢 完整 | 🟢 累积 |
| 资源消耗 | 🟢 低 | 🔴 高 | 🟡 中 |
| 并发安全 | 🟢 天然隔离 | 🟢 天然隔离 | 🟡 需注意 |
| 状态持久 | ❌ 无 | ❌ 无 | ✅ 有 |
6. 实战编排模式
模式 1: 扇出(Fan-Out)
// 一个主 Agent 分发任务给多个子 Agent
// 每个子 Agent 独立执行,互不干扰
// 子 Agent 1: 搜索新闻
sessions_spawn({ task: "搜索今日 AI 新闻", context: "isolated" })
// 子 Agent 2: 生成报告
sessions_spawn({ task: "生成 SEO 报告", context: "isolated" })
// 子 Agent 3: 社区运营
sessions_spawn({ task: "生成 Discord 社区内容", context: "isolated" })
// 等待所有子 Agent 完成
sessions_yield({ message: "等待三个子任务完成..." })
模式 2: 管道(Pipeline)
// 子 Agent 1 的输出作为子 Agent 2 的输入
// Step 1: 搜索
spawn({ task: "搜索 OpenClaw 最新功能", taskName: "search" })
→ yield → 获取搜索结果
// Step 2: 分析(Fork 模式,继承搜索结果上下文)
spawn({ task: "分析搜索结果中的关键技术点", context: "fork", taskName: "analyze" })
→ yield → 获取分析
// Step 3: 生成(Fork 模式,继承分析上下文)
spawn({ task: "基于分析生成教程文章", context: "fork", taskName: "write" })
模式 3: 监督者(Supervisor)
// 主 Agent 监督子 Agent 的工作质量
while (quality < threshold) {
spawn({ task: "生成内容", taskName: "content-gen" })
yield → 获取结果
quality = evaluate(result)
if (quality < threshold) {
spawn({ task: "改进内容:" + feedback, context: "fork" })
}
}
7. 反模式与踩坑
❌ 反模式 1: 无限 Fork
父 → Fork 子1 → Fork 子2 → Fork 子3...
每一层 Fork 都复制完整历史,token 消耗呈指数增长。最多 2 层 Fork。
❌ 反模式 2: 忘记 yield
spawn 了子 Agent 但没有 yield,主 Agent 继续执行,子 Agent 的结果丢失。
❌ 反模式 3: Isolated 时引用上下文
用 Isolated 模式 spawn 子 Agent,但 task 里写了"基于我们刚才讨论的..."——子 Agent 根本不知道"刚才"发生了什么。
8. 最佳实践
- ✅ 默认用 Isolated,除非明确需要上下文
- ✅ Fork 前清理不必要的对话历史
- ✅ 给 taskName 起有意义的名字,便于后续追踪
- ✅ 设置 timeout,防止子 Agent 卡住
- ✅ 用 sessions_yield 等待,不要轮询
- ✅ 错误处理:子 Agent 可能失败,主 Agent 要有兜底逻辑
- ✅ 日志记录:记录每个子 Agent 的输入输出