MCP 的这个功能在 Claude Desktop 客户端中尚未支持。
采样如何工作
采样流程遵循以下步骤:- 服务器向客户端发送
sampling/createMessage请求 - 客户端审查请求并可以修改它
- 客户端从 LLM 采样
- 客户端审查补全内容
- 客户端将结果返回给服务器
消息格式
采样请求使用标准化的消息格式:请求参数
消息
messages 数组包含要发送给 LLM 的对话历史。每条消息具有:
role:可以是 “user” 或 “assistant”content:消息内容,可以是:- 带有
text字段的文本内容 - 带有
data(base64)和mimeType字段的图像内容
- 带有
模型偏好
modelPreferences 对象允许服务器指定其模型选择偏好:
-
hints:客户端可用于选择适当模型的模型名称建议数组:name:可以匹配完整或部分模型名称的字符串(例如 “claude-3”,“sonnet”)- 客户端可以将提示映射到不同提供商的等效模型
- 多个提示按优先顺序评估
-
优先级值(0-1 标准化):
costPriority:最小化成本的重要性speedPriority:低延迟响应的重要性intelligencePriority:高级模型能力的重要性
系统提示
可选的systemPrompt 字段允许服务器请求特定的系统提示。客户端可以修改或忽略此项。
上下文包含
includeContext 参数指定要包含的 MCP 上下文:
"none":无额外上下文"thisServer":包含来自请求服务器的上下文"allServers":包含来自所有已连接 MCP 服务器的上下文
采样参数
通过以下参数微调 LLM 采样:temperature:控制随机性(0.0 到 1.0)maxTokens:生成的最大标记数stopSequences:停止生成的序列数组metadata:额外的提供商特定参数
响应格式
客户端返回补全结果:示例请求
以下是向客户端请求采样的示例:最佳实践
在实现采样时:- 始终提供清晰、结构良好的提示
- 适当处理文本和图像内容
- 设置合理的标记限制
- 通过
includeContext包含相关上下文 - 在使用响应之前进行验证
- 优雅地处理错误
- 考虑采样请求的速率限制
- 记录预期的采样行为
- 使用各种模型参数进行测试
- 监控采样成本
人在循环中的控制
采样设计考虑到人工监督:对于提示
- 客户端应向用户显示建议的提示
- 用户应能修改或拒绝提示
- 系统提示可以被过滤或修改
- 上下文包含由客户端控制
对于补全
- 客户端应向用户显示补全内容
- 用户应能修改或拒绝补全内容
- 客户端可以过滤或修改补全内容
- 用户控制使用哪个模型
安全考虑
在实现采样时:- 验证所有消息内容
- 清理敏感信息
- 实现适当的速率限制
- 监控采样使用情况
- 加密传输中的数据
- 处理用户数据隐私
- 审计采样请求
- 控制成本暴露
- 实现超时机制
- 优雅地处理模型错误
常见模式
代理工作流程
采样支持以下代理模式:- 读取和分析资源
- 基于上下文做出决策
- 生成结构化数据
- 处理多步骤任务
- 提供交互式帮助
上下文管理
上下文的最佳实践:- 请求最少必要的上下文
- 清晰地组织上下文
- 处理上下文大小限制
- 根据需要更新上下文
- 清理过时的上下文
错误处理
稳健的错误处理应:- 捕获采样失败
- 处理超时错误
- 管理速率限制
- 验证响应
- 提供后备行为
- 适当记录错误
限制
请注意以下限制:- 采样依赖于客户端能力
- 用户控制采样行为
- 上下文大小有限制
- 可能适用速率限制
- 需要考虑成本
- 模型可用性不同
- 响应时间不同
- 不支持所有内容类型