采样是 MCP 的一项强大功能,允许服务器通过客户端请求大型语言模型(LLM)的完成,从而实现复杂的代理行为,同时保持安全性和隐私。
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
包含相关上下文采样设计时考虑了人工监督:
实现采样时:
采样支持代理模式,例如:
上下文的最佳实践:
稳健的错误处理应:
需注意以下限制: