MCP 介绍
MCP 这个概念最近特别热。在这里,根据我自己的理解介绍一下 MCP。
随着 AI 的流行,大家对于 AI 助手的使用已经很熟悉了。AI 助手的使用遵循一定的模式。用户提供输入给大模型,大模型给出生成的内容。输入和输出都可以是多模态的。模态包括文本、图片、音频和视频。当然了,每个模型所支持的输入和输出的模态是不同的。文本是最基础的模态。
在很多时候,我们使用大模型生成内容时,利用的是大模型自身的知识。大模型在经过训练之后,自身已经包含了大量的知识。训练时所使用的材料越多,模型的体积越大,其中所包含的知识通常越多。
比如,对大模型提问:地球到月球的距离是多少?,大模型可以给出正确的结果。因为这个知识点已经包含在模型内部。
在很多时候,大模型并不具备生成内容所需的知识。因为相关的知识并没有包含在模型的训练材料中。这种情况是无法避免的。至少有两类知识无法被包含在模型中。
-
第一类是发生在模型训练之后的知识。每个模型都有一个 cutoff 日期,表示该模型只包含该日期之前的数据。以 OpenAI 的 GPT 模型为例,GPT-4.1 的 cutoff 日期是 2024 年 6 月 1 号。GPT-4o 的 cutoff 日期是 2023 年 10 月 1 号。
-
第二类是企业和个人的私有数据。通常使用的模型,都是基于公开数据训练而来,不会包含企业和个人的私有数据。
缺少这两类的知识,大模型无法对某些输入,产生正确的结果。
举一个实际的例子,你是一家企业的员工,负责维护公司的公众号。领导给你分配了一个任务,在公众号上写一篇文章,介绍一下公司最近的销售业绩。你打算使用 AI 助手来帮助你。大模型可以帮助生成内容和对内容进行改写。但是这里面缺少了生成内容所需的重要数据,那就是公司的销售业绩。市面上的大模型不会包含公司的销售数据。那怎么解决这个问题?
数据或知识可以有两种方式来提供。一种是把知识内置到模型中,也就是对模型进行微调。另外一种是以外挂的方式,让模型使用知识。
通过模型微调,附加的知识可以作为训练材料,添加到模型中。微调模型并不是一件简单的事情。虽然随着技术的发展,微调模型的成本和难度大大降低,但仍然是一件耗时费力的事情。除此之外,有些数据的实时性很强,不适合使用模型微调。
与模型微调相比,外挂知识的实现方式相对快速和简单。外挂知识有两种实现方式:
- 第一种方式把知识包含在发送给大模型的输入中,也就是提示中。这就是我们经常说的检索增强生成(RAG)技术。
- 第二种方式为大模型提供工具,工具可以提供数据或执行动作。应用提供工具的名称,描述,参数格式和具体的实现。大模型根据需要推导出调用的工具的名称和实际参数值。应用完成工具的实际调用,并把结果返回给大模型,大模型根据工具的调用结果,进行后续的生成。
回到之前介绍的编写公众号文章的例子。
- 第一种方式是把销售数据作为提示的一部分,直接发送给大模型。销售数据从外部获取,由用户手动添加。
- 第二种方式是开发一个工具,可以获取销售数据,再把这个工具提供给大模型。在生成的过程中,大模型使用工具获取数据。使用工具时,不需要用户主动提供额外的知识,但是工具有附加的开发工作量。
介绍完相关的背景知识,回到 MCP 的话题。MCP 是 Model Context Protocol 的缩写。
- Model 指的是 AI 模型。
- Context 指的是上下文信息,也就是前面提到的外挂知识。
- Protocol 表示 MCP 是一个协议。
所以,MCP是一个为 AI 模型提供外挂知识的协议。
MCP 最关键的点在于 P,也就是 Protocol,表明这是一个标准的互操作协议。在 MCP 出现之前,为 AI 模型提供外挂知识的方式早就存在,RAG 和工具调用也不是什么新鲜的事情。问题在于,外挂知识的提供和使用并没有标准的方式。以工具为例,工具的提供和使用与应用所使用的编程语言和框架紧密耦合。使用 Java 编写的应用,没有办法简单的使用 JavaScript 或 Python 编写的工具。
MCP 的出现解决了这个问题。解决的方式很简单,也并不新奇。就是引入一个标准的协议,把外挂知识的提供和使用划分为服务器和客户端两个角色,服务器和客户端之间使用标准的协议进行交互。
- MCP 服务器负责提供外挂知识,包括提示模板、资源和工具。
- MCP 客户端与服务器交互,可以获取这些外挂知识,包括获取具体的提示,资源的内容和调用工具。
服务器和客户端之间使用的是基于 JSON-RPC 的协议。通过这种方式,外挂知识的提供者和使用者之间解除了紧密的耦合。解耦最直接的作用是促进了共享和复用。
对于 AI 应用来说,只需要集成一个 MCP 客户端,可以使用来自不同 MCP 服务器的外挂知识,并不限制 MCP 服务器自身的实现方式。比如,一个 Java 开发的 AI 应用,集成了 Java MCP 客户端之后,可以使用 JavaScript 或 Python 编写的 MCP 服务器中的外挂知识。
MCP 最大的价值在于,促进了外挂知识的共享。目前已经可以看到大量可复用的 MCP 服务器。由于 MCP 的重要性,现在的 AI 应用开发,离不开对 MCP 的了解。