Hämta resurs och prompt från MCP
Din valutaserver exponerar en resurs (file://currencies.txt) och en prompt (convert_currency_prompt) som kombinerar användarens förfrågan med uppgiftsspecifikt sammanhang och regler. För att mata en LLM måste klienten hämta båda i ett enda anrop. Implementera en hjälpfunktion med namnet get_context_from_mcp() som returnerar resurstexten och prompttexten (med användarens fråga redan inbäddad) så att anroparen kan bygga meddelandet.
Filen currency_server.py finns tillgänglig med ett verktyg, en resurs och en prompt. Använd samma session för att läsa resursen och hämta prompten med användarens indata.
Den här övningen är en del av kursen
Introduktion till Model Context Protocol (MCP)
Övningsinstruktioner
- Anropa metoden inuti sessionen för att läsa resursen på
"file://currencies.txt". - Anropa metoden för att hämta prompten med namn och användarens indata: använd promptnamnet
"convert_currency_prompt"och enarguments-dict med nyckeln"currency_request"och värdetuser_query.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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?")))