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

MCP详解及协议的使用(python版本和Node版本)

MCP详解及协议的使用

🧩 一、MCP详解

1、✅ MCP 是什么?

MCP 是一种统一协议,使得 语言模型(LLM)能以结构化方式与外部系统进行交互,支持多轮、多工具、多模态(文本、图像、音频等)调用。

它类似于一种“操作系统中的系统调用协议”,让模型不只是聊天,而是真正地“调用”外部服务。

2、🔧 能用来做什么?应用场景

2.1. ✅调用函数 / API(函数调用 Function Calling)

例如:

用户输入:“帮我查一下明天上海的天气,并推荐附近的餐馆。”

模型识别出两个意图:

  • 先调用 getWeather(location=“上海”) 获取天气
  • 再调用 findNearbyRestaurants(location=“上海”)

模型通过 MCP 协议请求这两个工具,组合响应内容再生成回答

2.2. ✅插件系统的底层机制

MCP 是 OpenAI 插件系统的底层协议。比如:

  • 文件上传分析插件
  • 数据库查询插件
  • 网络搜索插件(如 Bing、Klarna)

这些插件的调用流程背后都遵循 MCP。

2.3. ✅中间调度器(Tool Router)

MCP 允许构建“中间调度系统”:

  • 模型只负责推理出“需要调用哪些工具”
  • 调度器根据模型的指令逐个调用函数、组合结果,再反馈给模型

这使得系统具备“多步逻辑处理能力”,比如:

问“帮我订一张明天下午从北京飞上海的机票”,模型自动调用:

  • 航班查询
  • 用户账户信息获取
  • 订单创建与支付
2.4. ✅支持多模态输入和输出

随着 GPT-4o 支持图像/语音,MCP 也能支持:

  • 传入图片给模型分析(如图像 OCR、识别表格、分析图纸)
  • 模型返回语音/图像/视频等格式的结果
  • 混合调用工具链,如上传 PDF 后提取表格、再用图表库绘图
2.55、🛠️ MCP 的核心组成
成分作用 、
tool_calls模型发出工具调用请求,包含工具名、参数等
tool_response外部系统处理请求后的响应数据(可以是 JSON)
function_callingOpenAI 提供的轻量实现方式,MCP 的子集
intermediate steps工具调用步骤的中间过程,帮助模型持续更新对话状态

🧩 二、简单的使用架构

      ┌──────────────┐         TCP / WebSocket / HTTP│   Client     │  ─────────────────────────────►  ┌────────────┐│              │                                 │ MCP Server ││  发出请求    │                                 │            │└──────────────┘                                 └────────────┘│▼┌──────────────────────┐│ Tool Registry         ││  - tool_1             ││  - tool_2             │└──────────────────────┘

基于 MCP 协议的服务端连接客户端模块,通过 stdio 与服务端子进程通信。这种设计模式通常用于:

  • 启动一个可交互的子进程服务器(如 MCP server)

  • 使用 标准输入输出(stdin/stdout)作为通信通道

  • 异步初始化会话,并获取工具列表

🧩 三、MCP协议的使用(Python版本)

连接服务端以及和服务端子进程通信:

  async def connect_to_server(self, server_script_path: str):r'''连接到MCP服务器首先启动服务端,然后初始化会话最后获取可用工具列表'''is_python = server_script_path.endswith('.py')command = "python" if is_python else "node"print(f"🛠️  启动服务端命令: {command} {server_script_path}")# 构造一个 StdioServerParameters 对象,常用于设置一个# 通过标准输入输出(stdin/stdout)与主程序通信的子进程服务器script_dir = os.path.abspath(
http://www.lqws.cn/news/215425.html

相关文章:

  • FreeRTOS事件组-笔记
  • AI大神吴恩达-提示词课程笔记
  • 【Go语言基础【14】】defer与异常处理(panic、recover)
  • 深入剖析MySQL存储架构,索引结构,日志机制,事务提交流程
  • 【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
  • KTO: Model Alignment as Prospect Theoretic Optimization
  • [总结篇]个人网站
  • XGBoost时间序列预测之-未来销量的预测
  • 【氧化镓】HTFB应力对β - Ga2O3 SBD的影响
  • 【JavaSE】泛型学习笔记
  • GIC700组件
  • 什么是预训练?深入解读大模型AI的“高考集训”
  • Python抽象基类实战:构建广告轮播框架ADAM的核心逻辑
  • 数据类型-整型
  • python怎么读shape文件?
  • Java 并发编程系列(上篇):多线程深入解析
  • 高级数据结构与算法期末考试速成记录2
  • 获取环境变量的两种方式:getenv()和environ
  • 【C/C++】STL实现版本为什么比手写版本高?
  • SWE-Dev:开启自主特征驱动软件开发新纪元,重新定义大模型编码能力边界
  • IOS性能优化
  • 【Linux庖丁解牛】—系统文件I/O !
  • Python网页自动化测试,DrissonPage库入门说明文档
  • 从零开始的python学习(七)P102+P103+P104+P105+P106+P107
  • [SNOI2024] 公交线路 题解(观察,点减边容斥,优化trick)
  • 【分销系统商城】
  • Python Robot Framework【自动化测试框架】简介
  • c++ —— 内存管理
  • 人工智能赋能高中学科教学的应用与前景研究
  • ThinkPHP 5.1 中的 error 和 success 方法详解