什么是 MCP(模型上下文协议)
大家读完觉得有意义及帮助记得及时关注!!!
1 什么是 MCP?
1.1 命名
MCP 是 Model Context Protocol
的缩写。从名称中,我们可以看到
- 首先,它是一个通信协议,
- 然后,它用于模型 (LLM),
- 最后,它用于交换/传递模型上下文。
1.2 为什么选择 MCP?
在 LLM 上构建代理或复杂工作流时,通常需要与外部数据或工具(例如外部 MySQL、Google Maps)集成。 MCP 提供了一种标准化的方法来执行此作。
让我们用一个类比来更好地解释它。
1.3 类比
传统上,个人电脑有多种硬件连接器,如 USB、HDMI、DP、RJ45 等。
各种硬件连接器。图片来源
计算机设计人员必须决定他们想要在期间支持哪些设备 设计阶段
,然后在主板上预装相应的硬件接口
。 当新型硬件连接器出现时,无法支持它们 无需更换主板,也无需引入新型硬件 适配器。
1.3.1 电脑 USB type-c
随着 USB type-c 规范的推出,情况发生了变化。USB Type-c 端口 正在成为大多数设备的标准连接器。如下图所示,
无花果。使用适配器连接到计算机的 USB type-c 集线器的外围设备。
当电脑需要连接很多外设时,首先要插上一个 USB type-c 集线器
(实际的集线器一般支持多个接口,而不仅仅是 type-c) 以及这些外围设备
- 如果他们已经是 type-c,他们可以直接连接到集线器;
- 否则,例如它们是一些旧设备或专业设备 特定字段,可以先通过适配器转换为 Type-C,然后再连接到 Hub。
所以,只要设备支持(直接或通过转换器)type-c 接口, 它可以很容易地集成到计算机中。
1.3.2 AI 应用的 MCP
MCP 就像 AI 应用的 USB-C 端口。就像 USB-C 一样 提供一种标准化的方式将您的设备连接到各种外围设备,并且 配件,MCP 提供了一种标准化的方式将 AI 模型连接到不同的 数据源和工具。
一个类比如下所示,
无花果。使用 MCP 将外部服务集成到 AI 应用程序。注意 MCP 还支持连接到本地服务(与 AI 共存 application) 的 Package。
从左到右,
个人电脑 外壳 | AI App 案例 | 笔记 |
---|---|---|
外围设备,例如显示器 | 外部数据或服务 ,例如 Google 翻译 | 集成到 AI 应用程序中。他们可以使用各种协议 ,例如 HTTP、WebSocket、gRPC、Redis 协议等。 |
连接器适配器 | Protocol adaptation layer (server-side) | 每个外部服务一个 MCP 服务器 ,为 MCP 客户端提供标准化接口 (JSON-RPC)。 |
USB Type-c 集线器 | Protocol adaptation layer (client-side) | 每个外部服务一个 MCP 客户端,使用标准协议连接相应的 MCP 服务器。 |
个人电脑 | AI 应用程序 | 主要部分是将外部服务与 MCP 客户端集成。 |
LLM 层 | AI 应用程序依赖 LLM 服务通过 MCP 对外部服务进行函数调用 。 |
1.4 总结
MCP 是一种开放协议,它标准化了应用程序如何为 LLM 提供上下文。将 MCP 想象成 AI 应用程序的 USB-C 端口。就像 USB-C 一样 提供一种标准化的方式将您的设备连接到各种外围设备,并且 配件,MCP 提供了一种标准化的方式将 AI 模型连接到不同的 数据源和工具。
2 架构和规格
MCP 遵循经典的客户端-服务器架构
。
2.1 基本协议
- JSON-RPC 消息格式
- 有状态连接
- 服务器和客户端功能协商
2.2 服务器端
MCP 基元
MCP 协议定义了服务器可以实现的三个核心原语:
原始 | 控制 | 描述 | 示例使用 |
---|---|---|---|
提示 | 用户控制 | 由用户选择调用的交互式模板 | 斜杠命令、菜单选项 |
资源 | 应用程序控制 | 由客户端应用程序管理的上下文数据 | 文件内容、API 响应 |
工具 | 模型控制 | 向 LLM 公开以执行作的函数 | API 调用、数据更新 |
服务器功能
MCP 服务器在初始化期间声明功能:
能力 | 功能标志 | 描述 |
---|---|---|
prompts | listChanged | 提示模板管理 |
resources | subscribe listChanged | 资源公开和更新 |
tools | listChanged | 工具发现和执行 |
logging | - | 服务器日志记录配置 |
completion | - | 参数补全建议 |
2.3 客户端
客户端可以向服务器提供以下功能:
- 采样:服务器发起的代理行为和递归 LLM 交互
MCP 客户端通过 API 获取服务器的功能,例如 .list_tools
注意,LLM 只负责选择函数,实际的函数调用是在 AI App 内部触发的。
2.4 编程示例
- https://modelcontextprotocol.io/quickstart/client
- https://github.com/modelcontextprotocol/python-sdk
3 函数调用与 MCP
从概念上讲,MCP 和 Function call 都是供 AI 应用程序轻松调用 外部服务,但它们的工作方式不同。我们来看看 工作流 —— 访问 Google Translate API —— 并查看 这两种方法之间的区别。
3.1 函数调用
无花果。用于访问 Google Translate 的函数调用工作流。
步骤:
- AI app:
构建提示
音,在提示中包含谷歌翻译 API的功能信息
; - AI 应用程序:
使用提示调用 LLM
; - LLM: 模型响应,包含
所选函数
; - AI 应用程序:使用 (HTTP/HTTPS)
调用 Google Translate API
;
3.2 MCP
MCP 的相同场景:
无花果。用于访问 Google Translate 的 MCP 工作流程。
步骤:
- AI 应用:使用谷歌翻译服务的
MCP 服务器地址初始化 MCP 客户端
; - MCP 客户端:通过 MCP 服务器内置的
list_tools
API 获取谷歌翻译 MCP 服务器的能力; - AI app:
构建提示
音,在提示符中包含谷歌翻译 API 的所有功能信息
(从第 2 步获取); - AI 应用程序:
使用提示调用 LLM
; - LLM: 模型响应,包含
所选函数
; - AI 应用程序:使用 MCP
调用适当的 Google Translate API
。
3.3 比较
函数调用 | MCP | |
---|---|---|
AI 应用程序(配置)的先验知识 | 确切的函数名称和参数 | MCP 服务器地址 |
AI 应用程序可以使用的函数 | 静态,仅预配置功能 | 动态,所有功能均通过 MCP 服务器通过接口公开list_tools |
灵活性 | 低 | 高 |
Token 消费 | 低 | 高。在构建 Prompt 时,Prompt 中可能包含太多函数的描述 |