[ PROMPT_NODE_24756 ]
sampling
[ SKILL_DOCUMENTATION ]
# 采样 (Sampling)
> 通过 MCP 上下文从客户端或配置的提供程序请求 LLM 文本生成。
LLM 采样允许您的 MCP 工具在执行期间请求 LLM 生成文本。这使得工具能够利用 AI 能力进行分析、生成、推理等,而无需客户端编排多个调用。
默认情况下,采样请求被路由到客户端的 LLM。您还可以配置回退处理程序,以便在客户端不支持采样时使用特定提供程序(如 OpenAI),或者始终使用您自己的 LLM,而不考虑客户端能力。
## 概览
采样最简单的用法是将提示词字符串传递给 `ctx.sample()`。该方法将提示词发送给 LLM,等待完整响应,并返回一个 `SamplingResult`。您可以通过 `.text` 属性访问生成的文本。
python
from fastmcp import FastMCP, Context
mcp = FastMCP()
@mcp.tool
async def summarize(content: str, ctx: Context) -> str:
"""生成所提供内容的摘要。"""
result = await ctx.sample(f"请总结以下内容:nn{content}")
return result.text or ""
`SamplingResult` 还提供 `.result`(对于纯文本响应与 `.text` 相同)和包含完整消息交换的 `.history`——如果您需要继续对话或调试交互,这非常有用。
### 系统提示词 (System Prompts)
系统提示词让您在 LLM 处理请求之前确立其角色和行为准则。这对于控制语气、强制执行约束或提供不应干扰用户提示词的上下文非常有用。
`python
from fastmcp import FastMCP, Context
mcp = FastMCP()
@mcp.tool
async def generate_code(concept: str, ctx: Context) -> str:
"""为某个概念生成 Python 代码示例。"""
result = await ctx.sample(
messages=f"编写一个演示 '{concept}' 的 Python 示例。",
system_prompt=(
"你是一位专业的 Python 程序员。 "
"提供简洁、可运行的代码,无需解释。"
),
temperature=0.7,
max_tokens=300
)
return f"pythonn{result.text}n"
`
`temperature` 参数控制随机性——较高的值(最高 1.0)产生更多样化的输出,而较低的值使响应更具确定性。`max_tokens` 参数限制响应长度。
### 模型偏好
模型偏好允许您提示客户端应使用哪个 LLM 进行请求。您可以