🎬 先讲个故事:孙悟空的毫毛
📖 场景:西天取经的早晨
唐僧师徒四人走到一条大河前,河面宽得看不到边。
孙悟空拔下一根毫毛,吹了口气——变出一只小猴子去探路。这只小猴子走一趟回来报告:"前面有座桥,但桥上有个妖怪守着。"
孙悟空又拔下三根毫毛,吹了口气——变出三只小猴子去打妖怪。主身孙悟空坐在石头上嗑瓜子,等小猴子们打完收工。
沙僧问:"大师兄,你为什么不自己去?"
孙悟空:"我是主身,得在这儿保护师父。探路、打架这种脏活累活,让分身去干。"
Subagent(子代理)就是这个概念。
一个主Agent(Parent Agent)遇到复杂任务时,可以"召唤"一个或多个Subagent去执行子任务。主Agent统筹全局,Subagent负责具体执行。任务完成后,Subagent把结果汇报给主Agent,然后...就没有然后了(它们通常是临时的,用完即走)。
🧩 一句话解释(说人话版)
👥 Subagent = AI的临时工 / 分身 / 外包小工
就像公司里的项目经理和外包团队,项目经理(主Agent)负责统筹,外包团队(Subagent)负责干活。一个主Agent可以同时召唤多个Subagent并行工作,效率直接起飞。
没有Subagent的AI,就像一个什么都要亲力亲为的老板——累得要死还做不完。
🎮 更接地气的比喻:餐厅的点餐系统
假设你走进一家繁忙的餐厅:
- 前台经理(主Agent):接待你、记录订单、统筹全局
- 厨师A(Subagent 1):专门负责炒菜
- 厨师B(Subagent 2):专门负责煲汤
- 服务员(Subagent 3):专门负责上菜
- 收银员(Subagent 4):专门负责结账
🥷 关键点来了
前台经理不会自己去炒菜、煲汤、上菜、收银——那得累死。它把任务分配给不同的Subagent,各自并行处理,最后汇总结果给你上菜。
这就是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 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的坑实录
🕳️ 坑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 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返回的结果要校验,别盲目信任
🎯 现在你该懂了:Subagent 就是 AI 的影分身之术
看完这篇,别再一个人扛所有任务啦!