关于 MCP 的几个理解误区
MCP 全称模型上下文协议,是为了在用户与大模型对话过程中,补充上下文信息给大模型,让大模型更准确的回答用户提问而设计的。理解了给大模型补充上下文的原理,就可以知道,MCP 的本质,是指导应用层,如何更好的补充上下文信息给大模型。模型收到回复提问请求时,MCP 工作已经完成了。结论:MCP 协议不需要大模型支持,哪怕你使用古老的 gpt-2 作为问答模型,依然可以使用 MCP 协议补充上下文信息。
误区 1:MCP 协议需要大模型支持
MCP 全称模型上下文协议,是为了在用户与大模型对话过程中,补充上下文信息给大模型,让大模型更准确的回答用户提问而设计的。
在 MCP 出来之前,有多种方式可以实现上下文信息的补充,比如:
- 记忆存储。把对话过程的历史消息存储下来,每次新提问,带上历史消息一起发送给大模型
- RAG。在让大模型回答问题之前,先从本地知识库或者互联网上检索信息,作为上下文补充给大模型
- Function Calling。传递一堆工具给大模型挑选,根据大模型的返回参数,调用工具,用工具返回的结果作为上下文补充给大模型
理解了给大模型补充上下文的原理,就可以知道,MCP 的本质,是指导应用层,如何更好的补充上下文信息给大模型。
模型收到回复提问请求时,MCP 工作已经完成了。
结论:MCP 协议不需要大模型支持,哪怕你使用古老的 gpt-2 作为问答模型,依然可以使用 MCP 协议补充上下文信息。
误区 2:只有支持 Function Calling 的模型才支持 MCP 协议
聊 MCP 协议,必须要理解 Function Calling 机制。
- Function Calling 是一种交互范式。
基本流程是应用层传递一堆工具给大模型,大模型意图识别,做一次 Pick Tool 操作,返回应该调用的工具名称和调用参数,再由应用层发起 Call Tool 操作,拿到结果重新给到大模型回答。
Function Calling 这套机制下有三个角色:应用、资源方、大模型。
两个核心步骤:Pick Tool 和 Call Tool。
Pick Tool 需要大模型推理,Call Tool 需要应用与资源方交互。
- MCP 协议是一套交互标准。可以理解为 MCP 是对 Function Calling 机制的包装与升级。
MCP 协议定义了三个角色:主机、客户端、服务器。
跟 Function Calling 机制相比,MCP 协议相当于是把 客户端-服务器 作为一个黑盒。整体视角看,MCP 协议有四个角色:主机应用、黑盒(客户端-服务器)、资源方、大模型。主机把请求给到客户端,客户端请求服务器,服务器对接资源方,主机最终得到黑盒返回的结果,作为补充上下文给到大模型回答。
Function Calling 是应用直接对接资源,MCP 是应用通过黑盒对接资源,对接更加标准化,资源接入成本更低。
Function Calling 是应用直接定义一堆工具,MCP 是应用从 MCP 服务器获取定义好的工具,应用无需重复编码。
涉及到工具调用的环节,MCP 与 Function Calling 的交互形式一致。都依赖大模型的 Pick Tool 能力。
所谓的大模型支持 Function Calling,是指大模型在 Pick Tool 环节,有更好的理解和推理能力,最终能返回更加准确的 Tool 和参数。不支持 Function Calling 的模型,依然可以通过提示词工程实现 Pick Tool。只不过准确度不如支持 Function Calling 的模型。
结论:不支持 Function Calling 的模型,依然可以使用 MCP 协议补充上下文信息。
误区 3:大模型原生支持 MCP 协议
所谓的大模型原生支持 MCP 协议,正确的理解应该是大模型内化了 MCP 协议的定义,并且内置集成了大量基于 MCP 协议定义的工具。当接到用户提问时,应用即使不给大模型传递任何工具,大模型依然可以基于内化的工具列表进行推理,返回应该调用的工具名称和调用参数给应用。事实上,互联网上的资源是千差万别的,意味着对接资源的 MCP 服务器及其内部的工具是海量的,不可枚举的。
另一个关键点是,某些资源是私有的,需要用户鉴权的,大模型训练时不可能内化用户的鉴权凭证。从这个角度来讲,大模型内化 MCP 协议下的海量工具,不现实也不可能。
某些模型厂商,也许是为了蹭 MCP 的热度,某些自媒体,也许是对 MCP 协议理解不到位,宣称某大模型原生支持 MCP 协议。其实要表达的意思,也许只是,在随大模型一起发布的某个 agent 框架里面,加上了对 MCP 协议的支持。
结论:大模型原生支持 MCP 协议,这种说法是不专业的。大模型现阶段不可能原生支持 MCP。
本人认知有限,也许会有理解偏颇之处。欢迎补充交流。
赛博木子君@axtrur
·
4月30日
同感,现在太多人云里雾里了!补充一下
- mcp并不是什么新的协议,他只是一个规范标准,为了避免以前function-calling需要定义每一个工具并集成到对应应用内的重复劳动,实际上它的提出是为了将“工具集”隔离出来的“黑盒封装”,这种概念下,用http或者传统方式也可以实现
- 模型对mcp支持本身是一种pick tool能力的支持,市面上支持mcp的host有些做的兼容性较好的只是把mcp的工具定义转成prompt,并不是说模型支持mcp才能用mcp
- “模型原生支持mcp”这个说法就应该从互联网删掉,也不知道是谁第一个提出的,太失偏颇!
- A2A跟mcp严格意义上是包含关系不是对立关系(因为agent可以包含tools也可以包含mcp servers),有些人之所以觉得是对立关系是认为mcp一样可以发展成agent的角色,但是目前用户对于mcp的心智以及mcp约等于一个独立工具集的概念,导致了mcp强行发展成agent协议是不合适的,而反过来a2a更加合理(a2a的定义也更加合理“企业协作“,它不像ANP那么宽广,短期更符合“生态围墙”的现状)
更多推荐
所有评论(0)