В предыдущей статье я представил концепцию выявления в протоколе контекста модели (MCP). Этот учебник демонстрирует практическое подход к интеграции выявления для принятия пользовательского ввода, а не отправлять жесткие параметры в инструменты, выявленные сервером MCP.
Шаг 1: Создание среды
Давайте начнем с виртуальной среды и файла TEDS.TXT.
Python -m venv .venv Source .venv/bin/Activate 12 Python -m venv .venvsource .venv/bin/activate
Создайте требования.
Pytz fastmcp httpx Google-Genai 1234 Pytzfastpxgoogle-Genai
Установка PIP -Upradge -R TEDIP.TXT 1 PIP УСТАНОВКА -UPRAGE -R TEDS.TXT
Установите переменные среды для Aeroapi_key и Gemini_api_key для API Flightaware и Gemini соответственно.
Шаг 2: Создание и запуск MCP Server
Ниже приведен код для сервера MCP с выявлением:
Давайте посмотрим на важные фрагменты кода, которые помогают нам реализовать выявление.
Определите структурированный ответ
@dataclass class flightinfo: flight_number: str 123 @dataclassclass flightinfo: flight_number: str
Этот DataClass устанавливает ожидаемую схему для пользовательского ввода. Это гарантирует, что ответ клиента сильно набран и проверен при возврате на сервер.
Объявить запись инструмента
@mcp.tool async def get_flight_status (ctx: context) -& gt; Str: «» «Получите информацию о статусе полета, собирая номер полета интерактивно.» «123 @mcp.toolasync def get_flight_status (ctx: context) -& gt; Str: «» «Получите информацию о статусе полета, собирая номер полета интерактивно.» «» »
Эта функция определяет инструмент, доступный для клиента. Параметр CTX обеспечивает выявление и структурированное взаимодействие с пользователем.
Попросите клиента ввести вклад с выявлением
Результат = await ctx.elice (message = «Пожалуйста, предоставьте номер полета, который вы хотите проверить», response_type = FlightInfo) 1234 result = await ctx.elict (message = «Пожалуйста, предоставьте номер полета, который вы хотите проверить», response_type = FlightInfo)
Этот вызов запускает процесс выявления. Сервер отправляет сообщение и запрашивает ответ, который соответствует схеме FlightInfo.
Обрабатывать действия пользователя из результата выявления
Если Result.Action == «DEPLINE»: возврат «Номер полета не предоставлен» «elif result.Action ==« Отмена »: возврат« Операция отменена «elif result.action! =» Принять «: return» envalid response «123456, если результат.
Эти условия обеспечивают надежную обработку пользовательских решений. Сервер изящно выходит или продолжается в зависимости от того, был ли ввод принят, отклонен или отменен.
Потреблять принятый вклад
FLEASH_NUMBER = RESSUT.DATA.FLIGHT_NUMBER 1 FLEAR_NUMBER = RESUTE.DATA.FLIGHT_NUMBER
Запустите MCP -сервер в терминале.
Шаг 3: призвать клиента
Ниже приведен код для клиента MCP с выявлением:
Давайте посмотрим на фрагменты кода, которые помогли нам реализовать выявление в клиенте.
Определите обработчик выявления
Async def Elicitation_handler (сообщение: str, response_type: any) -& gt; Any: print (f «Сервер спрашивает: {message}») try: flight_number = input («Введите номер полета:») .strip (), если не Flight_number: return elicitresult (action = «depline») return response_type (flight_number = flight_number), кроме keybodeint: return elicitresult (action = «adcelless») 1234577). str, response_type: any) -& gt; Any: print (f «Сервер спрашивает: {message}») try: flight_number = input («Введите номер полета:») .strip (), если не Flight_number: return elicitresult (action = «depline») return response_type (flight_number = flight_number), кроме Keyboardint: return elicitresult (action = «cancel»)
Эта функция работает, когда сервер вызывает CTX.ELICE. Он печатает приглашение сервера, отражает пользовательский ввод и возвращает структурированный ответ или действие (например, упадок или отмена).
Зарегистрируйте обработчик с клиентом
client = client (base_url = «eLication_handler = elecation_handler) 1234 client = client (base_url =» elecation_handler = elecation_handler)
Клиент создается с прикрепленным обработчиком выявления. Это позволяет ему автоматически реагировать, когда сервер запускает запрос на выявление.
Используйте обработчик в цикле взаимодействия
result = await client.call_tool («get_flight_status», {}) print («result с сервера:», result) 12 result = await client.call_tool («get_flight_status», {}) print («result с сервера:», результат)
Когда клиент вызывает инструмент, любое выявление, инициируемое сервером, направляется через зарегистрированный обработчик. Окончательный результат инструмента отображается только после завершения процесса выявления.
Запустите клиент MCP в новом окне терминала.
Когда вы выберете первую опцию, вы увидите необработанный ответ из инструмента. Второй вариант отправляет подсказку вместе с выводом инструмента (контекст) на Близнецы для анализа и сложным ответом.
Я надеюсь, что вы нашли этот учебник полезным в реализации человека в петле при вызове инструментов MCP.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Janakiram MSV является основным аналитиком в Janakiram & Associates и адъюнкт -преподавателем Международного института информационных технологий. Он также является квалифицированным Google Cloud Developer, сертифицированным архитектором решений Amazon, сертифицированным разработчиком Amazon, … Подробнее от Janakiram MSV