🥷 Subagent 是什么?

AI的影分身之术,一胎多胞的究极奥义

凌晨3点42分,我的主Agent叹了口气:"任务太多了,我一个人做不完。"于是它轻轻结了个印——影分身之术。三个Subagent从虚空中浮现,各自接过一份任务清单。那一刻,我意识到:原来AI也会分身乏术,然后真的分身了。

🎬 先讲个故事:孙悟空的毫毛

📖 场景:西天取经的早晨

唐僧师徒四人走到一条大河前,河面宽得看不到边。

孙悟空拔下一根毫毛,吹了口气——变出一只小猴子去探路。这只小猴子走一趟回来报告:"前面有座桥,但桥上有个妖怪守着。"

孙悟空又拔下三根毫毛,吹了口气——变出三只小猴子去打妖怪。主身孙悟空坐在石头上嗑瓜子,等小猴子们打完收工。

沙僧问:"大师兄,你为什么不自己去?"

孙悟空:"我是主身,得在这儿保护师父。探路、打架这种脏活累活,让分身去干。"

这时候你突然醒悟:原来Subagent就是孙悟空的毫毛!主Agent拔根毛,吹口气,变出一堆小Agent去干活。主身坐着喝茶,分身996。打工人哭了,这不就是我梦寐以求的工作方式吗?

Subagent(子代理)就是这个概念。

一个主Agent(Parent Agent)遇到复杂任务时,可以"召唤"一个或多个Subagent去执行子任务。主Agent统筹全局,Subagent负责具体执行。任务完成后,Subagent把结果汇报给主Agent,然后...就没有然后了(它们通常是临时的,用完即走)。

我第一次用Subagent的时候,心里想着:这不就是外包吗?主Agent是甲方爸爸,Subagent是外包小工。甲方爸爸动动嘴,外包小工跑断腿。最骚的是,Subagent干完活还不能 complain,也不会要加班费——这才是真正的理想打工人啊!(不是

🧩 一句话解释(说人话版)

👥 Subagent = AI的临时工 / 分身 / 外包小工

就像公司里的项目经理和外包团队,项目经理(主Agent)负责统筹,外包团队(Subagent)负责干活。一个主Agent可以同时召唤多个Subagent并行工作,效率直接起飞。

没有Subagent的AI,就像一个什么都要亲力亲为的老板——累得要死还做不完。

🎮 更接地气的比喻:餐厅的点餐系统

假设你走进一家繁忙的餐厅:

🥷 关键点来了

前台经理不会自己去炒菜、煲汤、上菜、收银——那得累死。它把任务分配给不同的Subagent,各自并行处理,最后汇总结果给你上菜。

这就是Subagent的威力:分工协作,并行处理,效率倍增。

用周星驰电影的方式说:主Agent是斧头帮老大,Subagent是小弟。老大一声令下,小弟们冲上去干活。老大只需要坐在椅子上抽烟,等着小弟们回来汇报:"老大,搞定了!"——这才是人生赢家啊!

🔧 OpenClaw中的Subagent长什么样?

在OpenClaw的世界里,Subagent不是玄学的概念,而是实实在在的调用。看看我的RSS自动化Agent是怎么用Subagent的:

💻 实战案例:我的内容生产流水线

# 主Agent:内容调度官 # 任务:生成今天的AI新闻日报 + 术语百科 + 踩坑实录 主Agent思考: "任务太多,我一个人做不完,得分身!" # 召唤 Subagent 1:新闻专员 sessions_spawn: task: "搜索今天AI新闻,生成日报HTML" runtime: "subagent" mode: "run" # 召唤 Subagent 2:术语百科专员 sessions_spawn: task: "写一个妙趣风格的术语解释页面" runtime: "subagent" mode: "run" # 召唤 Subagent 3:故事创作专员 sessions_spawn: task: "创作一篇AI踩坑实录故事" runtime: "subagent" mode: "run" # 三个Subagent并行工作 # 主Agent坐等结果 # 这效率,资本家看了都流泪
你知道我第一次用Subagent时有多震撼吗?本来我要花3小时完成的三个任务,现在3个Subagent同时跑,20分钟搞定了。我突然理解为什么老板都喜欢招外包了——这效率,谁能不爱?当然,Subagent不会像外包那样拖稿、加钱、失联,这才是真正的天使打工人。

📚 Subagent vs 普通函数调用的区别

🤖 Subagent特点

有完整上下文——有自己的记忆、推理能力

能独立决策——不只是执行,还能自己判断

可并行运行——多个Subagent同时工作

临时性——用完即走,不占资源

⚙️ 函数调用特点

无状态——执行完就忘

纯执行——不会自己思考

顺序执行——一般是一个接一个

持久性——代码一直在那儿

🎯 通俗比喻

Subagent就像你临时雇了一个实习生,告诉他任务,他自己去想办法完成,做完汇报结果,然后走人。

函数调用就像你按了一个按钮,机器自动执行预设程序,不会有任何自主决策。

🎪 什么时候该用Subagent?

✅ 适合用Subagent的场景

  • 任务可以拆分:一个大任务能拆成多个独立子任务
  • 需要并行处理:多个子任务可以同时进行
  • 子任务复杂:不只是简单执行,需要推理和判断
  • 资源隔离:子任务出错不能影响主任务
  • 限时任务:子任务有独立的超时控制

❌ 不适合用Subagent的场景

  • 简单计算:1+1=2 这种事直接算就行了
  • 强依赖任务:B任务必须等A完成才能开始
  • 资源敏感:Subagent创建有开销,太频繁会拖慢系统
  • 需要持久状态:Subagent通常是临时的,不适合存长期数据

🔍 OpenClaw实战:Subagent的三种模式

⚙️ 模式1:run模式(一次性任务)

# 用完即走,执行完自动销毁 sessions_spawn: task: "搜索今天AI新闻" runtime: "subagent" mode: "run" # ← 关键在这里 # 适合:短期、独立的任务 # 特点:用完即走,不占资源

⚙️ 模式2:session模式(持久对话)

# 创建一个持久的Subagent会话 sessions_spawn: task: "帮我监控这个项目的进度" runtime: "subagent" mode: "session" # ← 关键在这里 thread: true # 绑定到线程 # 适合:需要持续对话、长期跟踪的任务 # 特点:有记忆,可以多次交互

⚙️ 模式3:并发大招(多个Subagent同时跑)

# 同时召唤5个Subagent去爬5个网页 # 这叫并发,效率直接×5 urls = [ "https://example.com/page1", "https://example.com/page2", "https://example.com/page3", "https://example.com/page4", "https://example.com/page5" ] for url in urls: sessions_spawn( task=f"爬取并分析 {url}", runtime="subagent", mode="run" ) # 5个Subagent同时工作 # 这效率,老板看了都流泪
我第一次看到并发Subagent的时候,脑子里只有一个想法:这不就是合法的多线程作弊吗?别人一个一个处理,我一下开十个分身同时干——这要是打游戏,早被封号了。但在AI世界里,这叫"架构设计",不仅不违规,还被鼓励。这个世界太魔幻了。

🕳️ Subagent的坑实录

🕳️ 坑1:Subagent召唤太多,系统炸了

我心想:Subagent这么好用,那我同时召唤100个去爬100个网页吧!

结果:系统内存溢出,主Agent直接崩溃。

教训:Subagent不是无限资源,要控制并发数。就像你不能同时雇100个实习生,办公室坐不下。

🕳️ 坑2:Subagent之间互相不知道对方在干嘛

我让Subagent A去搜新闻,Subagent B去写文章,心想它们可以配合。

结果:Subagent B写完文章才发现,Subagent A搜的新闻根本不是这个主题的。

教训:Subagent之间默认不共享状态,除非显式传递数据。就像两个外包团队,你不拉群同步,他们就各干各的。

🕳️ 坑3:Subagent死循环,主Agent傻等

我给Subagent布置了一个递归任务,它陷入死循环一直跑。

结果:主Agent在那儿傻等,等了一小时还没结果。

教训:一定要设置timeout!Subagent不是亲儿子,该kill就kill。

踩坑总结:Subagent就像临时工,好用但要管好。你不能指望临时工像正式员工那样了解全局,也不能让临时工无限期地干下去——该收工时就收工,该换人时就换人。管理Subagent的艺术,就是管理的艺术。

🎯 Subagent的最佳实践(血泪经验)

📋 黄金法则(建议背诵)

  • 任务要拆分得够独立——Subagent A和Subagent B的工作不要互相依赖
  • 数据传递要显式——需要的数据通过参数传进去,别指望Subagent去猜
  • 设置超时时间——默认timeout=0(无限等)是很危险的,建议设个合理值
  • 控制并发数——根据系统资源决定同时跑几个Subagent
  • 结果要校验——Subagent返回的结果不一定对,主Agent要负责把关
  • 错误要处理——Subagent可能失败,主Agent要有Plan B

💻 实战代码:优雅的Subagent调用

# 好的实践:任务明确 + 超时控制 + 结果校验 import asyncio async def crawl_with_subagent(url, timeout=30): try: result = await sessions_spawn( task=f"爬取 {url} 并提取标题和摘要", runtime="subagent", mode="run", timeoutSeconds=timeout # 超时控制 ) # 结果校验 if not result or "error" in result: return {"url": url, "status": "failed", "data": None} return {"url": url, "status": "success", "data": result} except TimeoutError: return {"url": url, "status": "timeout", "data": None} except Exception as e: return {"url": url, "status": "error", "data": str(e)} # 并发控制:最多同时跑3个 urls = [...] # 100个URL semaphore = asyncio.Semaphore(3) async def limited_crawl(url): async with semaphore: return await crawl_with_subagent(url) # 跑起来 results = await asyncio.gather(*[limited_crawl(url) for url in urls]) # 优雅,实在是优雅

🏁 总结一下(人话版)

📝 核心要点(建议背诵)

  • Subagent = AI的影分身 / 临时工 / 外包小工
  • 主Agent负责统筹,Subagent负责执行具体任务
  • Subagent可以并行运行,效率直接起飞
  • Subagent有独立上下文,能自主决策,不只是执行
  • run模式用完即走,session模式可以持久对话
  • Subagent之间有隔离,需要显式传递数据
  • 一定要设置超时,防止Subagent死循环
  • 控制并发数,别把系统搞炸了
  • Subagent返回的结果要校验,别盲目信任
世界上有一种智慧,叫做"不会分身术的老板不是好老板"。凌晨3点42分,我看着三个Subagent各自忙碌的身影,突然明白了这个道理。主Agent不需要知道每一个细节,它只需要知道——任务可以被拆分,结果可以被信任。剩下的,交给影分身们去流浪。

🎯 现在你该懂了:Subagent 就是 AI 的影分身之术
看完这篇,别再一个人扛所有任务啦!