BaşlayınÜcretsiz başlayın

Mesajı Oluşturma ve LLM'i Çağırma

get_context_from_mcp(user_query) yardımcı fonksiyonun, kaynak metni ve istem metnini döndürecek şekilde hazır; şimdi bu bilgiyi LLM'e aktarma zamanı!

Döviz sunucusu, get_context_from_mcp(), get_tools_from_mcp(), call_mcp_tool() ve Claude istemcisi arka planda kurulu. İstemi oluşturan, modeli çağıran ve ya doğrudan bir mesajı ya da bir araç çağrısını yöneten fonksiyonu tamamlaman gerekiyor. MCP istemlerinin fark yaratıp yaratmadığını görmek için belirsiz ve net iki kullanıcı girdisi sana verildi!

Bu egzersiz, kursun bir parçasıdır

Model Context Protocol (MCP) Giriş

Kursa Göz Atın

Egzersiz talimatları

  • 37. satırda, full_promptprompt_text, "\n\nSupported currencies:\n" dizesi ve resource_text'i birleştirerek oluştur.
  • 47. satırda, full_prompt'ı (kullanıcı mesajı içeriği olarak) ve anthropic_tools listesini modele gönder.
  • 52-55. satırlarda, yanıtın stop_reason değeri "end_turn" ise, str(text) döndür.
  • 58-60. satırlarda, yanıtın stop_reason değeri "tool_use" ise, araç kullanım bloğunun .name ve .input değerlerini call_mcp_tool()'a aktar.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def get_context_from_mcp(user_query: str) -> tuple[str, str]:
    params = StdioServerParameters(command=sys.executable, args=["currency_server.py"])
    async with stdio_client(params) as (reader, writer):
        async with ClientSession(reader, writer) as session:
            await session.initialize()
            resource_result = await session.read_resource("file://currencies.txt")
            resource_text = resource_result.contents[0].text
            prompt_result = await session.get_prompt("convert_currency_prompt",
                arguments={"currency_request": user_query})
            prompt_text = prompt_result.messages[0].content.text
            return resource_text, prompt_text

async def get_tools_from_mcp():
    params = StdioServerParameters(command=sys.executable, args=["currency_server.py"])
    async with stdio_client(params) as (reader, writer):
        async with ClientSession(reader, writer) as session:
            await session.initialize()
            response = await session.list_tools()
            return response.tools

async def call_mcp_tool(tool_name: str, arguments: dict) -> str:
    params = StdioServerParameters(command=sys.executable, args=["currency_server.py"])
    async with stdio_client(params) as (reader, writer):
        async with ClientSession(reader, writer) as session:
            await session.initialize()
            result = await session.call_tool(tool_name, arguments)
            return str(result.content[0].text)

async def call_llm_with_context(user_query: str):
    """Call the LLM with resource and prompt context from MCP."""
    resource_text, prompt_text = await get_context_from_mcp(user_query)

    # Combine the resource and prompt text
    full_prompt = ____ + "\n\nSupported currencies:\n" + ____

    client = AsyncAnthropic(api_key="")
    mcp_tools = await get_tools_from_mcp()
    anthropic_tools = [{"name": t.name, "description": t.description or "", "input_schema": t.inputSchema} for t in mcp_tools]

    # Send full_prompt (as a user message) and the tools list to the model
    response = await client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=1024,
        messages=[{"role": "user", "content": ____}],
        tools=anthropic_tools,
    )

    # Return the text response
    if response.stop_reason == "____":
        text = next((block.text for block in response.content if block.type == "text"), "")
        print(f"\nAssistant: {text}")
        return str(____)

    # Call the tool requested in the LLM's tool use
    if response.stop_reason == "____":
        tool_use = next(block for block in response.content if block.type == "tool_use")
        result = await call_mcp_tool(____.name, ____)
        followup = await client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=1024,
            messages=[
                {"role": "user", "content": full_prompt},
                {"role": "assistant", "content": response.content},
                {"role": "user", "content": [{"type": "tool_result", "tool_use_id": tool_use.id, "content": result}]},
            ],
            tools=anthropic_tools,
        )
        final_text = next((block.text for block in followup.content if block.type == "text"), None)
        if final_text:
            print(f"\nAssistant: {final_text}")
            return str(final_text)

print("=== Ambiguous request (prompt asks for clarification) ===")
asyncio.run(call_llm_with_context("Convert some euros to dollars"))
print("\n=== Unambiguous request (model calls tool) ===")
asyncio.run(call_llm_with_context("How much is 50 GBP in euros?"))
Kodu Düzenle ve Çalıştır