درس ۱۵ از ۳۳

مرور عملی 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).