在人工智能与大模型技术飞速发展的今天,我们常常会听到各种专业术语,比如 MCP(Managed Context Protocol)和 Function Call(函数调用)。
它们看起来都有点像是在帮助大模型“获取外部数据”的工具,但其实两者的定位与作用方式大不相同。
MCP
MCP(Managed Context Protocol)是一个抽象层面的协议标准。它规定了上下文与请求的结构化传递方式,并要求通信格式符合 JSON-RPC 2.0 标准。
你可以把 MCP 想象成一个通用的接入标准(“USB-C标准”),任何想要在这个框架下为 LLM 提供数据或工具的实现,都必须按 MCP 的要求来处理消息和上下文。
举个例子,当你给电脑插入USB设备时,无论是鼠标、键盘还是U盘,只要遵循 USB 标准接口,就能被系统识别和使用。MCP 就是这样一个为 LLM(大型语言模型)提供的“通用标准接口”,只不过它是用在 LLM 与外部数据源、工具或应用之间的信息沟通中,而不是给电脑插东西。
MCP 要求通信格式遵循 JSON-RPC 2.0 标准,确保消息传递彼此看得懂。这就像给所有玩家统一一套“语言”和“礼仪”,不管你是数据服务商、工具提供者,还是前端应用,都用这一套规范去和 LLM 沟通。这样一来,LLM 就像插上了一个“通用转接头”(好比 USB-C),任何想要给 LLM 供能或提供数据的资源,只要能符合这套标准,就能与它愉快对话。
Function call
Function call 则是某些大模型(如 OpenAI 的 GPT-4)提供的特有接口特性。
它以特定的格式让 LLM 能产出一个函数调用请求,然后宿主(应用)可以读取这个结构化的请求去执行对应的操作并返回结果。
但这个特性本身并不要求消息一定是 JSON-RPC 格式,也不一定遵守 MCP 的上下文管理方式。
它是由大模型服务提供商定义的一种调用机制,与 MCP 所定义的协议与标准没有内在依赖或直接关联。
举个简单的类比:Function Call 就像某家品牌手机的“专属充电协议”。苹果的 Lightning 接口或华为的 SuperCharge 协议,都不是通用标准,但它们可以让自家设备在特定条件下更好地发挥功能。这些专有接口没有要求一定要使用 JSON-RPC,也不要求按 MCP 那套标准走。它是由大模型服务提供商定义的特性,是特定“供应商生态系统”下的专有能力。
在 Function Call 的支持下,模型可以说:“嘿,我想调用这个函数,给我执行一下!”然后你的应用就会拿到这个调用请求,去跑对应的操作,把结果再返回给大模型。这样的大模型就像一位智能助理,能主动告诉你要帮它做什么事,而不是被动地等待你把数据整理好送给它。
两者是完全不同层面的东西
MCP 是一个更底层、更通用的标准,相当于为所有人提供的“公共基础设施”。Function Call 则是某些大模型专用的“增值服务”。
-
MCP 是通用协议层的标准化约定(更偏抽象和通用性)。
-
Function call 是某大模型厂商特定的实现方式和特性(更偏向具体实现)。
两者并不互相包含
两者并不互相包含,也没有谁必须依赖谁。
应用可以选择在 MCP 之上通过特定机制(包括 function call)与模型交互,也可以在 MCP 范式下使用其他不基于 function call 的方式与模型或数据源交互。
简单来说,MCP 与 Function Call 是两条并行的赛道,它们不互为前提条件,你可以各取所需。
总结
-
MCP:通用协议层面的标准约定,就像给 LLM 使用的“USB-C规范”。
-
Function Call:特定大模型厂商提供的独特特性,就像某品牌手机的专属充电协议。
两者各有用武之地,并不相互包含或依赖。正是因为这种灵活多样的生态,使得我们在 AI 场景中有更多选择与空间去探索。