🏗️ Function Calling、Skill、MCP:三层架构
不是竞品,是三层——语言、工具箱、操作手册,缺一层都不完整。
一句话:是三层,不是三选一
🗣️ Function Calling:调用语言
最底层。解决「模型怎么调函数」——输出结构化 tool_calls JSON,告诉程序该调哪个函数、传什么参数。
类比:你的「手」。
🧰 MCP:工具箱
中间层。解决「工具怎么暴露给模型」——把数据库、API 封装成标准化 Server,一次实现到处复用。
类比:「厨房」。
📖 Skill:操作手册
最上层。解决「拿到工具后按什么流程完成任务」——把执行步骤、标准、脚本、模板打包成可复用模块。
类比:「菜谱」。
Function Calling
调用语言
模型怎么调函数
在最底层
MCP + Skill
工具标准化 + 流程封装
工具怎么暴露 + 怎么用
在其上
三句话看懂本质差异
🗣️ Function Calling
模型说「我要调这个函数」。
发生在模型和函数之间,是单次调用的格式规范,发生在单个 Agent 内部。
🧰 MCP
工具服务说「我能提供这些函数」。
发生在AI 客户端(MCP Client)和工具服务(MCP Server)之间,是工具的标准化封装协议。
📖 Skill
操作手册说「用这些工具按这个流程做」。
发生在Agent 和知识模块之间,粒度比 MCP 工具粗——「代码审查」是一个 Skill,内部可能涉及好几个步骤、调用好几个 MCP 工具。
时间线:为什么会有三个
层级依赖:缺一层都不完整
| 跳过这层 | 类比 | 结果 |
|---|---|---|
| 没 Function Calling | 没有手 | 站在厨房、拿着菜谱,什么都做不了 |
| 没 MCP | 没有厨房 | 有手有菜谱,但家里没厨具,只能空手发呆 |
| 没 Skill | 没有菜谱 | 有手有满厨房厨具,但面对食材不知先切什么后炒什么 |
一个完整故事串联三层
| 角色 | 实际做的事 |
|---|---|
| 📖 Skill | 流程编排——定义取数据→分析→写报告三步 |
| 🧰 MCP | 工具管理——提供 query_database、run_python |
| 🗣️ Function Calling | 模型和工具通信——输出 JSON 触发每次调用 |
Function Calling、MCP、Skill 不是竞品,是从底到顶的三层架构:FC 是调用语言(模型怎么调函数,你的手)、MCP 是工具标准化(工具怎么暴露,厨房)、Skill 是知识流程封装(拿到工具按什么流程做,菜谱)。依赖方向 Skill → MCP → FC,缺了底层上层无法生效。
它们不是竞争关系,而是三层架构。最底层 Function Calling 是调用语言,解决模型怎么调函数,输出结构化的 tool_calls JSON;中间层 MCP 做工具标准化,把数据库、API 封装成标准化 Server,解决工具怎么暴露给模型;最上层 Agent Skill 做知识和流程封装,解决拿到工具之后按什么流程完成任务。简单记就是:FC 是语言,MCP 是工具箱,Skill 是操作手册。
有,而且层级很明确。Function Calling 在最底层,因为它是模型触发工具调用的语言,没有它模型没法告诉外部要调哪个函数;MCP 在它之上,因为 MCP Server 暴露的工具最终还是要通过 Function Calling 的格式传给模型;Skill 在最上面,因为 Agent 按 Skill 的指令执行,每一步调工具时还是要靠 MCP 发现工具、靠 Function Calling 触发。所以依赖方向是 Skill 依赖 MCP、MCP 依赖 FC,缺了底层上层就失效。
比如用户让我分析最近三个月销售数据、找下滑产品线、给建议。先是 Skill 层,Agent 发现「数据分析报告」Skill 匹配,加载它定义的流程:取数据、趋势分析、写报告;然后 MCP 层,MCP Client 已经连着数据库和 Python 执行器,自动知道有 query_database 和 run_python 可用;最后 Function Calling 层,模型输出 tool_calls 触发 query_database,MCP Client 路由到数据库执行,拿结果后模型继续,最后按 Skill 的模板输出报告。整个过程 Skill 编排流程、MCP 管工具、FC 做模型和工具通信。