简介:本文从底层机制出发,系统拆解 AI Agent 开发中工具调用、标准化协议与可复用技能三个概念的本质差异。读者将理解三者各自所处的层级、协作方式与适用边界,掌握在项目中合理选型与组合的设计思路,避免因概念混淆导致的过度封装与架构耦合问题。
在 AI Agent 的开发实践中,开发者经常会同时接触到三个核心概念:工具调用(Tool)、标准化能力协议(MCP)以及技能包(Skill)。这三者都与“扩展大模型能力”相关,因此很容易被理解为同一件事的不同叫法。
但从系统原理上看,它们解决的问题完全不同:
换句话说,Tool 是动作单元,MCP 是接入规范,Skill 是任务编排与复用单元。它们处于不同的抽象层级,却在同一个 Agent 任务中协同工作。
本文将从底层机制出发,逐层拆解这三者的运行原理、模块协作方式和边界条件,帮助读者建立清晰的架构认知。
假设我们构建一个“旅游规划 Agent”,用户输入:
帮我规划杭州三日游,包括天气、酒店和景点建议,预算控制在 3000 元以内。
Agent 在完成这个任务时,需要经历以下处理链路:
这个过程中,Agent 需要:
如果开发者不区分这三层,把所有逻辑都塞进 Tool,就会导致:
因此,理解三者的分层原理,是设计可维护 Agent 架构的前提。
Tool 是 Agent 调用外部能力的最小粒度封装。从机制上看,一个 Tool 通常包含:
伪代码示意:
Tool: get_weatherdescription: "查询指定城市的天气"input_schema:city: string (required)date: string (optional)execute(city, date):return weather_service.query(city, date)output: { temperature, condition, humidity }
Tool 的核心机制是:模型通过语义理解选择工具,运行时框架负责参数校验与实际执行,结果回传给模型继续推理。
MCP(Model Context Protocol)本质上是一套通信规范,用于把外部能力以统一格式暴露给模型或 Agent 运行时。
它的核心机制包括:
从系统组成看,MCP 通常包含:
| 组件 | 职责 |
|---|---|
| MCP Server | 封装具体能力,按协议暴露接口 |
| MCP Client | Agent 侧组件,负责连接、发现、调用 |
| 协议层 | 定义消息格式、调用约定、错误处理 |
MCP 解决的问题是:当外部能力来源多样、接口不统一时,如何让 Agent 以一致的方式接入。
Skill 是对一类任务场景的高层封装,它描述的是:
Skill 的实现方式可以是 Prompt 模板、流程描述、配置文件,也可以是代码逻辑。它的核心价值在于复用:把一类任务的编排逻辑打包,供多个 Agent 或多次调用共享。
伪代码示意:
Skill: travel_planningtrigger: "用户请求规划旅行"steps:1. 调用 get_weather 获取目的地天气2. 调用 search_hotel 获取酒店列表3. 调用 search_poi 获取景点列表4. 按预算过滤与组合5. 生成 Markdown 输出
回到旅游规划场景,三层的分工如下:
┌─────────────────────────────────────────┐│ Skill 层(任务编排) ││ 旅游规划 Skill:定义触发条件与流程 │├─────────────────────────────────────────┤│ MCP 层(能力接入) ││ 天气 MCP Server / 酒店 MCP Server │├─────────────────────────────────────────┤│ Tool 层(动作执行) ││ get_weather() / search_hotel() │└─────────────────────────────────────────┘
三者的关系不是替代,而是上下层协作:Skill 编排 MCP 暴露的能力,MCP 底层可能由多个 Tool 组成。
以旅游规划为例,完整流程如下:
第一步:意图解析
Agent 接收用户输入,通过模型推理识别出任务类型为“旅游规划”,匹配到对应的 Skill。
第二步:Skill 触发与流程加载
Skill 定义被加载,Agent 获得任务步骤列表:查天气 → 查酒店 → 查景点 → 预算过滤 → 输出。
第三步:能力发现
Agent 通过 MCP Client 查询当前可用的 MCP Server 列表,发现天气、酒店、景点三个服务。
第四步:Tool 调用
Agent 根据 Skill 流程,依次调用对应 Tool。每次调用:
第五步:结果整合与输出
模型根据中间结果进行预算过滤、组合推荐,最终生成 Markdown 格式输出。
第六步:状态回传与缓存
任务完成后,Skill 可将执行状态、结果缓存,供后续相似请求复用。
Tool 只关心“如何执行一个动作”,不关心“何时被调用”;Skill 只关心“流程如何编排”,不关心“底层如何实现”。这种解耦使得:
MCP 的动态发现能力使得 Agent 不需要在代码中硬编码所有能力。运行时通过协议查询可用能力列表,按需加载。这解决了能力来源多样、变化频繁的问题。
Skill 层承担了任务调度职责:根据条件判断分支、按顺序调用、处理异常与重试。这使得复杂任务的流程逻辑从 Tool 中抽离,集中在 Skill 层管理。
Skill 的核心价值在于复用。一个“旅游规划 Skill”可以被多个 Agent 调用,也可以被同一 Agent 在不同会话中复用。复用降低了重复开发成本,也保证了流程一致性。
误区一:MCP 就是一堆 Tool 的集合
MCP 是协议规范,Tool 是执行单元。MCP 可以暴露 Tool,也可以暴露其他类型的能力(如资源、提示模板)。
误区二:Skill 就是 Prompt
Prompt 可以是 Skill 的一种实现方式,但 Skill 的本质是任务编排逻辑,可以包含条件分支、循环、异常处理等,不限于 Prompt。
误区三:有了 Tool 就不需要 MCP
Tool 解决“能执行”,MCP 解决“能标准化接入”。当能力来源单一、项目规模小时,可以不用 MCP;但当能力来源多样时,MCP 的价值就体现出来。
误区四:先写 Tool 还是先做 MCP 还是先用 Skill
建议顺序:先明确任务场景(Skill 设计)→ 确定需要哪些能力(MCP 接口)→ 实现具体执行(Tool)。自顶向下设计,避免过度封装。
Tool、MCP、Skill 三者分别处于执行层、接入层、编排层,共同支撑 Agent 的能力扩展:
理解三者的分层原理与协作机制,有助于在项目中合理设计架构,避免耦合过高、复用性差、维护困难等问题。在实际开发中,应根据任务复杂度与能力来源,灵活选择组合方式,而非机械套用某一层。