摘要:比如大模型的数学不好,知名测试就是让大模型比较9.8 和 9.11哪个数大,大概半年之前,大部分大模型都会告诉你是9.8大。现在基本都正确了,其实还要归功于 RAG 技术,RAG 技术的原理和 MCP 实际上有异曲同工之妙,都像是个外挂程序,只不过 RAG 挂
MCP 就像是大模型世界里的“最后一公里”。说个暴论,MCP 应该是每个程序员在2025年必须掌握的知识点。
大模型功能很强大, 我们都是清楚的。但是,它是有短板的。
比如大模型的数学不好,知名测试就是让大模型比较9.8 和 9.11哪个数大,大概半年之前,大部分大模型都会告诉你是9.8大。现在基本都正确了,其实还要归功于 RAG 技术,RAG 技术的原理和 MCP 实际上有异曲同工之妙,都像是个外挂程序,只不过 RAG 挂在了LLM端,MCP挂在了客户端。
再比如,大模型在没有联网功能前,它是没办法告诉你实时天气的。
大模型比较擅长处理文科方面的工作,比如做总结、出报告、写文章等等,这也合理,毕竟人家 LLM 的全称是「大语言模型」,当然处理语言比较强。再拿多模态模型来说,比如生图模型,你让它画一幅画,画出的是梵高风格还是莫奈风格,对于很多人来说都没什么关系,好看就行。
总结下来,大模型更擅长处理艺术类、语言类工作,或者说它擅长搞那些形而上的东西,而不太擅长处理特别精细化的东西,那些定制化的需求就更不用说了。
MCP,全称 Model Context Protocol,由 Anthropic 在 2024 年 11 月推出,也就是目前公认写代码最厉害的大模型 Claude 的公司。MCP是社区共建的开放协议。目的是提供一个通用的开放标准,用来连接大语言模型和外部数据、行为。
注意喽,它是一个开放标准,就像我们电脑上的USB接口,就像是手机上的 Type-C 接口,不管是哪个厂家生产的数据线,只要遵循USB标准或者 Type-C标准,就能用来充电或者传输数据。或者不管是哪个硬盘厂商生产的硬盘,只要甩出一个支持 Type-C的连接头出来,就能接到电脑上用。
再来一个例子,我们平时开发做接口调用都用 JSON,JSON 的格式就是一个标准,只要你把数据格式构造成 JSON 这种格式,不管是谁来接数据,不管用哪个JSON库,设置手动解析,只要符合 JSON 的格式,就能够畅通无阻。
好像有点儿唠叨了,总之 Anthropic 是制定了一个标准,只要大家遵循这个标准来就可以了。
MCP 主机(MCP Hosts)
像 Claude Desktop、IDE 或希望通过 MCP 访问数据的 AI 工具等程序,还有像 VsCode 中的 Cline 插件、Cursor、WindSurf 都支持MCP了,都是MCP主机,未来支持MCP调用的终端都可以成为 MCP主机。甚至,你自己也可以开发一个客户端。
MCP 客户端(MCP Clients)
通过协议客户端与服务器保持 1:1 连接的程序。通过上图也看出来了,主机和客户端一般都是在一起的,Client 更偏重于编程概念里的解释。
可以对照数据库工具,比如 Navicat 软件本身可以理解为主机,而一个 Navicat 可以同时连接多个数据库,每连接一个数据需要一个连接(设置多个),这些连接就可以理解为MCP里的客户端。
MCP 服务器(MCP Servers)
轻量级程序,每个程序通过标准化的模型上下文协议暴露特定功能。这部分就是最后一公里的具体实现了,需要根据具体的需求去开发,比如想让LLM访问自研系统的数据,就要提供开放接口并供LLM使用,这部分就是 MCP服务器。
MCP 服务可以用 Python、JavaScript(NodeJS)、Java 来开发,目前这是官方开放了 SDK 的,以后肯定还有 Go、Rust、.NET 等语言的SDK 出来。
本地数据源(Local Data Sources)
您的计算机文件、数据库和服务,MCP 服务器可以安全地访问这些数据源。
远程服务(Remote Services)
可以通过互联网访问的外部系统(例如,通过 API),MCP 服务器可以连接到这些服务。例如查询实时天气,你的MCP服务器也要去国家气象局等第三方平台获取,这不就需要 API调用了吗。
MCP 的调用机制需要客户端、MCP服务端、LLM 三方配合。
首先MCP 是一个服务,比如一个查询天气的 Spring Boot 应用,按照官方标准实现具体的服务接口,在本地启动。
将服务在客户端进行配置,就像在注册中心注册一样,通常是启动命令,例如 npx 或者java,意思就是客户端打开后,在本地同时启动MCP服务。例如下面这个配置文件内容,配置了两个服务,一个用 Java 实现的,一个是 Node。
{"mcpServers":{"spring-ai-mcp-weather":{"command":"java","args":["-Dspring.ai.mcp.server.stdio=true","-jar","/Users/fengzheng/model-context-protocol/weather/starter-stdio-server/target/mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar"]},"brave-search":{"command":"npx","args":["-y","@modelcontextprotocol/server-brave-search"],"env":{"BRAVE_API_KEY":"xxxx"},"autoApprove":["brave_web_search"]}}}之后,客户端就能根据MCP标准获取到 MCP 服务都有哪些可以用的工具(接口)了,在收到匹配的需求后就可以调用具体MCP的接口了。
整个原理其实比较简单,下面是一个调用流程图。
在文章开头说到,大模型虽然厉害,但是有短板。而每一个短板都是一部分人的真实需求,例如有人想要精确的实时天气情况,这就是一个短板。有人说,你想查天气,直接打开一个APP不就行了吗,当然可以,但是既然有了大模型,在一个应用或一个终端中完成更简单,省去拿手机打开APP的步骤了。
再比如,直接在大模型聊天窗口操作本地数据库,已经有很多这种 MCP 服务了。
再比如,想要搞自己的知识库。假如我跟大模型说:把我曾经写的关于 JVM 的文章找出来,并给我汇总成一篇带目录结构的文章合集。如果没有 MCP 的辅助,现在的任何大模型客户端都是没办法实现的,而有了可以访问本地文件的MCP 帮助,这个需求就有可能实现了。
还有数不胜数的类似的需求,每一个现有APP的功能都可能会成为 MCP 需要的功能。
说到MCP就不得不提到Function Calling 和 Agent,一眼看过去,这几个好像功能差不多,目的也差不多,都是为了弥补大模型的短板。
MCP ,咱前面介绍了一大堆,就不再过多赘述了,总之它是运行在本地(至少目前是),由Cursor 这样的主机(或统称为终端)调用,可以访问本地资源、个性化的API等。
Function Calling
Function Calling 是AI模型与外部函数或服务交互的一种机制。
在这种模式下,模型生成一个函数调用请求,宿主应用解析该请求并执行相应的操作,然后将结果返回给模型。通常有以下特点:
同步执行:调用函数后,程序会等待函数执行完毕并返回结果,才继续执行后续代码。
紧耦合:模型与函数或服务之间的关系较为紧密,需要在代码中明确指定。
特定实现:函数调用的实现方式可能因平台或服务提供商而异,缺乏统一标准。
智能体(Agent) 智能体是具备自主行动能力的系统,能够执行一系列复杂的任务,比如前一段时间很火的 Manus。
它们通常具备以下特征:自主性:能够根据环境变化和目标自主做出决策。
任务执行:能够执行多步骤、多环节的任务,往往需要调用多个工具或服务。
集成性:通常集成多种功能模块,如MCP和函数调用,以实现复杂的任务处理。
主要区别MCP作为一种协议,主要解决模型与外部工具和数据源之间的交互问题,提供标准化的接口和通信方式。很灵活,只要遵循标准,几乎能实现任何功能。
Function Calling是模型与特定函数或服务交互的具体实现方式,关注如何在代码层面实现功能调用。需要大模型和大模型自身服务端、特定客户端紧密绑定,没那么灵活。
智能体就复杂多了,它是一个系统,能够自主执行任务,通常需要结合MCP和Function Calling等机制,以实现复杂的功能。
MCP 发展预测AI 势不可挡,未来生活的各个方面必将充斥着AI的身影,那MCP肯定随着这个趋势继续进化。
猜测可能会出现下面这几种情况,有些正在发生。
超级客户端的出现:
现在我们想要什么功能就要打开具体的APP,随着AI的普及,是否会有超级客户端或者终端呢,就比如豆包或者小爱同学这种。
这些客户端将集成多种工具和服务,提供统一的用户体验。例如,用户可以在一个应用中同时访问本地文件、数据库、浏览器和其他服务,无缝切换,提高工作效率。
现在用小爱同学通常只有两个场景:定时和查天气。如果使用MCP的方式,和更多的服务商打通,是不是就可以在小爱同学实现更多的需求了。
MCP 市场
就像现在的应用商店那样,每个人、每个公司都可以提交自己的 MCP,比如某短视频平台提交一个推荐视频接口,用户就可以在一个支持 MCP 的客户端直接刷视频了(当然同时也要支持加载视频功能)。
现在 Cline 插件有一个 MCP 市场功能,可以查看各个开源的 MCP,想用哪个就可以直接安装。但是还比较初级,有时候还不太好用。
远程运行能力的实现
MCP 支持多种通信方式,包括本地的 STDIO 和网络上的 HTTP/SSE。当需要跨机器通信时,MCP 可以使用 HTTP/SSE 实现工具的远程调用。这意味着,未来的 MCP 系统将能够在本地和远程环境中运行工具,提供灵活的部署选项。
对于程序员来说,再本地跑Node、Python、Java 都不是什么难事儿,但是如果是一个没接触过代码的人,这就太难了。
所以,如果想让更多的人用上 MCP ,一定要解决本地启动服务的问题。
资源分享本文只是抛砖引玉,以下是关于 MCP 的一些学习资源,可以进行更加深入的学习。
官方指导文档: https://modelcontextprotocol.io/introduction
Learn how to get started with the Anthropic API and Claude: https://docs.anthropic.com/en/home
服务端开发指南: https://modelcontextprotocol.io/quickstart/server
TypeScript SDK: https://github.com/modelcontextprotocol/typescript-sdk
Python SDK: https://github.com/modelcontextprotocol/python-sdk
Java SDK: https://github.com/modelcontextprotocol/java-sdk
目前几个比较大的 MCP 仓库
来源:不秃头程序员一点号