Model Context Protocol - Prompts

1. 概述

  • Model Context Protocol (MCP) 提供了一种标准化的方式,使服务器能够向客户端暴露提示模板(prompts)。
  • Prompts 是服务器提供的结构化消息和指令,用于与语言模型进行交互。客户端可以发现可用的提示、获取其内容,并提供参数以自定义它们。

2. 用户交互模型

  • 用户控制: Prompts 是用户控制的,服务器将它们暴露给客户端,目的是让用户能够明确选择使用它们。
  • 触发方式: 通常通过用户界面中的用户发起的命令(如斜杠命令)触发,但协议本身不限制具体的用户交互模式。

3. 功能声明

  • 支持 Prompts 的服务器必须在初始化时声明 prompts 功能:
    {"capabilities": {"prompts": {"listChanged": true}}
    }
    
  • listChanged 表示服务器是否会发出通知,告知可用提示列表发生变化。

4. 协议消息

4.1 列出可用的 Prompts
  • 客户端通过发送 prompts/list 请求来获取可用的提示列表,支持分页功能。
  • 请求示例:
    {"jsonrpc": "2.0","id": 1,"method": "prompts/list","params": {"cursor": "optional-cursor-value"}
    }
    
  • 响应示例:
    {"jsonrpc": "2.0","id": 1,"result": {"prompts": [{"name": "code_review","description": "Asks the LLM to analyze code quality and suggest improvements","arguments": [{"name": "code","description": "The code to review","required": true}]}],"nextCursor": "next-page-cursor"}
    }
    
4.2 获取特定 Prompt
  • 客户端可以通过发送 prompts/get 请求来获取特定的提示内容,支持通过补全 API 自动补全参数。
  • 请求示例:
    {"jsonrpc": "2.0","id": 2,"method": "prompts/get","params": {"name": "code_review","arguments": {"code": "def hello():\n    print('world')"}}
    }
    
  • 响应示例:
    {"jsonrpc": "2.0","id": 2,"result": {"description": "Code review prompt","messages": [{"role": "user","content": {"type": "text","text": "Please review this Python code:\ndef hello():\n    print('world')"}}]}
    }
    
4.3 列表变更通知
  • 如果可用提示列表发生变化,服务器会发送 notifications/prompts/list_changed 通知:
    {"jsonrpc": "2.0","method": "notifications/prompts/list_changed"
    }
    

5. 消息流程

  • Discovery(发现): 客户端通过 prompts/list 获取可用提示列表。
  • Usage(使用): 客户端通过 prompts/get 获取特定提示的内容。
  • Changes(变更): 服务器通过 list_changed 通知客户端提示列表的更新。

6. 数据类型

6.1 Prompt
  • 提示定义包括:
    • name:提示的唯一标识符。
    • description:可选的人类可读描述。
    • arguments:可选的参数列表,用于自定义提示。
6.2 PromptMessage
  • 提示中的消息可以包含以下内容:
    • role:消息的发起者角色,可以是“user”或“assistant”。
    • content:消息的内容类型,包括以下几种:
      • Text Content(文本内容):
        {"type": "text","text": "The text content of the message"
        }
        
      • Image Content(图像内容):
        {"type": "image","data": "base64-encoded-image-data","mimeType": "image/png"
        }
        
        • 图像数据必须是 base64 编码,并包含有效的 MIME 类型。
      • Audio Content(音频内容):
        {"type": "audio","data": "base64-encoded-audio-data","mimeType": "audio/wav"
        }
        
        • 音频数据必须是 base64 编码,并包含有效的 MIME 类型。
      • Embedded Resources(嵌入资源):
        {"type": "resource","resource": {"uri": "resource://example","mimeType": "text/plain","text": "Resource content"}
        }
        
        • 嵌入资源可以包含文本或二进制数据,必须包含有效的 URI 和 MIME 类型。

7. 错误处理

  • 服务器应返回标准的 JSON-RPC 错误代码:
    • 无效的提示名称:-32602(Invalid params)
    • 缺少必需的参数:-32602(Invalid params)
    • 内部错误:-32603(Internal error)

8. 实现注意事项

  1. 服务器应在处理前验证提示参数。
  2. 客户端应处理分页以支持大型提示列表。
  3. 双方应尊重功能协商。

9. 安全性

  • 实现必须仔细验证所有提示的输入和输出,以防止注入攻击或未经授权访问资源。

10. 相关链接

  • GitHub: Model Context Protocol Specification
  • User Guide
  • Python SDK
  • TypeScript SDK

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

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

相关文章

办公自动化:使用 Python 生成 Word 文件:自动生成数据库文档 Word 文件

简简单单 Online zuozuo :本心、输入输出、结果 文章目录 办公自动化:使用 Python 生成 Word 文件:自动生成数据库文档 Word 文件前言一、环境准备二、编写代码三、编写 Word 模版文件接收数据四、运行代码,生成文件,大功告成五、说明办公自动化:使用 Python 生成 Word 文…

嵌入式GPRS协议面试题及参考答案

目录 GPRS 的全称是什么?简述其核心设计目标。 GPRS 中 DNS 服务器的核心作用是什么? BTS 在 EDGE 升级时需要哪些硬件调整? GPRS 的时隙分配策略如何影响多用户并发? 解释 PDCH(分组数据信道)的动态分配机制。 如何判断天馈接反或鸳鸯线问题? GPRS 的 RLC/MAC 层…

Docker 内部通信(网络)

1. 创建自定义桥接网络 首先,创建一个自定义的Docker网络。这可以通过docker network create命令完成。例如,我们可以创建一个名为my_custom_network的网络: docker network create --driver bridge my_custom_network2. 启动容器并连接到自…

单片机开发资源分析的实战——以STM32F103C8T6为例子的单片机资源分析

目录 第一点:为什么叫STM32F103C8T6 从资源手册拿到我们的对STM32F103C8T6的资源描述 第二件事情,关心我们的GPIO引脚输出 第三件事情:去找对应外设的说明部分 前言 本文章隶属于项目: Charliechen114514/BetterATK: This is…

贪心算法(9)(java)最优除法

题目: 给定一正整数数组 nums,nums中的相邻整数将进行浮点除法。例如,[2,3.4]->2/3/4. 例如,nums [2,3,4],我们将求表达式的值“2/3/4"。 但是,你可以在任意位置添加任意数目的括号,来改变算…

腾讯云MySQL数据库架构分析与使用场景

TDSQL-C for MySQL TDSQL-C MySQL 版(TDSQL-C for MySQL)是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势,为用户提供具备高弹性、高性能、海量存储、安全可靠的数据库服务。TDSQL-C MySQL 版100%兼容…

荣耀手机卸载应用商店、快应用中心等系统自带的

1.下载abd ADB Download - Get the latest version of ADB and fastboot 2.手机打开开发者选项 3.手机接电脑打开USB调试 4.下载MT管理器查看系统包名 D:\1.LFD\ADB\platform-tools-latest-windows\platform-tools>adb shell adb.exe: no devices/emulators found 这边是…

星型拓扑网络发生网络风暴

在星型拓扑网络中,所有的设备(如计算机、打印机等)通过一个中心设备(通常是交换机或集线器)连接在一起。 星型拓扑网络中发生网络风暴时的情况: 网络风暴的表现 1.广播风暴:在星型拓扑中&…

网络流基本概念及实现算法

基本概念 流网络 对于一个有向图, 抽象成水管里的水的模型, 每根管子有容量限制, 计为 G ( V , E ) G (V, E) G(V,E), 首先不考虑反向边 对于任意无向图, 都可以将反向边转化为上述形式 如果一条边不存在, 定义为容量为 0 0 0, 形式上来说就是 c ( u , v ) 0 c(u, v) 0 c(…

【css酷炫效果】纯CSS实现球形阴影效果

【css酷炫效果】纯CSS实现球形阴影效果 缘创作背景html结构css样式完整代码基础版进阶版(动态版) 效果图 想直接拿走的老板,链接放在这里:上传后更新 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了,赶时间&#xff0…

Linux如何在设备树中表示和引用设备信息

DTS基本知识 dts 硬件的相应信息都会写在.dts为后缀的文件中,每一款硬件可以单独写一份xxxx.dts,一般在Linux源码中存在大量的dts文件,对于arm架构可以在arch/arm/boot/dts找到相应的dts,一个dts文件对应一个ARM的machie。 dtsi 值…

【数学建模】模糊综合评价模型详解、模糊集合论简介

模糊综合评价模型详解 文章目录 模糊综合评价模型详解1. 模糊综合评价模型概述2. 模糊综合评价的基本原理2.1 基本概念2.2 评价步骤 3. 模糊综合评价的数学模型3.1 数学表达3.2 模糊合成运算 4. 模糊综合评价的应用领域5. 模糊综合评价的优缺点5.1 优点5.2 缺点 6. 模糊综合评价…

C++20 中的同步输出流:`std::basic_osyncstream` 深入解析与应用实践

文章目录 一、std::basic_osyncstream 的背景与动机二、std::basic_osyncstream 的基本原理三、std::basic_osyncstream 的使用方法(一)基本用法(二)多线程环境下的使用(三)与文件流的结合 四、std::basic_…

C/C++蓝桥杯算法真题打卡(Day8)

一、P8780 [蓝桥杯 2022 省 B] 刷题统计 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便使用各种数据结构和算法 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用标准库函数时都要加 std::in…

JavaScript 编程:从基础到高级应用的全面探索

引言 JavaScript 作为一种广泛应用于 Web 开发的脚本语言&#xff0c;已经成为现代互联网不可或缺的一部分。它不仅可以为网页增添交互性和动态效果&#xff0c;还能在服务器端&#xff08;如 Node.js&#xff09;进行后端开发。本文将从 JavaScript 的基础语法开始&#xff0…

第十三次CCF-CSP认证(含C++源码)

第十三次CCF-CSP认证 跳一跳满分题解 碰撞的小球满分题解遇到的问题 棋局评估满分题解 跳一跳 题目链接 满分题解 没什么好说的 基本思路就是如何用代码翻译题目所给的一些限制&#xff0c;以及变量应该如何更新&#xff0c;没像往常一样给一个n&#xff0c;怎么读入数据&…

Pytorch使用手册—自定义函数的双重反向传播与自定义函数融合卷积和批归一化(专题五十二)

1. 使用自定义函数的双重反向传播 有时候,在反向计算图中运行两次反向传播是有用的,例如计算高阶梯度。然而,支持双重反向传播需要对自动求导(autograd)有一定的理解,并且需要小心处理。支持单次反向传播的函数不一定能够支持双重反向传播。在本教程中,我们将展示如何编…

MySQL:数据库基础

数据库基础 1.什么是数据库&#xff1f;2.为什么要学习数据库&#xff1f;3.主流的数据库&#xff08;了解&#xff09;4.服务器&#xff0c;数据库&#xff0c;表之间的关系5.数据的逻辑存储6.MYSQL架构7.存储引擎 1.什么是数据库&#xff1f; 数据库(Database,简称DB)&#x…

Web Component 教程(五):从 Lit-html 到 LitElement,简化组件开发

前言 在现代前端开发中&#xff0c;Web 组件是一种非常流行的技术&#xff0c;它允许我们创建可重用的、自包含的 UI 元素。而 Lit-html 是一个简洁高效库&#xff0c;用于在 Web 组件中进行渲染。在这篇教程中&#xff0c;我们一步步学习如何 Lit-html 来创建 Web Component。…

【C++】二叉树和堆的链式结构(上)

本篇博客给大家带来的是用C语言来实现堆链式结构和二叉树的实现&#xff01; &#x1f41f;&#x1f41f;文章专栏&#xff1a;数据结构 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享&#xff01; 今日思想&#xff…