电容是什么?一个“快充快放”的微型充电宝哺
2026/4/10 0:37:08
MCP(Model Context Protocol)和Function Calling(函数调用)都是让“大模型能用外部能力”的机制,但设计目标、使用方式、抽象层级都有明显区别。下面从「是什么」「怎么用」「适合什么场景」三个层面给出一个工程向对比。
Function Calling:
👉“模型按你给的函数签名,返回结构化参数,由你来执行函数”MCP:
👉“模型通过统一协议,自主发现、选择并调用外部工具/资源/服务”
模型不真正调用函数
只做一件事:生成符合 schema 的 JSON
宿主程序(你)负责:
用户输入 ↓ LLM(看到你注册的函数 schema) ↓ LLM 输出: { "name": "get_weather", "arguments": { "city": "北京" } } ↓ 你调用 get_weather("北京") ↓ 把结果再发给 LLM✅ 优点
❌ 局限
强耦合
无发现能力
不适合跨进程、跨语言、跨服务
MCP 是一个协议,不是一个模型能力
它定义了:
你可以理解为:
“给大模型用的 USB / HTTP + OpenAPI”
一个 MCP Server 可以暴露三类能力:
| 类型 | 举例 |
|---|---|
| Tools | 发邮件、查数据库、跑代码 |
| Resources | 文件、日志、数据库记录 |
| Prompts | 复用 Prompt 模板 |
模型可以:
LLM 启动 ↓ 连接 MCP Server ↓ 发现可用 tools/resources ↓ 根据任务自主决定: - 调哪个 tool - 用什么参数 - 是否链式调用模型并不是“被动等你塞函数定义”,而是:
像一个 agent,在一个工具生态里工作
| 维度 | Function Calling | MCP |
|---|---|---|
| 抽象层级 | 低 | 高 |
| 是否协议 | ❌ | ✅(标准协议) |
| 工具发现 | ❌ 手写 | ✅ 动态 |
| 执行位置 | 宿主代码 | MCP Server |
| 跨语言 | ❌ | ✅ |
| 多工具协作 | 麻烦 | 原生支持 |
| Agent 场景 | 一般 | 非常适合 |
在做:
工具数量少(<10)
希望强控制、低复杂度
👉80% 产品都应该从 Function Calling 开始
在做:
工具来源复杂
希望:
👉MCP 是“AI 工具生态”的基础设施
| 类比对象 | Function Calling | MCP |
|---|---|---|
| 驱动方式 | 写死函数 | 即插即用 |
| USB 之前 | 每个设备单独驱动 | ❌ |
| USB 之后 | ❌ | ✅ |
| HTTP vs RPC | RPC | HTTP + OpenAPI |
❌不是替代关系
实际上:
MCP Server 内部,通常还是用 function calling 或普通代码实现的
可以理解为:
Function Calling = 单机函数调用能力 MCP = 分布式、标准化的函数/资源调用体系