本文整理自 B站「马克的技术工作坊」的《MCP 与 Function Calling到底什么关系,以及为什么我认为大部分人的观点都是错误的》,通过AI音视频转录总结工具 Ai好记 进行视频转笔记整理,以下为精炼整理后的内容。
一个流传很广的误解
自从 Anthropic 推出 MCP 协议之后,就有很多人把 MCP 和 Function Calling 放在一起比较。
其中流传最广的一种说法是:MCP 统一了 Function Calling 的协议,有了 MCP 之后 Function Calling 就没有存在的必要了。
乍一听很有道理——两者看起来都是「调用工具」相关的事情,而 MCP 更加标准化。但坦率地讲,这个说法是有问题的。
Function Calling 和 MCP 不是替代关系,而是互补关系。它们在大模型应用链路中扮演的角色完全不同。

Function Calling 到底是什么
先搞清楚 Function Calling 是什么。
大模型训练好之后,它的知识库就固定了。如果用户问的问题超出了模型训练数据的范围,模型要么回答不知道,要么就开始胡言乱语。
那有没有办法让模型调用外部工具来获取信息呢?这就是 Function Calling 做的事。
通俗点讲,Function Calling 是指模型具备调用外部函数的能力。什么外部函数?查询天气、搜索新闻、发送邮件——这些都叫外部工具。工具本质上就是编程语言里的函数。
比如一个获取天气预报的函数,你传个经纬度进去,它就返回天气数据。
不过这里有个关键点要澄清:模型自己其实不直接调用函数。它需要一个中间人——也就是服务器——来帮它执行。
模型做的事情是:接收到可用工具列表后,从中挑选合适的工具和参数,然后告诉中间人「帮我调这个」。中间人执行完函数后,把结果返回给模型,模型再根据结果总结答案。

所以 Function Calling 这个名字其实有点误导性——它并不是「模型自己调用函数」,而是「模型具备选择和使用工具的能力」。
Function Calling 和 MCP 各自扮演的角色
为了说清楚两者关系,需要把一条完整的大模型应用链路拆开来看。
一条典型的链路包含四个角色:用户、服务器(应用后端)、模型 API、外部工具。

用户提问题,服务器把问题和可用工具列表一起发给模型 API,模型 API 决定调用哪个工具,服务器再去执行实际的函数调用。
在这个链路里:
Function Calling 的作用范围在模型 API 这一层。它规定了模型 API 如何解析传入的工具列表、如何从中选择工具和参数、如何处理工具返回的结果。你可以理解为它是模型和服务器之间的「工具选择协议」。
MCP 的作用范围在服务器和外部工具这一层。它规定了服务器如何发现和调用各种工具。你的工具有多少个、用什么方式暴露、参数是什么格式——这些由 MCP 来标准化。
两者作用于链路中的不同环节,一个管「选工具」,一个管「调工具」。不存在谁取代谁的问题。
实战:在同一链路里同时使用两者
光讲概念还不够,看代码最实在。
作者用 Python 写了一个叫 MarkChat 的演示项目。核心链路分五步:
- 第一次调用模型 API,把用户问题和可用工具列表传过去
- 从模型返回结果中提取工具名称和参数
- 服务器执行工具(这一步就是实际的函数调用)
- 把工具执行结果加入历史消息,第二次调用模型 API
- 模型根据工具返回的数据生成最终答案
关键在第三步。作者把标准的 Function Calling 代码改了一下,把工具执行的部分替换成了 MCP 客户端。也就是说,在执行工具这一步,不再直接调用一个写死的 Python 函数,而是通过 MCP Client 去连接 MCP Server,由 MCP Server 来提供工具和数据。
运行结果验证了这一点:模型正常返回了答案,而且工具调用信息明确显示来自 MCP Server。这就证明了 Function Calling 和 MCP 可以在同一条链路中各司其职。
一点技术上的启示
这个案例实际上揭示了一个架构设计的思路。模型 API 层的协议(Function Calling)和工具层的协议(MCP)是不同抽象层级的东西。
很多人在讨论技术选型时会下意识地把两者拉到同一个维度去比较,但实际设计中,它们不仅不冲突,还常常相互配合。
开发者完全可以在保持现有 Function Calling 链路不变的前提下,通过修改工具执行层来接入 MCP,从而实现工具的标准化管理。这种组合方式在未来很长一段时间里都会是主流做法。
常见问题
问:MCP 会不会最终取代 Function Calling?
不会。两者作用在链路的不同环节。Function Calling 管的是模型和服务器之间的工具选择交互,MCP 管的是服务器和工具之间的发现与调用。它们不是同一个层面的东西,不存在取代关系。
问:开发中能同时用 Function Calling 和 MCP 吗?
完全可以。在工具执行层把实际的函数调用替换为 MCP 协议即可,模型 API 的调用逻辑不需要改动。两者在一条链路中配合得很好。
问:Function Calling 的协议是怎么传递工具列表的?
通常通过模型 API 请求体中的 tools 字段来传递,每个工具会用 JSON Schema 描述其名称、参数格式等。模型响应中通过 tool_calls 字段返回它选择调用的工具和参数。
以上内容由 Ai好记 转录整理。
Ai好记是一款音视频转图文笔记的 AI多模态知识库工具,支持B站、抖音、小宇宙等平台链接及本地音视频文件,解析后自动语音转文字,同步截取PPT图片,生成精华速览、思维导图和结构化笔记等内容,帮助你把几小时的视频内容变成可搜索、可复习的结构化笔记。

1323

被折叠的 条评论
为什么被折叠?



