Model Context Protocol 的生命周期

news2025/3/18 6:06:24

生命周期阶段

生命周期分为三个主要阶段:

  1. 初始化阶段 (Initialization)

    • 客户端与服务器建立协议版本兼容性。
    • 交换并协商能力。
    • 分享实现细节。
    • 客户端必须发送 initialize 请求,包含支持的协议版本、客户端能力和客户端实现信息。
    • 服务器必须响应其自身能力和信息。
    • 成功初始化后,客户端必须发送 initialized 通知,表明已准备好开始正常操作。
  2. 操作阶段 (Operation)

    • 客户端和服务器根据协商的能力交换消息。
    • 双方应尊重协商的协议版本,并仅使用成功协商的能力。
  3. 关闭阶段 (Shutdown)

    • 通常由客户端干净地终止协议连接。
    • 没有定义特定的关闭消息,而是使用底层传输机制来信号连接终止。
    • 对于 stdio 传输,客户端应先关闭对子进程(服务器)的输入流,等待服务器退出,必要时发送 SIGTERMSIGKILL
    • 对于 HTTP 传输,关闭相关 HTTP 连接即可。

关键细节

1. 初始化阶段
  • initialize 请求

    • 客户端必须发送包含以下内容的 initialize 请求:
      • 支持的协议版本。
      • 客户端能力。
      • 客户端实现信息。
    • 示例 JSON 请求:
      {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "initialize",
        "params": {
          "protocolVersion": "2024-11-05",
          "capabilities": {
            "roots": {
              "listChanged": true
            },
            "sampling": {}
          },
          "clientInfo": {
            "name": "ExampleClient",
            "version": "1.0.0"
          }
        }
      }
      
  • 服务器响应

    • 服务器必须响应其自身能力和信息。
    • 示例 JSON 响应:
      {
        "jsonrpc": "2.0",
        "id": 1,
        "result": {
          "protocolVersion": "2024-11-05",
          "capabilities": {
            "logging": {},
            "prompts": {
              "listChanged": true
            },
            "resources": {
              "subscribe": true,
              "listChanged": true
            },
            "tools": {
              "listChanged": true
            }
          },
          "serverInfo": {
            "name": "ExampleServer",
            "version": "1.0.0"
          }
        }
      }
      
  • initialized 通知

    • 成功初始化后,客户端必须发送 initialized 通知:
      {
        "jsonrpc": "2.0",
        "method": "notifications/initialized"
      }
      
  • 版本协商

    • 客户端在 initialize 请求中必须发送其支持的协议版本。
    • 如果服务器支持请求的协议版本,则必须以相同版本响应。
    • 如果服务器不支持请求的版本,则必须以服务器支持的版本响应。
    • 如果客户端不支持服务器响应的版本,则应断开连接。
  • 能力协商

    • 客户端和服务器的能力决定了会话期间可用的可选协议功能。
    • 关键能力包括:
      • 客户端:
        • roots:提供文件系统根目录的能力。
        • sampling:支持 LLM 采样请求。
        • experimental:描述对非标准实验性功能的支持。
      • 服务器:
        • prompts:提供提示模板。
        • resources:提供可读资源。
        • tools:暴露可调用工具。
        • logging:发出结构化日志消息。
        • experimental:描述对非标准实验性功能的支持。
    • 能力对象可以描述子能力,例如:
      • listChanged:支持列表更改通知(适用于提示、资源和工具)。
      • subscribe:支持订阅单个项目更改(仅限资源)。

2. 操作阶段
  • 客户端和服务器根据协商的能力交换消息。
  • 双方应尊重协商的协议版本,并仅使用成功协商的能力。

3. 关闭阶段
  • 通常由客户端干净地终止协议连接。
  • 没有定义特定的关闭消息,而是使用底层传输机制来信号连接终止。
  • stdio 传输
    • 客户端应先关闭对子进程(服务器)的输入流。
    • 等待服务器退出,必要时发送 SIGTERMSIGKILL
  • HTTP 传输
    • 关闭相关 HTTP 连接即可。

错误处理

  • 实现应准备好处理以下错误情况:
    • 协议版本不匹配。
    • 无法协商所需能力。
    • 初始化请求超时。
    • 关闭超时。
  • 实现应为所有请求实现适当的超时,以防止连接挂起和资源耗尽。
  • 示例初始化错误:
    {
      "jsonrpc": "2.0",
      "id": 1,
      "error": {
        "code": -32602,
        "message": "Unsupported protocol version",
        "data": {
          "supported": ["2024-11-05"],
          "requested": "1.0.0"
        }
      }
    }
    

相关链接

  • Messages
  • Versioning
  • lifecycle

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大华SDK协议在智联视频超融合平台中的接入方法

一. 大华SDK协议详解 (一)、大华SDK协议概述 大华SDK(Software Development Kit)协议是大华股份为开发者提供的一套软件开发工具包,旨在帮助开发者快速集成大华设备(如摄像头、NVR、DVR等)的功…

卓越的用户体验需要智能内容

摘要:这篇文章指出静态文档已无法满足现代用户的需求,而智能内容则是构建卓越用户体验的关键。文章从智能内容的定义、优势和实际应用等方面进行了详细阐述,并强调了企业应积极拥抱智能内容,以提升客户满意度、降低成本并创造新的…

【蓝桥杯】1124修建公路1(Kruskal算法)

思路 找到能够连通所有城市的最小树即可,可用Prim或Kruscal。 !!注意,m的范围是包括0的,可就是包含没有道路的情况,要单独输出0 code import os import sys# 输入 n,m map(int,input().split()) road …

传感云揭秘:边缘计算的革新力量

在当今快速发展的科技时代,传感云和边缘计算系统正逐渐成为人们关注的焦点。传感云作为物联网与云计算的结合体,通过虚拟化技术将物理节点转化为多个服务节点,为用户提供高效、便捷的服务。而边缘计算则是一种靠近数据源头或物端的网络边缘侧…

Bigemap Pro 的三种地图下载方式

地图下载通常是是最基础但也最重要的任务之一,无论是进行空间分析、制作专题地图,还是进行数据可视化,高质量的地图数据都是不可或缺的。Bigemap Pro提供了三种地图下载方式,分别适用于不同的场景和需求。无论是免费版用户还是专业…

Python直方图:从核密度估计到高维空间解析

一、直方图的核心原理与数学本质 数据分布的视觉解码器 直方图(Histogram)是数据科学家的"分布显微镜",通过将连续数据划分为等宽区间(Bin),统计各区间的频数/频率,用相邻矩形条直观…

0基础 | 恒流源专题

目录 tip1:低端反馈​编辑 tip2: 恒流源电路的设计注意事项 tip3:三极管输出恒定电流受运放输出电流控制 tip4:高端反馈 基本逻辑: 当负端Vref不输入电压时, 当负端Vref输入电压时 tip1:低端反馈 判…

Webpack 前端性能优化全攻略

文章目录 1. 性能优化全景图1.1 优化维度概览1.2 优化效果指标 2. 构建速度优化2.1 缓存策略2.2 并行处理2.3 减少构建范围 3. 输出质量优化3.1 代码分割3.2 Tree Shaking3.3 压缩优化 4. 运行时性能优化4.1 懒加载4.2 预加载4.3 资源优化 5. 高级优化策略5.1 持久化缓存5.2 模…

【YOLOv8】YOLOv8改进系列(7)----替换主干网络之LSKNet

主页:HABUO🍁主页:HABUO 🍁YOLOv8入门改进专栏🍁 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 【YOLOv8改进系列】: 【YOLOv8】YOLOv8结构解读…

【LangChain】理论及应用实战(7):LCEL

文章目录 一、LCEL简介二、LCEL示例2.1 一个简单的示例2.2 RAG Search 三、LCEL下核心组件(PromptLLM)的实现3.1 单链结构3.2 使用Runnables来连接多链结构3.2.1 连接多链3.2.2 多链执行与结果合并3.2.3 查询SQL 3.3 自定义输出解析器 四、LCEL添加Memor…

ai本地化 部署常用Ollama软件

现在用最简单的方式介绍一下 Ollama 的作用和用法: Ollama 是什么? Ollama 是一个让你能在自己电脑上免费运行大型语言模型(比如 Llama 3、Mistral 等)的工具。 相当于你本地电脑上有一个类似 ChatGPT 的 AI,但完全…

vllm部署QwQ32B(Q4_K_M)

vllm部署QwQ32B(Q4_K_M) Ollama是一个轻量级的开源LLM推理框架,注重简单易用和本地部署,而VLLM是一个专注于高效推理的开源大型语言模型推理引擎,适合开发者在实际应用中集成和使用。两者的主要区别在于Ollama更注重为用户提供多种模型选择和…

企业内网监控软件的选型与应用:四款主流产品的深度剖析

在数字化办公的时代背景下,企业内部网络管理的重要性愈发显著。对于企业管理者而言,如何精准掌握员工工作状态,保障网络安全与工作效率,已成为亟待解决的关键问题。本文将深入剖析四款主流企业内网监控软件,探讨其功能…

Qt窗口控件之字体对话框QFontDialog

字体对话框QFontDialog QFontDialog 是 Qt 内置的字体对话框,用户能够在这里选择字体的样式、大小,设置加粗和下划线并将结果作为返回值返回。QFontDialog 最好使用其提供的静态函数实例化匿名对象,并获取返回值最为用户选择字体设置的结果。…

Qt QML实现视频帧提取

## 前言 视频帧率(Frame Rate)是指视频播放时每秒显示的画面帧数,通常用fps(Frames Per Second)来表示。视频是由一系列静止的图像帧组成的,而视频帧率则决定了这些图像帧在单位时间内播放的速度。较高的视…

在 Ubuntu 服务器上使用宝塔面板搭建博客

📌 介绍 在本教程中,我们将介绍如何在 Ubuntu 服务器 上安装 宝塔面板,并使用 Nginx PHP MySQL 搭建一个博客(如 WordPress)。 主要步骤包括: 安装宝塔面板配置 Nginx PHP MySQL绑定域名与 SSL 证书…

有了大语言模型还需要 RAG 做什么

一、百炼平台简介 阿里云的百炼平台就像是一个超级智能的大厨房,专门为那些想要做出美味AI大餐的企业和个人厨师准备的。你不需要从头开始做每一道菜,因为这个厨房已经为你准备了很多预制食材(预训练模型),你可以根据…

【从0到1搞懂大模型】RNN基础(4)

先说几个常用的可以下载数据集的地方 平台:kaggle(https://www.kaggle.com/datasets) 和鲸社区(https://www.heywhale.com/home) 阿里天池(https://tianchi.aliyun.com/) 其他:海量公…

【第K小数——可持久化权值线段树】

题目 代码 #include <bits/stdc.h> using namespace std;const int N 1e5 10;int a[N], b[N]; int n, m, len; int rt[N], idx; // idx 是点分配器struct node {int l, r;int s; } tr[N * 22];int getw(int x) {return lower_bound(b 1, b len 1, x) - b; }int bui…

本地部署Deep Seek-R1,搭建个人知识库——笔记

目录 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 2&#xff1a;部署DeepSeek - R1模型 3&#xff1a;安装Cherry Studio 二、构建私有知识库 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 1.打开Ollama下载安装 未科学上网&#xff0c;I 先打开迅雷再下…