为什么需要子智能体

你有没有这种场景:

  • 让 AI 读 200 篇历史文档做死链检查,主对话卡了 5 分钟不能干别的;
  • 想同时调研 3 个竞品,但一轮一轮串行问太慢;
  • 有个长构建任务要跑,你却想在等待期间继续写另一篇稿子。

OpenClaw 的 sessions_spawn 就是为这些场景准备的:它能在后台拉起一个独立的子智能体(subagent),把活丢给它,主会话立刻腾出手。子智能体干完会把结果推回来,你不用守着。

本文所有命令都来自 OpenClaw 真实工具定义,可直接照抄。

核心命令:sessions_spawn

最关键的两个参数:

参数 取值 作用
task 文本 派给子智能体的任务描述(即它的初始 [Subagent Task])
taskName 小写字母/数字/- 稳定别名,便于在侧栏识别(必须以小写字母开头)
runtime subagent 子智能体运行时(默认就是这个)
visible true/false true=在控制面板侧栏可见、可回看;长活/可交付物建议开
mode run 一次性后台运行(默认就是 run)
cleanup delete/keep 隐藏子会话跑完删不删;visible=true 时始终保留
context isolated/fork isolated 干净上下文;fork 复制主会话上下文(须同模型)
cwd 路径 子智能体工作目录
runTimeoutSeconds 单次运行超时(0=不超时)

记住一个铁律:别用主会话去轮询子智能体状态。OpenClaw 完成时会主动推送结果,你挂机等回调即可。

三种典型用法

1. 后台长任务(visible 模式)

适合"要跑一会儿、跑完我想看过程也能看结果"的活,比如批量死链检查、长文重写:

sessions_spawn(
  task="读取 /root/.openclaw/workspace/money-plan/content-bank 下所有 markdown,
        逐篇检查内部链接是否失效,输出一份按文件归类的死链报告",
  taskName="deadlink-check",
  visible=true,
  runtime="subagent"
)

调用后它立刻出现在侧栏,你继续干别的。它跑完会发回一份带 sessionUrl 的结果,第二条是 Owner: <label>

2. 一次性并行跑批(mode=run)

想同时开 3 个调研互不干扰,各自 sessions_spawn 一次即可,它们是真并行:

sessions_spawn(task="调研竞品 A 的定价与功能,列要点", taskName="research-a", runtime="subagent")
sessions_spawn(task="调研竞品 B 的定价与功能,列要点", taskName="research-b", runtime="subagent")
sessions_spawn(task="调研竞品 C 的定价与功能,列要点", taskName="research-c", runtime="subagent")

3. 主会话等结果再继续(sessions_yield)

如果下一步必须拿到子智能体结果,主会话结尾调 sessions_yield,结果会在下一条消息回来,不会空等:

sessions_spawn(task="把这篇稿子翻译成英文并自检术语", taskName="translate-post", runtime="subagent")
sessions_yield(message="等翻译结果回来后,把英文版存档到 content-bank/")

实战:并行调研 + 汇总

一个能直接落地的组合拳:

  1. 同时 spawn 3 个调研子智能体(见用法 2);
  2. 主会话去做别的工作(写稿、回消息);
  3. 三个结果陆续推回后,再 spawn 一个 merge 子智能体,把三份要点合成对比表:
    sessions_spawn(
      task="把 research-a / research-b / research-c 三份结果合并成一张
             「功能 / 价格 / 适合人群」对比表,存到 content-bank/竞品对比.md",
      taskName="merge-research",
      visible=true,
      runtime="subagent"
    )
    

盯进度与取消

  • 看当前在跑哪些:subagents action=list
  • 取消某个:subagents action=cancel taskId=<id>

list 能列出后台工作、媒体生成、自动化运行,取消只对还没跑完的有效。

几个容易踩的坑

  1. 别轮询:新手最爱写个循环去 sessions_list/subagents 反复查,这是错的。完成会主动推送,挂机等即可。
  2. 上下文隔离:默认 context="isolated" 是干净上下文,子智能体看不到主会话历史;若它需要你的对话背景,用 context="fork"(注意会复制主会话 transcript,且须同一模型)。
  3. 清理策略:visible=true 的会话跑完始终保留;visible 缺省为隐藏子会话,若不指定 cleanup="keep" 可能跑完被删,想留档就显式 keep
  4. 不是永久派单层:子智能体适合"一次性大活/并行批",不适合做成常驻 dev/test 三层架构——后者开销大于收益(本工作区已验证过并回退)。需要持续调度请用 automations(cron/触发器),不是子智能体。
  5. 长活用 visible:编码、长构建、值得回看的成果,开 visible=true,出事能翻记录。

小结

sessions_spawn 的本质一句话:把"耗时长"和"可并行"的活,从主会话里拆出去。配 sessions_yield 等结果、subagents 看/取消、visible=true 留档,就是一个干净的后台任务工作流。下次主对话卡住前,先想想这活能不能丢给子智能体。


扫码关注公众号,获取更多 OpenClaw 实操技巧:

公众号二维码