Zacznij terazZacznij za darmo

Pobieranie zasobu i promptu z MCP

Twój serwer walutowy udostępnia zasób (file://currencies.txt) oraz prompt (convert_currency_prompt), który łączy zapytanie użytkownika z kontekstem i regułami specyficznymi dla zadania. Aby przekazać dane do modelu językowego, klient musi pobrać oba elementy w jednym kroku. Zaimplementuj funkcję pomocniczą get_context_from_mcp(), która zwraca tekst zasobu oraz tekst promptu (z zapytaniem użytkownika już wstawionym), tak aby wywołujący mógł zbudować wiadomość.

Plik currency_server.py jest dostępny i zawiera narzędzie, zasób oraz prompt. Użyj tej samej sesji, aby odczytać zasób i pobrać prompt wraz z danymi wejściowymi od użytkownika.

To ćwiczenie jest częścią kursu

Wprowadzenie do Model Context Protocol (MCP)

Zobacz kurs

Instrukcje do ćwiczenia

  • Wewnątrz sesji wywołaj metodę odczytującą zasób pod adresem "file://currencies.txt".
  • Wywołaj metodę pobierającą prompt po nazwie z danymi wejściowymi użytkownika: użyj nazwy promptu "convert_currency_prompt" i słownika arguments z kluczem "currency_request" oraz wartością user_query.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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

async def get_context_from_mcp(user_query: str) -> tuple[str, str]:
    """Fetch resource content and prompt text from the MCP server."""
    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()

            # Read the resource (supported currencies)
            resource_result = await session.____("file://currencies.txt")
            resource_text = resource_result.contents[0].text

            # Get the prompt with the user's query
            prompt_result = await session.____("convert_currency_prompt",
                arguments={"currency_request": user_query})
            prompt_text = prompt_result.messages[0].content.text

            return resource_text, prompt_text

print(asyncio.run(get_context_from_mcp("How much is 50 GBP in euros?")))
Edytuj i uruchom kod