【橘子大模型】MCP启动

一、关于MCP

1、解决的问题

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

markdown 复制代码
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如何提供这个功能则是有两种方式。

  • 本地函数:mcp server可以在自己这个服务的本地提供一些函数,方法,比如计算两个数的和,我们知道llm本身不太擅长做这些事。或者是处理一些本地的数据等等,他当然可以是一个程序了。比如你还可以定义一个函数用来截图屏幕,然后告诉mcp client你现在正在看什么进而传回给llm或者用户。
  • 外部api:mcp server可以调用外部的web api比如高德官方的接口获取地图情况。 总之mcp可以通过这两种方式来提供给mcp client需要的能力。关键在于业务类型。而且你其实尽量可以根据你的业务来选择对接哪个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也是一样,也是可以跑在本地的,这就需要看你怎么接入了。 当然,这些东西我们后面会一一看一下,目前为止我的理解是这样的,我们后面一点点来看。

相关推荐
聚客AI3 小时前
💡 Transformer数据管道:自定义Dataset类+智能批处理最佳实践
数据结构·人工智能·llm
大模型铲屎官3 小时前
【深度学习-Day 29】PyTorch模型持久化指南:从保存到部署的第一步
人工智能·pytorch·python·深度学习·机器学习·大模型·llm
IVAN不想说话3 小时前
GPT-4o 中构建高精度的 MCP 工具与调用匹配策略指南
llm·mcp
数据智能老司机8 小时前
Gemini 2.5 深度解读:Google 如何重新定义下一代 AI?
llm·agent·产品
DeepSeek忠实粉丝8 小时前
微调篇--Transformers多模态流水线任务
人工智能·程序员·llm
AGI老王8 小时前
告别大模型知识幻觉!看LangChain如何用检索增强生成打造可靠AI问答系统
人工智能·langchain·llm
机器之心1 天前
谢赛宁团队新基准让LLM集体自闭,DeepSeek R1、Gemini 2.5 Pro都是零分
人工智能·llm
LLM大模型1 天前
LangGraph篇-LangGraph快速入门
人工智能·程序员·llm
LLM大模型1 天前
LangGraph篇-核心组件
人工智能·程序员·llm