本人在之前开发的项目中大量使用Funtion Call, MCP获得关注后,开始并没有完全理解两者的区别和MCP的实际意义。仔细思考了MCP和Function Call的本质区别,有了一些心得,总结归纳如下。
Function Call
在大语言模型(如大语言模型LLM)中,Function Call(函数调用) 是一种让模型能够与外部工具、API或系统交互的机制,使其不仅能生成文本,还能执行特定任务(如查询数据库、调用计算接口等)。以下是其核心工作流程:
-
定义被Function Call调用的Tools。 -
用户输入时, LLM根据输入匹配Tools的定义,决定执行哪个Tool。调用的时候根据用户输入信息动态生成参数 -
Tool可以调用外部API, 比如天气查询;或者读取本机文件(例如企业黑话汇总文件) -
LLM根据Tool调用结果,直接生成回复,或者可以根据返回结果决定是否要调用其他Tool.

MCP
官方给出的MCP架构是这样的:

这个架构定义比较抽象, 这里把上面的Function Call结合一下,个人感觉比较容易理解

从此图可以看出,最大的改动在于Tool的定义移到Application外面了。 具体来说, 现在由原来提供API的服务提供商来定义Tools, 并封装成一个MCP Server. 例如,高德地图把他们的地理编码/逆地理编码/路径规划等API封装成Tools并提供一个API。详细参考https://lbs.amap.com/api/mcp-server/summary
如此一来应用开发者只要在原来的Application中实现MCP Client,根据LLM的指示调用对应的MCP Server就行了。原来的Application现在也叫MCP Host了。
MCP的优势
极大简化应用开发工作量
假设应用要调用100个api, Function Call方案要实现100个Tool, 现在不用了,因为Tool是服务提供商实现了。应用侧只需要实现一个mcp client就行。
更容易标准化
如果企业有多个团队,Function Call每个团队都要实现自己的Tool, 实现方式五花八门.现在这样的问题不存在了。
增加Tool的可靠性和可复用性
由服务商实现Tool, 并提供全世界开发者使用,比每个Tool由全世界不同的开发者分别实现,复用性大大增加。
增加Tool的易用性
如果应用逻辑并不复杂, 无需开发自己的MCP Host和MCP Client。 借助已有的工具例如Cursor, CLine, 直接调用MCP Server完成工作。 对于没有编程经验的人来说,可用性大大增强。