مرور عملی sampling (Sampling walkthrough)
هدف یادگیری: مشاهده گامبهگام پیادهسازی کاربردی sampling.
مفاهیم کلیدی: مثل lecture 14، بهعلاوه debug در تب Sampling در Inspector.
این lecture به یادگیرنده اجازه میدهد ببیند در هر مرحله چه اتفاقی میافتد: tool server، create_message را صدا میزند، Inspector (بهعنوان client) یک پنل sampling-request با messages پیشنهادی و modelPreferences نمایش میدهد، کاربر Approve را میزند، Inspector API Anthropic (یا هر LLMای که سیمکشی شده) را صدا میزند، و نتیجه به server برمیگردد. مهم: UI sampling در host همان trust surface است — بدون آن، یک server مخرب میتواند context را exfiltrate کند.
مثال عملی — Python (server کامل با sampling tool، آماده اجرا زیر Inspector)
from mcp.server.fastmcp import FastMCP, Context
from mcp.server.session import ServerSession
from mcp.types import SamplingMessage, TextContent
mcp = FastMCP("Sampler")
@mcp.tool()
async def summarize(text: str, ctx: Context[ServerSession, None]) -> str:
"""Summarize the given text using the host's LLM."""
result = await ctx.session.create_message(
messages=[SamplingMessage(role="user",
content=TextContent(type="text",
text=f"Summarize:\n\n{text}"))],
max_tokens=200,
)
return result.content.text
if __name__ == "__main__":
mcp.run()
اشتباهات رایج
- ست کردن
maxTokensخیلی پایین — completion truncate میشود وstopReasonمیشودmaxTokens. - فراموش کردن handle کردن خطای
User rejected sampling request(code: -1).