掘金 人工智能 前天 09:48
【橘子大模型】MCP启动
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了MCP(Model Communication Protocol),一种旨在标准化AI系统与外部世界交互的协议。文章首先指出了现有LLM与外部世界交互的局限性,如缺乏与外部世界的交互性、工具调用机制不统一、工具脚本开发成本高、以及远程调用带来的规范问题。随后,文章详细阐述了MCP的定义、工作原理和优势,通过图例和实例,清晰地展示了MCP在AI交互中的作用。MCP通过引入标准化的协议,解决了现有问题,提升了效率。文章最后探讨了MCP的各个组成部分,以及它们在实际应用中的位置和作用。

🌐 **解决交互难题**: LLM与外部世界的交互面临诸多挑战,如缺乏交互性、工具调用机制不统一等。MCP应运而生,旨在解决这些问题。

⚙️ **MCP核心功能**: MCP为AI系统与外部系统之间的交互提供标准化机制。它规范了模型侧和应用侧的交互方式,确保不同模型厂商遵循统一的协议。

💡 **标准化优势**: MCP通过统一的协议,简化了工具的调用流程,降低了开发成本,提高了效率。开发者只需接入对应的MCP Server,无需关注底层的API细节。

💻 **组件构成**: MCP由三个关键组件构成:MCP Host(用户交互入口)、MCP Client(通信入口)和MCP Server(功能提供者)。它们共同协作,实现了AI与外部世界的标准化交互。

一、关于MCP

1、解决的问题

其实网上介绍mcp的资料和文章已经非常多了,我就简单的来总结一下为啥需要mcp呢。我们从以下四个点来看目前存在的问题。

1、llm本身很不错,但缺乏与“外部”世界的交互性,他只能为你提供一个交互,但是不能替你去和外部世界去打交道。2、我们可以通过llm的function call,tolls调用使llm应用程序能够与外部世界进行交互,从而使它们成为代理……但所有框架都有不同的“工具调用”机制。比如你访问mysql是一个操作,访问pgsql是另一个操作,不同的大模型访问同一个东西也是不一样的操作。不管是api还是什么。3、许多功能或工具调用脚本都是单独开发,以便与AI代理集成;其中许多并未得到底层API提供者的认可。比方说我们自己为deepseek开发了一个tools脚本去访问高德地图,但是deepseek模型并不知道,因为没这个规范,人家下次更新给你变了调用,你就抓瞎了。你需要随时跟上模型端的变化,这使得成本变得很高。4、大多数功能或工具的调用都是在别人的服务器上执行的,这使得llm无法与本地机器进行交互,需要远程调用(rpc?),这种调用同样需要遵守规范。

以上四个问题为我们让大模型和外部世界交互产生了诸多不便,于是一个需求很自然的就产生了。为AI系统(如LLM代理等)与外部系统之间的交互提供一个标准化的机制(即协议)。这样不管是模型侧还是应用侧大家都遵守这个规范,你怎么变我们起码暴露出来的api是不变的,并且各家模型厂商都遵守这个规范,也不会使得针对相同的调用产生不同的产物,进而来解决以上四个问题。

2、什么是mcp

我们可以从一个图例发展来看一下mcp的意义。最开始的时候,是这样的,我们作为用户,打开gpt的页面,然后输入问题,你打开的这个页面就是host,他作为一个应用后台去访问对应的模型(一般你还能选择你要的模型)。但是紧接着我们上面也说,遇到的问题就是他无法和外部世界去交互。但是很多大模型是带有tools功能的,比如我们可以去ollama官网上看到哪些模型支持tools调用的。我们可以为他们编写一些tools函数,然后在函数里面可以去访问一些外部世界的东西,比如读取数据库,修改文件等等,然后大模型通过prompt来确定调用哪个函数。进而实现这个功能。于是结构就变成这样。我们通过调用tools函数,来实现对外交互,进而形成所谓的agent。其中的tool部分就需要我们开发来编写函数代码。于是到此为止,就遇到了我们上面说的另一个问题,没有规范,没有统一化,成本颇高。根据计算机理论中,没有什么问题是不能加一层来解决的。我们现在的问题其实说白了就是函数调用和调用对端直接耦合了,你在tools里面的调用得直接对接对端的api接口等等。其实就是这种耦合导致的我们成本提高。以前我们在java开发中遇到上下游耦合是怎么做的,加一层来解耦,mcp就是这样的。我们来看mcp加入之后的图例。此时mcp接入之后,用户还是和以前一样的动作继续和host交互。但是host此时就只需要和mcp client来交互就可以了,mcp client去找到对应的mcpserver来调用外部api,而mcp server是遵循统一的协议的,他对外暴露的东西是不变的,所以我们不需要考虑变动,只需要接入对应的mcp server即可,mysql的server,pgsql的server。这些都由官方和社区开发好,给你用就好,开发不需要关注如何调用api了。于是这样就形成了规范和标准,后面就能提高效率了。但是这样也有一个问题就是在你选择对应的host产品的时候,你的保证它是支持mcp client的,不然它不支持这个你也是白扯,他要么支持接入mcp client,或者他自己内置mcp client。最后网上有一个很形象的图你可以参考一下。

二、总结

所以我们再来审视一遍什么是mcp,并且我们用一个例子来说明可能会更好一些。经过我们上面的描述,实际上我们已经知道了mcp大致的一个流程图,这里我们给出一个更加完善的版本。ok,容我来一步一步解释一下这个图的各个部分。1、作为用户,我们肯定是ai工具的使用者,也是所有指令的发起者,我们作为使用入口,这个没啥说的。2、mcp host,这个概念实际上其实就是我们日常和ai打交道的应用,比如你的idea上的ai助手,gpt的页面问答入口。我们和这个mcp host交互从而进入ai交互的大门。3、mcp client,这是mcp的真正入口,他可能是单独存在的,mcp host接入他即可。也可以是集成在mcp host内部作为一个东西整体存在。比如现在的vscode据我所知就整合了mcp client的模块。所以mcp client的本质就是为了和mcp server进行通信,而mcp host的作用在这个体系中就是支持了mcp client。4、当mcp client支撑完备之后,此时他的作用就是和mcp server进行通信,通信使用的协议就是mcp 协议。而mcp server 你就可以理解为一个能提供功能的服务,一般情况下一个mcp server就是一个功能,比如访问高德地图,访问股票市场。但是也有一些mcp server拥有多个功能,比如查看汉庭酒店的房源列表,查看某一家酒店的房间详情等等,具体就是看你如何定义业务划分。而mcp server如何提供这个功能则是有两种方式。

所以你其实可以看到他的本质就在于client -> server的交互这一步上。这就是他的核心,他定义了交互协议,标准化了通信模式。接下来我们用一个例子来说明他的交互。比如你有一个电脑,电脑上面有一个时钟,然后你给llm添加了一个tools,用来获取某个城市的天气。此时你通过mcp host提出问题,请问今天下午5点北京的天气如何?此时,mcp host他是知道自己接入了一个mcp client的,然后mcp host就会列出llm支撑的一系列tools工具,其中自然包括这个调取天气的tools,此时他会作为一个发起者,把tools+参数(今天下午+北京),注意,他不仅传递参数,还传递tools,传递给对应的mcp server,这样该server就会去执行这个功能。这些功能都是在mcp client完成的。然后对应的mcp server就会调用自己内部的访问天气的接口去获取,然后返回给mcp client,然后返回给llm,最后返回到你的问答界面上,你就知道今天下午的北京热的一笔。

最后我们来讨论一个问题,mcp host,mcp client,mcp server在哪?目前为止mcp host和client我们大部分接触的都是在本地,不过也有可能运行在云端,比如你用gpt的那些官方网址等等。而mcp server也是一样,也是可以跑在本地的,这就需要看你怎么接入了。当然,这些东西我们后面会一一看一下,目前为止我的理解是这样的,我们后面一点点来看。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP AI交互 标准化协议
相关文章