НачатьНачать бесплатно

Получение ресурса и промпта из MCP

Ваш сервер валют предоставляет ресурс (file://currencies.txt) и промпт (convert_currency_prompt), который объединяет запрос пользователя с контекстом задачи и правилами её выполнения. Чтобы передать данные языковой модели, клиент должен получить и то, и другое за один раз. Реализуйте вспомогательную функцию get_context_from_mcp(), которая возвращает текст ресурса и текст промпта (с уже подставленным запросом пользователя), чтобы вызывающий код мог сформировать сообщение.

Файл currency_server.py доступен и содержит инструмент, ресурс и промпт. Используйте одну и ту же сессию для чтения ресурса и получения промпта с пользовательским вводом.

Это упражнение является частью курса

Введение в Model Context Protocol (MCP)

Посмотреть курс

Инструкции к упражнению

  • Внутри сессии вызовите метод для чтения ресурса по адресу "file://currencies.txt".
  • Вызовите метод для получения промпта по имени с пользовательским вводом: укажите имя промпта "convert_currency_prompt" и словарь arguments с ключом "currency_request" и значением user_query.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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?")))
Редактировать и запускать код