最近在研究 Harness Agent、LLM Wiki 等框架时,发现了一个深层困惑:Skill 看起来这么强大(可嵌套、有脚本能力、高可复用性),那 SubAgent 存在的意义是什么?什么时候才该用 SubAgent,什么时候该用 Skill?
这篇文章通过分析 8 个主流 AI Agent 框架的实现、对标业界最新的架构设计,从 问题结构、自主决策能力、复用性需求 等 5 个核心维度出发,给出了清晰的决策矩阵。
一、问题的根源:为何会陷入困惑
我的困惑来自一个真实的现象:Skill 正在变得越来越强大。
1.1 Skill 的进化轨迹
从 2023-2026 年 AI Agent 框架的演变来看:
| 时期 | Skill 的定位 | 特点 | 典型框架 |
|---|---|---|---|
| 2023年早期 | 简单工具封装 | 无状态、单一职责 | LangChain Tool |
| 2023年中期 | 任务流程编排 | 可组合、流程化 | Dify Node、n8n |
| 2024年 | 能力单元 + 脚本编排 | 可嵌套、高并发、强大的组织能力 | LangGraph Subgraph、MetaGPT Action |
| 2026年 | 通用计算单元 | 提供接近 SubAgent 的灵活性,但保持高可靠性 | 你的系统设计、Harness Agent |
关键转折点:函数调用(Function Calling)技术的成熟。当 Tool 的成功率从 50% 突破到 95%+,它就从"辅助工具"演变成了"一等公民"。
1.2 业界的困惑不只是你的
看看这些框架的进化过程:
- LangChain:2023 年推出 Agents(SubAgent 模式)→ 2024 年被 Tool and ReAct 主导 → 2025 年推出 Deep Agents(重新引入递归 SubAgent)
- MetaGPT:一开始采用 Role-based SubAgent(PM/Architect/Engineer/QA 分工)→ 后来发现 Action(Skill)的可靠性更高
- Dify:同时支持 Workflow(Skill 组合)和 Agent Mode(自主决策模式)
这说明什么? 没有一个框架认为 Skill 或 SubAgent 哪个绝对优越,它们的选择都是情景驱动的。
二、核心对比:从 5 个维度理解差异
2.1 维度 1:问题结构的确定性 ⭐⭐⭐⭐⭐
定义:你进入系统时,是否已经明确知道"要做什么"和"怎么做"。
Skill 的世界观
问题 → 分解为已知步骤 → 按流程执行 → 结果
示例:ETL 流程
提取(Extract)
⬇️
转换(Transform)
⬇️
加载(Load)
适用场景:
- ✅ 工作流程在设计时就完全确定(数据管道、报表生成、批量处理)
- ✅ 流程图是直线或简单分支(if-else)
- ✅ 每一步做什么、如何做都有明确的算法或规则
SubAgent 的世界观
问题 → 动态分解 → 根据结果调整策略 → 再次分解 → 结果
示例:复杂的软件开发任务
理解需求 → 分析反馈 → 决定是否需要系统设计
→ 基于架构决定实施策略 → 根据实施效果调整
适用场景:
- ✅ 流程需要根据运行时的结果动态调整(多步推理、决策树)
- ✅ 中间结果会影响后续的决策(如 AutoGPT 的探索式搜索)
- ✅ "做什么"需要在运行时动态决定
2.2 维度 2:自主决策能力 ⭐⭐⭐⭐
定义:系统是否需要根据上下文进行自主决策(而不是按预设规则判断)。
Skill 的设计
- 决策是预定义的:所有分支在设计时就已列举
- 选择是确定性的:基于明确的条件和规则
- 优势:高可靠性、易于测试、容易追踪
- 劣势:无法处理"设计时未预见的情况"
真实案例 - Dify 的 Workflow 模式:
IF 用户输入长度 > 100 字
THEN 调用总结模型
ELSE 直接返回
决策标准是明确的 → 用 Skill 就够了
SubAgent 的设计
- 决策是自主的:Agent 根据当前状态和目标自己决定下一步
- 选择是灵活的:可以处理未预见的情况
- 优势:面对复杂、不确定的环境时灵活变通
- 劣势:难以预测、容易出错、难以追踪推理过程
真实案例 - MetaGPT 的 Role 设计:
PM(产品经理) 的工作是:
1. 理解用户需求
2. 分析技术可行性反馈
3. 根据反馈给出产品建议
PM 的具体行动(写什么文档、问哪些问题)是 Agent 自主决定的
2.3 维度 3:复用性期望 ⭐⭐⭐⭐
定义:这个能力是否需要跨项目、跨系统、跨场景复用。
Skill 的复用哲学
- 设计目标:原子化、通用化、最小化依赖
- 典型例子:
- LangChain 的 Tool 库:同一个"Google Search"工具可以被数百个应用调用
- 你系统中的 Extractor Skill:清洗数据的逻辑对任何研究主题都适用
- n8n 的整个 Node 库:每个 Node 都是独立复用的单元
复用性的代价:必须做出设计妥协,不能过度优化某一个特定场景
SubAgent 的复用哲学
- 设计目标:特定场景优化、协作关系锁定
- 典型例子:
- MetaGPT 的 PM Agent:只在"软件开发团队"这个场景中高效协作
- Harness Agent:在自己的 workflow 中表现最佳,但跨系统迁移需要大量改造
- AutoGPT 的 Agent 设计:为了解决"自主编程"这个特定问题优化过
跨系统迁移的难度:Medium-High(需要理解 SubAgent 的"个性"和环境假设)
2.4 维度 4:状态管理复杂度 ⭐⭐⭐
定义:需要维持多少状态、维持多久。
Skill 的状态策略
- 单次请求 → 无状态处理 ✅
- 跨请求 → 通过外部存储(数据库、消息队列)
- 设计原则:每个 Skill 执行完就释放资源
# Skill 范例:无状态抽取
def extract_data(raw_json):
# 无内部状态
result = json.parse(raw_json)
return clean_result(result)
# 如果需要跨请求状态,存到外部
db.save_extracted_data(result)
优势:高并发友好、易于水平扩展、容器部署简单
SubAgent 的状态策略
- 长期维持:Agent 需要记住过去的决策、推理过程
- 设计原则:Agent 是"有记忆的",每个实例都是独立的
# SubAgent 范例:有状态探索
class ResearchAgent:
def __init__(self):
self.explored = set() # 已探索的路径
self.findings = [] # 发现的信息
def plan_next_search(self, progress):
# 基于历史决策动态规划下一步
next_keyword = self.choose_unexplored_path(progress)
return next_keyword
代价:难以并发、需要精细的会话管理、分布式部署复杂
2.5 维度 5:部署和扩展能力 ⭐⭐⭐
Skill 的部署模型
单个 Skill ≈ 微服务
特点:
- 轻量级(可以容器化)
- 无状态(可以快速扩展)
- 可独立部署、更新
- 成本低
典型部署:
- ✅ Kubernetes + 水平自动扩展
- ✅ Serverless (AWS Lambda)
- ✅ 边缘计算(部署到端设备)
SubAgent 的部署模型
SubAgent ≈ 完整应用
特点:
- 需要持久化存储
- 可能需要人工干预(Human-in-the-loop)
- 分布式协调复杂
- 成本高
典型部署:
- ✅ 专用服务器或 VM
- ✅ 需要会话管理中间件
- ⚠️ 分布式部署需要额外的框架支持(如 LangGraph 的 persistence)
三、决策矩阵:什么时候用 Skill,什么时候用 SubAgent
3.1 快速判断流程(3 道题)
问题1️⃣:你的流程确定性如何?
├─ 是(设计时完全确定)
│ └─ 问题2️⃣:需要跨项目复用?
│ ├─ 是 → ✅ 用 Skill(构建可复用框架)
│ └─ 否 → 问题3️⃣
│
└─ 否(需要动态调整)
└─ 问题3️⃣:需要多角色/多Agent 协作?
├─ 是 → ✅ 用 SubAgent(团队协作)
└─ 否 → ✅ 用 Agent + Skills 混合模式
3.2 场景对照表
| 场景 | 推荐方案 | 理由 | 例子 |
|---|---|---|---|
| 数据 ETL | Skill | 流程确定、高并发、跨项目复用 | 你的 Extractor Skill |
| 定向问题回答 | Skill + LLM | 流程固定、可预测 | 搜索 Query 改写、内容总结 |
| 开放式探索研究 | Skill 编排 | 流程是流程,但中间步骤严格质控 | 你的 Agent-Pipeline |
| 代码生成 | SubAgent | 需要多步推理、实时调整策略 | MetaGPT 的 Engineer Agent |
| 团队协作 | Multi-SubAgent | 不同角色、不同决策逻辑 | MetaGPT 的 PM/Architect/QA |
| 自主掌控客户端 | SubAgent | 长期交互、维持对话状态 | ChatBot 场景 |
| 批量任务处理 | Skill 组合 | 预定义流程、高吞吐量 | 批量文档处理、报表生成 |
| 创意生成 | SubAgent | 需要多次迭代、反复思考 | 广告文案、创意设计 |
四、架构对标:业界框架是如何选择的
4.1 LangChain 的进化:Tool → Agent → Deep Agent
2023 年:Agent 中心
Agent(职责:决策)
├─ 调用 Tool A
├─ 调用 Tool B
└─ 基于结果再次决策
- ❌ 问题:Tool 的成功率低(50-70%),单 Agent 处理复杂问题困难
2024 年:Tool 中心
Tool(职责:执行)
├─ Google Search Tool
├─ Code Executor Tool
└─ (多个 Tool 的标准库)
Agent(职责:简化成"选择哪个 Tool")
- ✅ 优势:Tool 库复用性强、成功率高(95%+)
- ⚠️ 问题:Tool 堆砌无法处理 recursive reasoning
2025 年:引入 Deep Agents(重新支持 SubAgent)
Deep Agent = Agent + SubAgents + FileSystem
用于处理需要多层推理的任务
- 💡 洞察:Skill(Tool)适合单一职责,SubAgent 适合递归问题
4.2 MetaGPT 的坚持:Role-based Team(多 SubAgent)
MetaGPT 的设计逻辑:
Software Company = Team of Roles
PM(需求分析) → Architect(架构设计) → Engineer(代码实现) → QA(测试)
每个 Role 是一个 SubAgent,有独立的:
- 思考过程(Agent 的自主决策)
- 行动方式(Action/Skill)
- 协作协议(接收前一个 Agent 的输出)
关键数据:
- 单 Agent 生成代码的成功率:~50%
- Team of Agents 的成功率:~85%+
启示:当需要多角色分工时,SubAgent 是必要的。不能简单地用 Skill 组合来替代。
4.3 Dify 的平衡:Workflow 和 Agent Mode 并存
固定流程 ──(用 Workflow/Skill)──→ 高可靠、易维护
开放问题 ──(用 Agent Mode)────→ 灵活、自主
用户可以在两种模式间切换
现实意义:
- 80% 的应用场景用 Skill 就够了
- 20% 的复杂场景需要 SubAgent
五、系统设计启示
我的当前系统正是"Skill 优先"的典范:
5.1 为什么选择 Skill 而不是 SubAgent
我的系统:Agent-Pipeline + 7 个 Skill
为什么没有 SubAgent?
- 流程确定性高:5 个步骤在设计时就固定了
- 每个 Skill 单一职责:Crawler、Extractor、Analyst 各司其职
- 高复用性需求:任何研究主题都可以复用这套流程
- 质量门槛明确:每一步都有量化的质量标准
- 并发友好:多个研究可以同时进行(因为 Skill 无状态)
5.2 Skill 架构的优势在我项目的体现
| 设计点 | 你的系统实现 | 收益 |
|---|---|---|
| 松耦合 | 通过 JSON/Markdown 传递数据 | 各 Skill 独立演化、更新 |
| 单一职责 | Crawler 只采集、Extractor 只清洗 | 易于理解、易于测试 |
| 文件隔离 | 每个任务创建独立文件夹 | 支持并行处理、易于追踪 |
| 质量门槛 | 每步都有明确的通过标准 | 防止垃圾数据传递 |
| 顺序编排 | Agent 严格控制 5 个步骤的顺序 | 防止流程跳跃、保证逻辑完整 |
六、关键决策因素速查表
6.1 选择 Skill 的信号
✅ 如果以下大多数为真,选择 Skill:
- 流程在设计时 ≥80% 确定
- 需要高并发处理
- 期望复用到其他项目
- 每一步的输入输出是明确的
- 不需要维持长期对话状态
- 成本敏感(需要低延迟、低资源占用)
6.2 选择 SubAgent 的信号
✅ 如果以下大多数为真,选择 SubAgent:
- 流程需要动态调整(< 50% 在设计时确定)
- 涉及多角色分工和复杂协作
- 需要多步推理和策略调整
- 单个 Agent 无法高效完成
- 需要长期维持对话状态和历史记忆
- 容许更高的延迟和资源占用
6.3 混合方案的信号
✅ 如果需要以下特性,考虑 Skill + SubAgent 混合:
- 核心流程确定(用 Skill),但某些环节需要自主决策(用 SubAgent)
- 例如:爬虫 Skill + research SubAgent + 撰写 Skill
- 例如:数据清洗 Skill + 异常处理 SubAgent + 报表生成 Skill
七、从 Harness Agent 学到的启示
Harness Agent 的核心理念是:"以 Skill 为中心,通过 Skill 的递归嵌套和脚本编排,模拟 SubAgent 的灵活性"
这启发了一个新的思路:
传统:SubAgent ≡ 递归调用 Agent
新思路:Skill ≡ 递归调用 Skill + 脚本编排
优势:
- 保持 Skill 的高复用性和无状态特性
- 获得接近 SubAgent 的编排灵活性
- 避免 SubAgent 的状态管理复杂性
这就是为什么我会上瘾:Skill 在演变,正在变成一个更强大的原语。
八、实用指南:如何在你的系统中应用这些洞察
8.1 如果你想扩展现有系统
方向1: 添加新的 Skill
- 当流程固定、需要复用、输入输出明确时
例如:翻译 Skill、可视化 Skill、多语言支持
方向2:引入 SubAgent(谨慎)
- 当某个环节需要自主决策时
- 但要定义清晰的接口和输入输出
例如:异常处理 SubAgent(当数据质量很差时)
方向3:嵌套 Skill(推荐)
- 让复杂的 Skill 调用简单的 Skill
- 保持无状态、高复用性
例如:高级 Analyst Skill 调用基础的对比 Skill
8.2 对于新项目的建议
第一步:用 Skill 优先的架构开始
- 映射出所有流程步骤
- 每个步骤设计成一个 Skill
- 定义清晰的输入输出
第二步:等到 80% 场景都能用 Skill 处理时
- 考虑是否需要 SubAgent
- 通常答案是"不需要"或"只需要很少"
第三步:如果确实需要 SubAgent
- 只在决策密集的环节使用
- 给每个 SubAgent 明确的"职责范围"
- 设计清晰的 SubAgent 间协议
九、总结:Skill 和 SubAgent 的本质区别
最终的对比
| 维度 | Skill | SubAgent |
|---|---|---|
| 适用流程 | 确定性 + 流程化 | 不确定性 + 探索性 |
| 核心能力 | 执行(执行器) | 决策(决策者) |
| 状态管理 | 无状态 | 有状态 |
| 扩展性 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 复用性 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 灵活性 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 可靠性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 学习成本 | 低 | 高 |
| 部署复杂度 | 简单(微服务) | 复杂(分布式) |
核心结论
- 🎯 Skill = 确定性流程中的高可靠、高复用执行单元
- 🎯 SubAgent = 不确定性环境中的自主决策单元
它们不是竞争关系,而是互补关系。
选择哪个,取决于你的问题是"已知(Skill)"还是"未知(SubAgent)"。
在当下的 AI 时代:
- 2024 年的洞察:Skill(Tool)的崛起;
- 2025 年的认识:SubAgent 不会消失,因为有些问题确实需要递归决策
未来的趋势:混合架构 = Skill 的主流 + 必要时的 SubAgent
参考资源
开源框架官方文档
- LangChain:docs.langchain.com/oss/python/…
- LangGraph:docs.langchain.com/oss/python/…
- MetaGPT:docs.deepwisdom.ai/main/en/
- Dify:docs.dify.ai/
- Deep Agents(LangChain 新增):github.com/langchain-a…
学术论文
- MetaGPT 论文:openreview.net/forum?id=Vt… 2024)
- LangGraph 的灵感来源:Pregel (Google)、Apache Beam
核心设计理念
- Function Calling 的进展:成功率从 50% → 95%(2023-2024)
- Agent vs Tool 的权衡:从 2024 年中开始重新优化
讨论:你的想法是什么?
在评论区分享:
- 你在实际项目中遇到过 Skill vs SubAgent 的选择困惑吗?
- 你的决策最后是怎么做的?
- 有没有遇到过"用 Skill 做不了,一定要用 SubAgent"的场景?
期待你的反馈!🚀