MCP 和 Function Calling 到底是什么关系?从概念到实战一次讲清楚

本文整理自 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 的演示项目。核心链路分五步:

  1. 第一次调用模型 API,把用户问题和可用工具列表传过去
  2. 从模型返回结果中提取工具名称和参数
  3. 服务器执行工具(这一步就是实际的函数调用)
  4. 把工具执行结果加入历史消息,第二次调用模型 API
  5. 模型根据工具返回的数据生成最终答案

关键在第三步。作者把标准的 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图片,生成精华速览、思维导图和结构化笔记等内容,帮助你把几小时的视频内容变成可搜索、可复习的结构化笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值