Function Calling、MCP、Agent Skill 三层架构详解:从调用协议到工具标准化再到流程封装

1. 三者的常见误区

很多人一上来就把 Function Calling、MCP、Agent Skill 当成三个平行的竞争方案——Function Calling 是 OpenAI 的方案,MCP 是 Anthropic 的方案,Skill 也是 Anthropic 的方案,认为它们是不同时期搞出来的替代品。

这个理解是错的。三者不是并列关系,而是从底到顶的三层架构:Function Calling 在最下层做调用协议,MCP 在中间层做工具标准化,Agent Skill 在最上层做流程封装。每一层解决不同层次的问题,依赖下一层的基础能力,各司其职。


2. 第一层:Function Calling——模型触发外部调用的协议

2.1 解决的核心问题

大模型本身只会生成文本。当模型需要触发外部操作(查数据库、调 API、写文件)时,需要一种机制让模型告诉宿主程序"我要调哪个函数、传什么参数"。Function Calling 解决的就是这个最基础的调用协议问题。

2.2 技术机制

Function Calling 的工作流程:

  1. 宿主程序在调用模型时,传入一组工具定义(函数名、参数描述)
  2. 模型根据任务判断是否需要调用某个工具
  3. 如果需要,模型输出一个结构化 JSON(tool_calls),包含函数名和参数
  4. 宿主程序解析 JSON,执行对应函数,将结果以 tool 消息返回给模型
  5. 模型根据工具返回结果继续生成回复

一个典型的 tool_calls 输出格式:

{
  "tool_calls": [
    {
      "id": "call_001",
      "type": "function",
      "function": {
        "name": "query_database",
        "arguments": "{\"sql\": \"SELECT * FROM users WHERE id = 1\"}"
      }
    }
  ]
}

关键点:

  • 调用发生在模型与函数之间,是单次调用的格式规范
  • 模型不执行函数,只输出调用意图;宿主程序负责实际执行
  • 执行结果以 tool 消息形式返回给模型,作为后续推理的上下文

2.3 边界与局限

Function Calling 只定义了"调用格式"这个最薄的协议层。它不解决以下问题:

  • 工具如何注册、如何发现
  • 工具如何标准化暴露
  • 每次对接新工具都需要手动编写适配代码

3. 第二层:MCP(Model Context Protocol)——工具标准化封装

3.1 解决的核心问题

Function Calling 普及后,每个应用都要自己写代码对接各种工具——数据库一套、文件系统一套、API 又是一套,重复劳动多。MCP 解决的是工具的标准化接入问题:一次实现,到处复用。

3.2 技术机制

MCP 采用 Client-Server 架构:

  • MCP Server:工具提供方,暴露标准化的工具接口
  • MCP Client:AI 客户端,连接 Server 并自动发现可用工具

工作流程:

  1. MCP Client 连接 MCP Server
  2. Client 自动发现 Server 暴露的工具列表(工具名、参数、返回值定义)
  3. Client 将工具定义自动转换为 Function Calling 格式喂给模型
  4. 模型输出 tool_calls 后,Client 路由到对应的 Server 执行

MCP 的工具定义格式示例:

{
  "tools": [
    {
      "name": "query_database",
      "description": "执行 SQL 查询并返回结果",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sql": { "type": "string", "description": "SQL 查询语句" }
        },
        "required": ["sql"]
      }
    }
  ]
}

关键点:

  • MCP 不替代 Function Calling,而是在它之上做封装和管理
  • MCP Server 暴露的工具定义最终通过 Function Calling 格式传给模型
  • 工具定义与实现分离:Server 可以独立部署和升级

3.3 与 Function Calling 的关系

MCP 依赖 Function Calling 完成最终调用触发。MCP Server 暴露的工具列表被 Client 转换成 Function Calling 的工具定义,模型通过 Function Calling 格式触发调用,Client 再将调用路由到对应的 Server 执行。

3.4 边界与局限

MCP 管工具的标准接入,不管工具的调用流程和编排。它不解决以下问题:

  • 面对复杂任务,模型不知道该按什么顺序使用这些工具
  • 每次执行同类任务都需要重复编写步骤和约束

4. 第三层:Agent Skill——知识和流程的可复用封装

4.1 解决的核心问题

模型有了工具(通过 MCP 暴露),但面对一个复杂任务,它不知道该按什么流程、什么标准来用这些工具。Skill 解决的是知识和流程的复用问题:把"使用工具完成特定任务"的步骤、模板、脚本打包成可复用模块。

4.2 技术机制

Skill 的典型组成:

  • SKILL.md:描述 Skill 的触发条件、执行步骤、输出标准
  • 模板文件:输出格式模板、代码模板
  • 脚本:可执行脚本或工具调用链定义

Agent 加载 Skill 的流程:

  1. Agent 启动时扫描可用 Skill 列表
  2. 用户提交任务后,Agent 判断哪个 Skill 与任务匹配
  3. Agent 加载匹配的 SKILL.md,按其中定义的步骤执行
  4. 每个步骤可能涉及调用多个 MCP 工具,通过 Function Calling 触发

一个 SKILL.md 的结构示例:

# 代码审查 Skill

## 触发条件
- 用户提交 PR 或要求审查代码

## 执行步骤
1. 读取 PR 的 diff 内容
2. 检查代码风格是否符合项目规范
3. 检查是否存在潜在 bug 或安全漏洞
4. 生成审查意见,按严重程度分级

## 输出标准
- 每个问题必须标注文件路径和行号
- 严重问题(P0)必须给出修复建议

4.3 与 MCP 和 Function Calling 的关系

完整依赖链:Skill(定义流程)→ MCP(提供工具)→ Function Calling(触发调用)

  • Skill 定义"做什么、按什么顺序做"
  • MCP 提供"用什么工具做"
  • Function Calling 实现"模型怎么触发工具"

4.4 边界与局限

  • Skill 不定义工具如何接入,依赖 MCP 提供工具
  • Skill 不定义模型如何调用函数,依赖 Function Calling 触发
  • Skill 的粒度比 MCP 工具粗得多,一个 Skill 可能涉及多个步骤、调用多个 MCP 工具

5. 三层依赖关系总结

三者不是替代关系,而是包含关系,每层建立在下一层的基础之上:

Skill ⊃ MCP ⊃ Function Calling
维度Function CallingMCPAgent Skill
角色调用协议工具标准化流程封装
通信对象模型 ↔ 函数MCP Client ↔ MCP ServerAgent ↔ 知识模块
粒度单次调用工具定义多步骤任务
解决的问题模型怎么调函数工具怎么暴露给模型拿到工具后按什么流程做
依赖关系最底层依赖 Function Calling依赖 MCP + Function Calling

6. 完整流程串联:三层如何协作

用一个具体场景把三层串起来。

用户对 Agent 说:“帮我分析最近三个月的销售数据,找出下滑的产品线,给改进建议。”

Step 1(Skill 层):Agent 收到任务后,扫描可用 Skill 列表,发现有一个"数据分析报告"Skill 和这个任务匹配。Agent 加载该 Skill 的 SKILL.md,读取其中定义的分析流程:第一步从数据库取数据,第二步用 Python 做趋势分析,第三步按模板写分析报告。

Step 2(MCP 层):执行第一步"从数据库取数据"时,Agent 的 MCP Client 已经连着数据库 MCP Server 和 Python 执行器 MCP Server,自动发现 query_database 和 run_python 等工具可用。不需要任何手动配置。

Step 3(Function Calling 层):模型判断需要查数据库,输出 tool_calls 指定调用 query_database 并传入 SQL 参数。MCP Client 将请求路由到数据库 Server 执行,结果返回给模型。模型接着调用 Python 执行器做趋势分析。最后按 Skill 模板整理成分析报告。

三层分工:Skill 做流程编排,MCP 做工具管理,Function Calling 做通信。缺任何一层,这个任务都无法完整执行。


7. 总结

Function Calling、MCP、Agent Skill 不是三个平行的竞争方案,而是从底到顶的三层架构:

  • Function Calling 是语言,让模型能说出要调什么函数
  • MCP 是工具箱,把工具标准化打包,随时插拔
  • Agent Skill 是操作手册,教 Agent 用工具箱里的工具按什么流程完成工作

面试中回答这道题,第一个要说清楚三层层级关系,第二个用完整场景串联三层协作,让面试官看到你不只是背了概念,而是真正理解了三者在系统里怎么协作的。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐