文
章
目
录
章
目
录
最近,MCP持续火爆,今天,咱们就来深入探讨一下Function Calling(函数调用)和MCP之间的区别。
一、Function Calling究竟是什么?
Function Calling,也就是函数调用,是部分大模型所具备的一种意图识别能力。简单来说,大模型能够对用户输入的自然语言进行分析,进而识别出其中与传入工具列表相关的意图。不过要注意,大模型本身并不会直接去调用这些函数。它会依据识别出的意图,生成一个函数调用指令,然后由模型的调用方负责执行。
咱们通过一个天气查询的例子来详细说明。假设用户询问“重庆天气如何”,具体流程是这样的:
- 用户提出“重庆天气如何”的问题。
- 客户端将请求进行封装,包含模型、参数以及工具库等信息。
- 客户端向大模型发起请求。
- 大模型识别到意图为
getWeather
,并确定参数为城市“重庆” 。 - 大模型返回包含意图的结果。
- 客户端判断意图,如果是查询天气,就向天气服务器发起请求。
- 天气服务器返回天气查询结果。
- 最终,客户端将天气结果返回给用户。
随着工具数量的不断增加,问题就出现了。在客户端上,需要编写各种工具的调用和声明代码。工具越来越多,不仅代码量庞大,维护起来也变得更加困难。
二、MCP登场,解决难题
为了解决上述问题,MCP(一种协议)应运而生。
(一)MCP的角色分工
MCP就像是一个协调者,它给相关组件重新命名并明确了职责。
- MCP服务器:主要负责声明MCP工具,同时提供工具调用的功能。打个比方,它就像是一个工具库的管理员,管理着各种工具,并负责把工具提供给需要的人使用。
- MCP客户端:承担着管理和连接多个MCP服务器的任务,在大模型和MCP服务器之间起到桥梁的作用。可以把它理解为一个采购员,负责从不同的工具库(MCP服务器)采购工具,然后提供给大模型使用。
(二)MCP的交互逻辑
还是以查询重庆天气为例,在MCP参与的情况下,交互流程如下:
- 用户询问“重庆天气如何”。
- MCP客户端向MCP服务器发送“你有什么工具吗(tool/list)?”的询问。
- MCP服务器回复,例如“我可以查天气”“我可以存文件”等工具信息。
- MCP客户端整理所有获取到的工具信息。
- MCP客户端带着整理好的工具信息(如[查天气,存文件])和用户的问题(重庆天气如何),请求大模型识别意图。
- 大模型分析后告知MCP客户端,用户的意思是要查天气,并明确具体参数(tool: 查天气,city: 重庆)。
- MCP客户端根据这些信息调用天气服务(tool/call)。
- 天气服务将查询到的天气数据返回。
- MCP客户端对返回的天气数据进行整理(因为可能返回的数据格式是JSON,需要处理)。
- MCP客户端整理好数据后,比如得到“哇,40℃,人家好热呀~”这样的结果。
- 最终将整理后的结果呈现给用户。
在没有MCP之前,使用Function Calling去请求第三方服务时,客户端需要编写大量代码来对接各种不同标准的服务。而有了MCP标准协议后,情况就大不一样了。客户端无需再承担这些繁琐的工作,函数声明和调用逻辑都交给了MCP服务器。MCP客户端只需要专注于整理工具信息以及执行调用操作即可。这种方式实现了声明和调用的分离,只要对方按照标准实现了MCP服务器,就能接入到支持MCP的客户端中。
三、总结与实践体验
通过上述对比和解释,相信大家对Function Calling和MCP的区别有了更清晰的认识。如果文中内容存在错误,欢迎大家批评指正。