Model Context Protocol - Prompts

news2025/3/25 7:35:33

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.coloradmin.cn/o/2320409.html

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

相关文章

dify创建第一个Agent

1、首先LLM模型必须支持 Function Calling 由于deepseek-R1本地化部署时还不支持,所以使用 qwq模型。 2、创建空白 Agent 3、为Agent添加工具 4、测试 当未添加时间工具时 询问 时间 如下 5、开启时间工具 询问如下

⭐算法OJ⭐判断二叉搜索树【树的遍历】(C++实现)Validate Binary Search Tree

图论入门【数据结构基础】:什么是树?如何表示树? 之前我们有分别讲解二叉树的三种遍历的相关代码实现: ⭐算法OJ⭐二叉树的前序遍历【树的遍历】(C实现)Binary Tree Preorder Traversal ⭐算法OJ⭐二叉树的…

2. 商城前端部署

商城客户端前端部署 https://gitee.com/newbee-ltd/newbee-mall-api-go 使用开源新蜂商城的前端,git clone到本地 然后在vscode终端依次输入下列指令(配置好vue3相关环境的前提下): npm install npm i --legacy-peer-deps npm …

鸿蒙生态开发

鸿蒙生态开发概述 鸿蒙生态是华为基于开源鸿蒙(OpenHarmony)构建的分布式操作系统生态,旨在通过开放共享的模式连接智能终端设备、操作系统和应用服务,覆盖消费电子、工业物联网、智能家居等多个领域。以下从定义与架构、核心技术…

基于STM32进行FFT滤波并计算插值DA输出

文章目录 一、前言背景二、项目构思1. 确定FFT点数、采样率、采样点数2. 双缓存设计 三、代码实现1. STM32CubeMX配置和HAL库初始化2. 核心代码 四、效果展示和后话五、项目联想与扩展1. 倍频2. 降频3. 插值3.1 线性插值3.2 样条插值 一、前言背景 STM32 对 AD 采样信号进行快…

【Oracle资源损坏类故障】:详细了解坏块

目录 1、物理坏块与逻辑坏块 1.1、物理坏块 1.2、逻辑坏块 2、两个坏块相关的参数 2.1、db_block_checksum 2.2、db_block_checking 3、检测坏块 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、数据字典 3.5、DBVERIFY 4、修复坏块 4.1、RMAN修复 4.2、DBMS_REPA…

996引擎-接口测试:背包

996引擎-接口测试:背包 背包测试NPC参考资料背包测试NPC CONSTANT = require("Envir/QuestDiary/constant/CONSTANT.lua"); MsgUtil = require("Envir/QuestDiary/utils/996/MsgUtil.lua");

Electron打包文件生成.exe文件打开即可使用

1 、Electron 打包,包括需要下载的内容和环境配置步骤 注意:Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序的框架 首先需要电脑环境有Node.js 和 npm我之前的文章有关nvm下载node的说明也可以去官网下载 检查是否有node和npm环…

单播、广播、组播和任播

文章目录 一、单播二、广播三、组播四、任播代码示例: 五、各种播的比较 一、单播 单播(Unicast)是一种网络通信方式,它指的是在网络中从一个源节点到一个单一目标节点对的传输模式。单播传输时,数据包从发送端直接发…

Cursor+Claude-3.5生成Android app

一、Android Studio下载 https://developer.android.com/studio?hlzh-tw#get-android-studio 等待安装完成 二、新建工程 点击new project 选择Empty Activity 起一个工程名 当弹出这个框时 可以在settings里面选择No proxy 新建好后如下 点击右边模拟器&#xff0c…

QT Quick(C++)跨平台应用程序项目实战教程 3 — 项目基本设置(窗体尺寸、中文标题、窗体图标、可执行程序图标)

目录 1. 修改程序界面尺寸和标题 2. 窗体图标 3. 修改可执行程序图标 上一章创建好了一个初始Qt Quick项目。本章介绍基本的项目修改方法。 1. 修改程序界面尺寸和标题 修改Main.qml文件,将程序宽度设置为1200,程序高度设置为800。同时修改程序标题…

Transformers x SwanLab:可视化NLP模型训练(2025最新版)

HuggingFace 的 Transformers 是目前最流行的深度学习训框架之一(100k Star),现在主流的大语言模型(LLaMa系列、Qwen系列、ChatGLM系列等)、自然语言处理模型(Bert系列)等,都在使用T…

VSCode 抽风之 两个conda环境同时在被激活

出现了神奇的(toolsZCH)(base) 提示符,如下图所示: 原因大概是:conda 环境的双重激活:可能是 conda 环境没有被正确清理或初始化,导致 base 和 toolsZCH 同时被激活。 解决办法就是 :conda deactivate 两次…

Mybatis的基础操作——03

写mybatis代码的方法有两种: 注解xml方式 本篇就介绍XML的方式 使用XML来配置映射语句能够实现复杂的SQL功能,也就是将sql语句写到XML配置文件中。 目录 一、配置XML文件的路径,在resources/mapper 的目录下 二、写持久层代码 1.添加mappe…

React:React主流组件库对比

1、Material-UI | 官网 | GitHub | GitHub Star: 94.8k Material-UI 是一个实现了 Google Material Design 规范的 React 组件库。 Material UI 包含了大量预构建的 Material Design 组件,覆盖导航、滑块、下拉菜单等各种常用组件,并都提供了高度的可定制…

python每日十题(6)

】函数定义:函数是指一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用其函数名即可。函数能提高应用的模块性和代码的重复利用率 在Python语言中,用关键字class来定义类 在Python语…

1.Go - Hello World

1.安装Go依赖 https://go.dev/dl/ 根据操作系统选择适合的依赖,比如windows: 2.配置环境变量 右键此电脑 - 属性 - 环境变量 PS: GOROOT:Go依赖路径; GOPATH:Go项目路径; …

优先队列 priority_queue详解

说到&#xff0c;priority_queue优先队列。必须先要了解啥是堆与运算符重载(我在下方有解释)。 否则只知皮毛&#xff0c;极易忘记寸步难行。 但在开头&#xff0c;还是简单的说下怎么用 首先&#xff0c;你需要调用 #include <queue> 在main函数中&#xff0c;声明…

《信息系统安全》(第一次上机实验报告)

实验一 &#xff1a;网络协议分析工具Wireshark 一 实验目的 学习使用网络协议分析工具Wireshark的方法&#xff0c;并用它来分析一些协议。 二实验原理 TCP/IP协议族中网络层、传输层、应用层相关重要协议原理。网络协议分析工具Wireshark的工作原理和基本使用规则。 三 实…

简要分析IPPROTO_TCP参数

IPPROTO_TCP是操作系统或网络编程中定义的一个 协议号常量&#xff0c;用于标识 传输控制协议&#xff08;TCP&#xff09;。其核心作用是 在传输层指定使用TCP协议&#xff0c;确保数据通过TCP的可靠传输机制进行通信。 一、定义与值 头文件&#xff1a;定义在<netinet/in.…