网页链接
- https://spec.modelcontextprotocol.io/specification/draft/client/sampling/
主要内容概述
该网页详细介绍了Model Context Protocol (MCP) 中的“Sampling”功能。Sampling允许服务器通过客户端请求语言模型(LLM)生成文本、音频或图像内容,而无需服务器直接使用API密钥访问模型。客户端在模型访问、选择和权限方面保持控制权,同时为服务器提供AI能力。
核心内容笔记
1. 用户交互模型 (User Interaction Model)
- Sampling允许服务器实现代理行为,通过在其他MCP服务器功能中嵌套LLM调用。
- 协议本身不强制规定具体的用户交互模式,但建议:
- 提供易于使用的界面,方便用户审查Sampling请求。
- 允许用户在发送前查看和编辑提示。
- 在交付前让用户审查生成的响应。
2. 功能声明 (Capabilities)
- 支持Sampling的客户端必须在初始化时声明
sampling
能力:{"capabilities": {"sampling": {}} }
3. 协议消息 (Protocol Messages)
- 创建消息 (Creating Messages)
- 服务器通过发送
sampling/createMessage
请求来请求语言模型生成内容。 - 请求示例:
{"jsonrpc": "2.0","id": 1,"method": "sampling/createMessage","params": {"messages": [{"role": "user","content": {"type": "text","text": "What is the capital of France?"}}],"modelPreferences": {"hints": [{"name": "claude-3-sonnet"}],"intelligencePriority": 0.8,"speedPriority": 0.5},"systemPrompt": "You are a helpful assistant.","maxTokens": 100} }
- 响应示例:
{"jsonrpc": "2.0","id": 1,"result": {"role": "assistant","content": {"type": "text","text": "The capital of France is Paris."},"model": "claude-3-sonnet-20240307","stopReason": "endTurn"} }
- 服务器通过发送
4. 消息流 (Message Flow)
- 服务器发起Sampling请求,用户在客户端审查并批准请求,客户端与模型交互并返回生成结果。
- 流程图:
LLMUserClientServerLLMUserClientServer Server initiates sampling Human-in-the-loop review Model interaction Response review Complete request sampling/createMessage Present request for approval Review and approve/modify Forward approved request Return generation Present response for approval Review and approve/modify Return approved response
5. 数据类型 (Data Types)
- 消息 (Messages)
- Sampling消息可以包含以下内容类型:
- 文本内容 (Text Content)
{"type": "text","text": "The message content" }
- 图像内容 (Image Content)
{"type": "image","data": "base64-encoded-image-data","mimeType": "image/jpeg" }
- 音频内容 (Audio Content)
{"type": "audio","data": "base64-encoded-audio-data","mimeType": "audio/wav" }
- 文本内容 (Text Content)
- Sampling消息可以包含以下内容类型:
6. 模型偏好 (Model Preferences)
- 由于服务器和客户端可能使用不同的AI提供商,MCP通过偏好系统抽象化模型选择。
- 能力优先级 (Capability Priorities)
- 服务器通过以下三个归一化优先级值(0-1)表达需求:
costPriority
:成本优先级,值越高表示越偏好低成本模型。speedPriority
:速度优先级,值越高表示越偏好低延迟模型。intelligencePriority
:智能优先级,值越高表示越偏好高级功能模型。
- 服务器通过以下三个归一化优先级值(0-1)表达需求:
- 模型提示 (Model Hints)
- 提示允许服务器建议特定模型或模型家族:
- 提示被视为模型名称的子字符串,可以灵活匹配。
- 客户端可以根据提示将请求映射到其他提供商的等效模型。
- 示例:
{"hints": [{"name": "claude-3-sonnet"},{"name": "claude"}],"costPriority": 0.3,"speedPriority": 0.8,"intelligencePriority": 0.5 }
- 提示允许服务器建议特定模型或模型家族:
- 能力优先级 (Capability Priorities)
7. 错误处理 (Error Handling)
- 客户端应为常见失败情况返回错误。
- 示例错误:
{"jsonrpc": "2.0","id": 1,"error": {"code": -1,"message": "User rejected sampling request"} }
8. 安全考虑 (Security Considerations)
- 客户端应实现用户审批控制。
- 双方应验证消息内容。
- 客户端应尊重模型偏好提示。
- 客户端应实现速率限制。
- 双方必须妥善处理敏感数据。