核心概念
sessions_spawn 是 OpenClaw 的子 Agent 隔离启动接口。每次调用会创建一个全新的独立 Session,拥有自己独立的上下文窗口,不会继承父 Session 的对话历史。
sessions_spawn({ task: "任务描述", runtime: "subagent", context: "isolated" // ← 关键:isolated = 完全独立上下文 })两种隔离模式
模式 | 含义 | 适用场景 |
|---|---|---|
context: "isolated" | 全新 Session,无父会话历史 | 子任务独立执行,不需参考主对话 |
context: "fork" | 复制父 Session transcript 到子 Session | 子任务需要当前对话上下文 |
默认是 isolated,也是防上下文腐败的核心——每次任务都从干净状态开始。
为什么能防止上下文腐败
主 Session(负责规划/调度) ├── sessions_spawn(task A, isolated) → Session A(独立上下文) │ └── 结果返回主 Session ├── sessions_spawn(task B, isolated) → Session B(独立上下文) │ └── 结果返回主 Session └── sessions_spawn(task C, isolated) → Session C(独立上下文) └── 结果返回主 Session任务并行/串行分发,各子任务上下文互不污染
主 Session 只保留最终结论,子 Session 的中间噪声不会回流
即使某个子任务上下文膨胀,爆炸范围也限制在那个 Session 内
配合使用的关键组件
组件 | 作用 |
|---|---|
sessions_yield | 等待子 Agent 完成,接收结果 |
sessions_send | 向指定 Session 发消息/指令 |
subagents(action=list) | 查看当前子 Agent 状态 |
实际防腐败流程示例
用户提出复杂任务(比如:分析3家公司财务) ↓ 主 Session 规划拆分:任务A、任务B、任务C ↓ sessions_spawn(taskA, isolated) → 独立 Session 分析公司A sessions_spawn(taskB, isolated) → 独立 Session 分析公司B sessions_spawn(taskC, isolated) → 独立 Session 分析公司C ↓ sessions_yield 等待三路结果 ↓ 主 Session 汇总结论(只注入最终结果,不是三家完整分析日志)关键点:子任务的中间过程(工具调用日志、思考过程)不会污染主 Session 的上下文。
回到上下文腐败问题
之前说的子 Agent 隔离就是这个思路。OpenClaw 的设计哲学之一就是:
不要让单一 Session 承担所有工作——让它变成调度者,而不是执行者。
这样即使单个任务很重,也只会撑爆那个子 Session,不会影响整体的稳定性和响应质量。