当前位置: 首页 > news >正文

DeepSeek15-揭密模型上下文协议(MCP)

模型上下文协议 (MCP) 从入门到精通

在当今人工智能快速发展的时代,模型之间的协作和交互变得越来越重要。模型上下文协议 (Model Context Protocol, MCP) 作为一种专门为 AI 模型设计的通信标准,正在逐渐成为连接不同模型和系统的桥梁。本文将深入浅出地介绍 MCP,包括其基本概念、工作原理、Python 实现示例以及相关资源链接。

一、MCP 基础概念

什么是 MCP?
  • MCP 是一种用于规范 AI 模型与外部系统之间通信的协议。
    它定义了模型请求和响应的标准格式,以及模型上下文的管理方式,使得不同的模型和系统能够无缝协作。

  • MCP 是AI 世界的 “通用插座”

    • 想象一下,你手头有一堆不同品牌的电器,每个电器的插头形状各异,要找到适配的插座极为麻烦。MCP 对于 AI 模型和工具而言,就如同一个 “通用插座”,它是一套开放标准,能在 AI 模型与数据源、外部工具间搭建安全双向的连接桥梁。

    • 以日常场景举例,当你询问智能助手 “明天上海的天气如何,顺便规划一下去外滩的最佳路线” 时,传统的大型语言模型(LLM)可能仅能依据已有知识进行天气情况的泛泛回答,无法给出实时天气信息,更难以规划路线。而引入 MCP 后,模型可借助它调用实时天气 API 获取上海明天的天气,同时连接地图工具规划前往外滩的路线。这一切得以实现,正是因为 MCP 统一了模型与各类工具交互的规则与数据格式。

    • 从技术层面来讲,MCP 采用经典的客户端 - 服务器架构。在这个架构里,主机应用(如集成了 LLM 的聊天机器人应用)作为客户端,通过 MCP 与提供特定功能的服务器(比如天气数据服务器、地图服务服务器)相连。客户端负责接收用户请求,并将其转化为符合 MCP 规范的请求发送给服务器;服务器则对请求进行处理,调用相应工具或数据源获取结果,再将结果按照 MCP 格式返回给客户端。

为什么需要 MCP?

在实际应用中,我们经常需要将多个 AI 模型组合在一起,或者让模型与外部数据源、工具进行交互。然而,不同的模型和系统往往有不同的接口和数据格式,这使得集成变得困难。MCP 通过提供统一的标准,解决了这些问题,大大降低了集成的复杂度。

MCP 的核心组件
  1. 模型请求:定义了如何向模型发送请求,包括输入数据、参数配置等
  2. 模型响应:定义了模型返回结果的格式,包括输出数据、状态信息等
  3. 上下文管理:负责管理模型运行时的上下文信息,如会话状态、用户偏好等

二、MCP 工作流程图

MCP 的工作流程可以概括为以下几个步骤,为更直观地理解 MCP 的工作流程,我们通过下面的流程图来展示:

客户端应用
构建MCP请求
MCP客户端发送请求
MCP服务端接收请求
调用对应模型或工具处理请求
构建响应结果
MCP服务端返回响应
MCP客户端接收响应
客户端应用处理响应
  1. 构建 MCP 请求:客户端应用根据用户需求或任务,利用 MCP SDK 构建包含任务信息、输入数据、上下文等的请求对象。

  2. MCP 客户端发送请求:MCP 客户端将构建好的请求发送至服务端。

  3. MCP 服务端接收请求:服务端监听并接收来自客户端的请求。

  4. 调用对应模型或工具处理请求:服务端根据请求中的任务类型,调用相应的模型或工具进行处理。

  5. 构建响应结果:模型或工具处理完成后,服务端将结果按照 MCP 规范封装成响应对象。

  6. MCP 服务端返回响应:服务端将响应发送回客户端。

  7. MCP 客户端接收响应:客户端接收服务端返回的响应。

  8. 客户端应用处理响应:客户端应用对接收到的响应进行处理,可能是展示给用户,也可能进一步用于后续任务。

三、MCP 的重要性:打破模型与现实的壁垒

在 MCP 诞生前,AI 模型与外部世界的连接存在诸多问题。不同模型调用外部工具的方式千差万别,开发者为让模型对接各类数据源和工具,需编写大量定制化代码,这不仅耗时费力,而且不同模型与工具组合时,适配难度极大。

MCP 的出现改变了这一局面,它带来了以下显著优势:

  1. 降低开发成本:开发者只需依据 MCP 规范进行一次开发,就能让模型与多种支持 MCP 的工具和数据源交互,无需针对每个模型 - 工具组合重复开发。

  2. 提升模型能力:模型借助 MCP 可实时获取外部信息,不再局限于训练数据中的知识,从而能够应对更复杂、更具时效性的任务。

  3. 促进多模型协作:不同模型遵循 MCP 标准,能够更轻松地实现协同工作,比如自然语言处理模型处理文本后,将结果传递给数据分析模型进一步挖掘价值。

四、Python SDK 示例

用 Python SDK 实现 MCP:服务端与客户端示例

MCP 官方提供了 Python SDK,极大地简化了基于 MCP 的开发工作。接下来,我们通过示例代码看看如何使用它构建 MCP 服务端和客户端。

下面我们通过 MCP 官方 Python SDK 来实现一个简单的客户端和服务器示例。

安装 SDK首先,我们需要安装 MCP Python SDK:
pip install mcp-sdk
客户端示例代码(python)
from mcp_sdk.client import MCPClient
from mcp_sdk.types import ModelRequest, InputData# 初始化客户端
client = MCPClient(server_address="http://localhost:8080",api_key="your_api_key_here"
)# 准备输入数据
input_data = InputData(text="请帮我分析一下这段文本的情感倾向",metadata={"language": "zh"}
)# 创建模型请求
request = ModelRequest(model_id="sentiment-analysis-model",input_data=input_data,parameters={"temperature": 0.7}
)# 发送请求并获取响应
response = client.invoke(request)# 处理响应
if response.status == "success":print(f"情感分析结果: {response.output.text}")print(f"置信度: {response.output.confidence}")
else:print(f"请求失败: {response.error_message}")
客户端示例代码2

下面的代码展示了客户端如何使用 MCP SDK 向服务端发送请求并获取响应:

from mcp_sdk.client import MCPClient
from mcp_sdk.types import ModelRequest# 初始化客户端,指定服务端地址与认证信息(假设需要认证)
client = MCPClient(server_url="http://localhost:8080",api_key="your_secret_api_key"
)# 构建请求数据,包含任务描述、输入数据及上下文信息
request = ModelRequest(model_id="example_model",input_data={"input_text": "这是一段示例输入文本"},context={"user_id": "12345","timestamp": "2025-01-01T12:00:00Z"}
)# 发送请求并获取响应
response = client.invoke(request)if response.status == "success":print("服务端响应结果:", response.output)
else:print("请求出错:", response.error_message)
服务端示例代码(python)
from mcp_sdk.server import MCPServer, ModelHandler
from mcp_sdk.types import ModelResponse, OutputData# 定义模型处理器
class SentimentAnalysisHandler(ModelHandler):def handle(self, request):# 这里实现实际的情感分析逻辑# 为简化示例,我们直接返回模拟结果sentiment = "positive" if "好" in request.input_data.text else "negative"# 构建输出数据output_data = OutputData(text=sentiment,confidence=0.95,metadata={"algorithm": "rule-based"})# 返回响应return ModelResponse(status="success",output_data=output_data,execution_time=0.2  # 执行时间(秒))# 初始化服务器
server = MCPServer(host="0.0.0.0", port=8080)# 注册模型处理器
server.register_model("sentiment-analysis-model", SentimentAnalysisHandler())# 启动服务器
server.start()
服务端示例代码2

服务端代码负责接收客户端请求,处理任务,并返回响应:

from mcp_sdk.server import MCPServer, ModelHandler
from mcp_sdk.types import ModelResponse# 定义模型处理器,处理接收到的请求
class ExampleModelHandler(ModelHandler):def handle(self, request):input_text = request.input_data.get("input_text", "")# 这里进行实际的模型处理逻辑,此处仅为示例,直接返回输入文本的长度result = {"text_length": len(input_text)}return ModelResponse(status="success",output=result,context=request.context)# 初始化服务端,指定监听地址与端口
server = MCPServer(host="0.0.0.0", port=8080)# 注册模型处理器,这里将example_model与自定义的处理器关联
server.register_model("example_model", ExampleModelHandler())# 启动服务端
server.start()

五、MCP 官网相关链接

  • MCP 官方介绍:这里详细阐述了 MCP 的核心概念、设计理念和应用场景。
  • MCP GitHub 仓库:你可以在此找到 MCP 的开源代码、开发文档以及社区贡献内容。
  • MCP Python SDK 仓库:获取 Python SDK 的源码、使用说明和示例代码。
  • MCP 中文文档:为中文开发者提供了全面的 MCP 概念解读和使用指南。

六、总结

MCP 作为一种专为 AI 模型设计的通信协议,为不同模型和系统之间的协作提供了统一的标准。通过使用 MCP,开发者可以更轻松地集成各种 AI 模型,构建复杂的 AI 应用系统。

通过本文,我们从概念、优势、Python 代码实现以及工作流程等多个角度认识了模型上下文协议(MCP)。MCP 作为连接 AI 模型与外部世界的重要纽带,正推动着人工智能应用迈向更高效、更智能的新阶段。希望你能通过实践,将 MCP 应用到自己的项目中,感受其带来的便利与强大功能。

© 著作权归作者所有

http://www.lqws.cn/news/486523.html

相关文章:

  • 从零开始手写redis(15)实现自己的 HashMap
  • 大模型LoRA微调实践
  • C语言:位段
  • Python期末速成
  • 没掌握的知识点记录
  • day39/60
  • 链接脚本基础语法
  • Python打卡训练营Day56
  • 给同一个wordpress网站绑定多个域名的实现方法
  • ICML 2025 | 时空数据(Spatial-Temporal)论文总结
  • C++智能指针编程实例
  • 消息队列:基本知识
  • 【破局痛点,赋能未来】领码 SPARK:铸就企业业务永续进化的智慧引擎—— 深度剖析持续演进之道,引领数字化新范式
  • 【RocketMQ 生产者和消费者】- 消费者的订阅关系一致性
  • 【RocketMQ 生产者和消费者】- 消费者重平衡(3)- 消费者 ID 对负载均衡的影响
  • 7.4.1_2B树的插入删除
  • 【大模型微调】6.模型微调实测与格式转换导出
  • 微服务中分布式事务:Saga模式、TCC模式与消息队列
  • MySQL学习(1)——基础库操作
  • 【时时三省】(C语言基础)指针变量例子
  • GO 语言学习 之 helloWorld
  • 开关电源:BUCK和BOOST
  • CentOS 7.9 系统安装 Percona XtraBackup(含 xtrabackup 和 innobackupex 工具)的详细步骤
  • webpack+vite前端构建工具 - 9 webpack技巧性配置
  • 柔性PZT压电薄膜在静态力与应力实时微测量方面的应用
  • uni-app项目实战笔记23--解决首次加载额外图片带来的网络消耗问题
  • Linux(3)
  • [论文阅读] 软件工程 + 教学 | 软件工程项目管理课程改革:从传统教学到以学生为中心的混合式学习实践
  • 《计算机网络:自顶向下方法(第8版)》Chapter 8 课后题
  • GetX 实现 MVVM 架构, 高效 路由管理 和 状态管理