網頁鏈接
- 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)
- 客戶端應實現用戶審批控制。
- 雙方應驗證消息內容。
- 客戶端應尊重模型偏好提示。
- 客戶端應實現速率限制。
- 雙方必須妥善處理敏感數據。