复杂 Skill 和微型 Agent,到底是不是同一回事?

复杂 Skill 和微型 Agent 可以在机制上很像,但边界不在复杂度,而在运行时主体、权威状态和责任归属。

封面

我的判断是:不是同一回事,但边界不在复杂度。

这有点像在问:一个库里已经有线程池、重试、缓存、调度器,它还算库吗?

多数情况下,算。

前提是,它仍然是被某个运行时主体调用的东西。复杂 Skill 和微型 Agent 的区别,不看里面有没有 Loop,也不看它会不会拆任务、调 Sub-agent、做验证重试。

我更关心四件事:目标解释权、计划权、权威状态、责任边界。

先限定一下范围。这里说的 Skill,不是所有厂商文档里叫 Skill 的东西,而是“被某个 Agent 或运行时加载、调用的能力封装”。有些平台会把 workflow、插件、触发器也叫 Skill,那是命名习惯,不是我这里讨论的边界。

一、先别按复杂度分

在讨论 MCP、Skills、Agent 工具链时,常见误解是:Skill 很简单,Agent 很复杂。

这个分法不稳。

Skill 完全可以很复杂。它可以拆任务、调用多个子能力、失败重试,甚至内部放一个 Master-agent 做调度。做到这一步,它确实有很强的 agentic 味道。

但“像 Agent”不等于“是 Agent”。

数据库驱动内部有连接池、健康检查和自动重连,它不会因此变成一个独立应用。它还是被应用程序加载的库。

Skill 也是这样。

二、Skill 的本质是能力封装

我更愿意把 Skill 看成一种“可复用能力包”。

它回答的问题是:当一个 Agent 要完成某类任务时,怎么把知识、步骤、约束和工具调用方式打包给它?

比如一个“代码评审 Skill”,里面可以有检查清单、风险分级、自动重试、多个子检查器。它很复杂。但如果它只是被 IDE 里的主 Agent 点一下调用,跑完给出评审结果,那它仍然是 Skill。

它的聪明服务于调用者。

它通常不决定“为什么现在做这件事”,也不拥有最终验收标准。失败之后,是调用它的主体决定重试、换策略,还是放弃。

三、Agent 的本质是运行时主体

Agent 不是“更复杂的 Skill”。

它更像一个拥有运行边界的执行主体。专业一点说,它应该能作为一个独立 run 被调度、观测、取消、重试和归因。

几个判断点会更落地:

  1. 目标解释权:它不是只执行外部写死的动作,而是要把目标翻译成步骤。
  2. 计划权:它能在约束内决定先做什么、后做什么,用什么工具。
  3. 权威状态:不只是写缓存或中间文件,而是拥有这次 run 的进度、失败历史和恢复语义。
  4. 后续策略责任:出错后,是它进入自己的重试/降级/求助流程,而不是只把错误码丢回调用者。
  5. 权限与审计边界:它有可独立审计的工具权限、资源范围和执行日志,不一定长期持有权限,但边界清楚。

这里要小心一个坑:状态“物理上存在哪”不是重点。Skill 也可以写缓存,Agent 的状态也可以存在外部数据库里。关键是:谁解释这份状态,谁决定下一步怎么恢复。

四、内含 Master-agent 的 Skill,算什么?

这是最容易混淆的地方。

如果一个 Skill 里已经包含 Master-agent 任务拆解、Sub-agent 调度、执行、验证、重试,那它在实现上确实很像一个微型 Agent 系统。

我会叫它:agentic skill,或者“带自治循环的复合 Skill”。

但外层身份要看它怎么被系统使用。

如果使用方式是:主 Agent 决定调用它,它在一次调用范围内执行完整 Loop,返回结果,主 Agent 验收并继续下一步。那外层仍然是 Skill。

注意,是“外层”。

一个 Skill 可以封装 Agent 组件。里面的 Master-agent 在实现层面可以是 Agent,但这个包被系统当作一次能力调用来管理时,包的身份仍然是 Skill。

换个例子更直观。

同一套代码评审能力,如果作为 IDE 命令被点击一次,读当前 diff,输出建议,它是 Skill。若它变成一个常驻 Review Bot,自己接收队列任务,维护失败历史,决定何时重跑,能被平台单独暂停、恢复、审计,那它就更像 Agent。

代码可能差不多。

系统语义变了。

五、我会怎么判断

我现在不会问“它能不能调用完就结束”。这个问题不够准。一次性运行的 Agent 也可能完成任务后退出。

我会换成这几个问题:

第一,它只是完成外部定义好的能力动作,还是要自己解释目标?

前者更像 Skill,后者更像 Agent。

第二,它有没有计划权?

如果步骤基本由 Skill 定义写死,只是在内部稳定执行,那是复合能力。若它能根据上下文重排步骤、换工具、改变策略,就开始接近 Agent。

第三,谁拥有权威状态和恢复语义?

缓存、日志、中间产物不算。真正要看的是:失败之后,谁知道现在跑到哪一步,谁决定从哪里恢复。

第四,错误由谁解释?

Skill 错误通常由调用者解释和处置。Agent 错误会进入它自己的运行状态,触发重试、降级、求助,或交给上级调度。

第五,它有没有独立审计边界?

不是长期持有什么权限,而是它的工具范围、资源边界、日志和责任归属能不能被单独看清。

这几个问题,比争“有没有 Loop”更有用。

六、别把中间形态都叫 Agent

还有个容易被忽略的点:Skill 和 Agent 之间不是只有一条线。

工程里有很多中间形态。

Skill 到 Agent 的边界地图

形态 更适合叫什么 关键特征
一次性能力复用 Skill 外部主体调用,完成一个能力动作
多步骤但目标固定 Compound Skill 内部有编排和重试,但验收来自外部
固定 DAG / 流程编排 Workflow 有状态流转,但策略基本预定义
后台批处理 Job / Service 独立运行,但不一定有自主决策
独立目标 + 计划权 + 权威状态 + 审计边界 Agent 能作为运行时主体被调度和归因

这张表比“是不是复杂”更实用。

如果你把复杂 Skill 当 Agent 管,系统会变重:多一层调度,多一层状态同步,多一层观测成本。

反过来,把真正的 Agent 塞进 Skill 里,风险也不小。状态藏在内部,权限边界说不清,失败后没人知道该重试哪一步。

工程上最怕这种灰区。

所以我的结论是:

复杂 Skill 和微型 Agent 可以在机制上高度相似,但设计哲学不同。Skill 是能力的模块化,Agent 是责任主体的模块化。

前者解决“怎么把一类任务做得更可靠”。

后者解决“谁来独立承担一段任务”。

如果非要压成一句话:别先争名字,先画清运行边界。