🦾 AI Agent 🟡 进阶 ⏱ 10 分钟

🔌 MCP:AI 世界的「USB-C」

一个开放协议,让 AI 应用连上所有工具。它和 Function Calling 到底是什么关系?

1

为什么 AI 需要「工具」?

🔌 模型的局限

大模型只会「想」,不会「做」——它没法读你的文件、查数据库、发邮件、调真实 API。

于是有了工具调用:让模型在需要时,请求调用某个外部函数。

🗣️ Function Calling 是什么

Function Calling 是模型厂商的私有机制,让模型识别意图、输出结构化的 JSON,说「我想调 get_weather("北京")」。

OpenAI、Anthropic、Gemini 各家格式都不同。

问题来了:各厂商的 Function Calling 格式互不通用——API 参数名、JSON 结构、返回处理逻辑都不一样,就像不同品牌的充电接口(Lightning vs USB-C)。

还有三大痛点:① 供应商锁定(换模型要重写代码)② 上下文膨胀(工具一多,每次请求都携带庞大的 Schema,烧 token)③ 动态性差(加工具要改代码重启)。

2

MCP 是什么:AI 世界的「USB-C」

🌐 开放标准

MCP(Model Context Protocol)由 Anthropic 提出,是开放标准协议,定义 AI 应用如何与各种数据源/工具标准化通信

像 HTTP 一样,任何语言都能实现 Server 或 Client,解决了 Function Calling 的碎片化。

🔍 动态发现

「我有哪些工具?」在 MCP 里问 Server 就行——客户端启动时自动调 list_tools(),拉取全部可用工具的 Schema。

加工具、换工具都不用改客户端代码。

🏠 HostAI 应用本体(Claude/Cursor)
🔌 MCP ClientHost 里的连接器
🖥️ MCP Server独立工具进程
🛠️ 工具执行读文件/查库/调API
📡 通信:Stdio 或 SSE(语言无关)🔓 独立进程:Python/Node/Docker 都行
3

三个角色各管什么

🏠 Host:总指挥

AI 应用本体,比如 Claude Desktop、Cursor。负责路由、记忆、Prompt 管理,是用户和工具之间的调度中枢。

🔌 Client + Server:连接

Client 是 Host 内部的连接器;Server 是独立的工具进程,持有工具的实现、权限、状态。

通过 Stdio 或 SSE 通信,工具逻辑与模型完全解耦。

核心价值:模型只管「思考」,MCP Server 管「干活」。而且一个高质量的 Server(比如 GitHub 操作、数据库查询)可以被所有支持 MCP 的 AI 应用复用——生态一次写好,到处即插即用。

安全性也更好:敏感凭证(如数据库密码)只存在 Server 端,不需要传给模型 API。

4

一个例子:查天气的完整流程

🎯 识别意图用户问北京天气
📤 出 tool_call模型说调 get_weather
⚡ 应用执行MCP Client 转发给 Server
📥 结果回传Server 返回「晴, 25度」
💬 模型总结生成自然语言回复
🔄 经典 agentic loop:意图 → 调用 → 执行 → 回传 → 再总结
🎬 完整对话(MCP 混合架构)
用户
北京明天天气怎么样?
应用
连接 MCP Server,发现工具有 get_weather,转为 OpenAI 的 Function Calling Schema
模型
返回 tool_call:{"name": "get_weather", "arguments": {"city": "北京"}}
应用
捕获请求,通过 MCP Client 调用 MCP Server 的 get_weather
Server
返回:"晴, 25度"
模型
阅读结果,生成回复:北京明天天气晴朗,气温 25 度。☀️
5

MCP vs Function Calling:分层协作

🔌

MCP

连接万物
工具接入层
开放标准

VS
🧠

Function Calling

连接大脑
模型调用层
厂商私有

MCP 负责连接万物 + Function Calling 负责连接大脑

注意:两者是分层协作,不是替代关系。最佳实践里,应用层先把 MCP Server 的工具列表动态转换成当前模型(比如 GPT-4)认得的 Function Calling Schema,发给模型;模型返回调用请求后,应用再通过 MCP Client 去执行。各司其职。

维度🔌 MCP🧠 Function Calling
本质开放标准协议厂商私有机制
工具发现动态 list_tools()需预注册硬编码 Schema
语言语言无关各厂商格式不同
运行Server 独立进程依赖厂商 API
解决/痛点碎片化、锁定上下文膨胀、动态性差
6

为什么模型自己从不「执行」代码

🚫 模型只出「调度意图」

模型永远只输出「我想调 get_weather("北京")」这个结构化请求,谁真正执行?不是模型

是你的代码、框架或平台沙箱去跑。模型住在一个物理隔离的推理服务里,碰不到你的系统。

🔐 安全契约 tool-use contract

让模型在你机器上删库、退款、读隐私?不可能。

模型只输出意图,你校验 call_id、参数、权限、用户是否同意后再执行——这就是 tool-use contract。

🧠 Function Calling🛠️ Tool Calling
定位早期/狭义:模型输出「调哪个函数+JSON参数」现代/广义:工具箱选工具 + Agent loop
关系函数是工具的一种函数、搜索、代码执行、MCP 都是工具
执行模型侧不执行模型侧也不执行,是应用/框架/平台跑
7

一句话:这套架构怎么落地

把「Function Calling 是模型的方言、MCP 是通用的连接层」焊死:

模型 = 只产出「我想调哪个工具 + 参数长啥样」的意图。
MCP = 用统一标准把 AI 应用连到所有工具。
你的代码/框架 = 收到意图后真正执行,再把结果回给模型。

🧩
MCP 做工具接入层

屏蔽差异:读文件、查库、发消息,对上层都是统一的 call_tool 接口,权限日志错误都在这层收敛。

🧠
Function Calling 做模型调用层

翻译官:把 MCP 的工具列表动态转成当前 LLM 认得的 Schema,再发给模型。

🔌
即插即用

要加「发邮件」功能?部署一个新 MCP Server 即可,主程序代码一行不用改。

🔐
安全隔离

敏感凭证只存 Server 端,模型拿不到;执行前你校验权限和用户同意。

一句话总结

MCP 是 AI 世界的「USB-C」——开放、标准、即插即用,负责连接万物;Function Calling 是模型说「我想干嘛」的方言。二者分层协作:MCP 连接工具,Function Calling 连接大脑。模型永远只出意图,真正执行的是你的代码。

🎤 面试问答 · 口语化回答
MCP 是当下 AI 面试的热门话题,面试官常会追问它和 Function Calling 的关系:
面试官讲讲 MCP 是什么?

MCP 是 Model Context Protocol,Anthropic 提出的一个开放标准协议,用来让 AI 应用和外部工具、数据源标准化通信。它解决了以前 Function Calling 各家格式不统一的问题,类似 USB-C 统一了充电接口。核心是动态发现——客户端启动时调 list_tools() 就能拿到所有工具,加工具不用改代码。

💡 加分点:可以补一句它的优势:工具逻辑和模型解耦、一个 Server 能被所有 AI 应用复用、敏感凭证只存 Server 端更安全。
面试官MCP 和 Function Calling 有什么区别?

两者是分层协作,不是替代。Function Calling 是模型厂商的私有机制,模型输出“我想调哪个函数 + JSON 参数”,各家格式不通用,而且工具要预注册、会烧上下文。MCP 是开放的通用连接层,动态发现工具、Server 独立运行、语言无关。实践中通常是 MCP 连接工具,Function Calling 负责和模型通信,应用层做转换。

💡 加分点:记住这个说法很加分:MCP 负责连接万物(工具接入层),Function Calling 负责连接大脑(模型调用层)。
面试官为什么模型自己从不执行代码?

因为模型住在一个物理隔离的推理服务里,碰不到你的系统。它只负责输出“调度意图”,也就是建议调哪个工具、参数长什么样;真正执行的是你的代码、框架或平台沙箱。这是安全契约——你在执行前要校验参数、权限、用户是否同意。

💡 加分点:可以点一下 Tool Calling 和 Function Calling 的关系:概念升级,函数是工具的一种,两者模型侧都不执行代码。
00:00