Как подключить LLM к контексту: модель контекстного протокола MCP

MCP-протокол для LLM, Machine Learning примеры курсы обучение, MLOPS примеры курсы обучение, примеры курсы обучение дата-инженеров, инженерия больших данных, Школа Больших Данных Учебный Центр Коммерсант

Как улучшить интеграцию LLM в бизнес-процессы и информационные системы через стандартизированную передачу контекстной информации: текстовый MCP-протокол для LLM.

Что контекстный протокол модели и почему он важен для LLM

Одно из ключевых отличий популярных ИИ-инструментов, больших языковых моделей (LLM, Large Language Model) – это их способность генерировать ответы с учетом контекста. А, поскольку реальный контекст непрерывно меняется, важно организовать обогащение LLM новыми контекстными данными. Поэтому для LLM-систем необходима потоковая передача данных, о чем я писала здесь. Впрочем, добавление нового контекста может выполняться и в пакетном режиме, если это обусловлено особенностями источника данных. В любом случае, возникает инженерная задача, как реализовать такое обогащение ML-модели новыми контекстными данными.

Для этого в 2024 году компания Anthropic разработала и открыла исходный код MCP-протокола, который обеспечивает бесшовную интеграцию между приложениями LLM и внешними источниками данных и инструментами.  Model Context Protocol (MCP) предоставляет стандартизированный способ подключения LLM к необходимому им контексту. Он позволяет разработчикам создавать безопасные двусторонние соединения между источниками данных и инструментами на базе ИИ.

Клиент-серверная архитектура MCP дает возможность предоставлять свои данные через серверы или создавать клиентов, т.е. ИИ-приложения, которые подключаются к этим серверам за новыми контекстными данными. При этом используются следующие компоненты:

  • Хосты MCP– программы или инструменты ИИ (приложения с LLM), которым требуется доступ к данным через MCP. Хосты инициируют соединения.
  • клиенты  протокола MCP, поддерживающие соединения 1:1 с серверами;
  • серверы MCP– легковесные программы, которые предоставляют возможности через стандартизированный протокол. Серверы клиентам предоставляют контекст, инструменты и промпты.
  • локальные источники данных (файлы, базы данных и сервисы) локального компьютера, к которым серверы MCP могут получить безопасный доступ;
  • удаленные службы– внешние системы, доступные через Интернет, например, по веб-API, к которым могут подключаться серверы MCP.
Клиент-серверная архитектура MCP
Клиент-серверная архитектура MCP

Уровень протокола управляет формированием сообщений, связыванием запросов и ответов и высокоуровневыми шаблонами связи. Транспортный уровень управляет фактической связью между клиентами и серверами. MCP поддерживает несколько транспортных механизмов на основе JSON-RPC 2.0:

  • Stdio – стандартный ввод/вывод для связи, что идеально подходит для простой коммуникации локальных процессов, разработки CLI-инструментов и использования shell-скриптами;
  • HTTP с SSE (Server-Sent Event), который отправляет события сервера клиенту по протоколу HTTP. Это обеспечивает потоковую передачу данных от сервера к клиенту с помощью HTTP-запросов методом POST. Это подходит, когда нужна только потоковая передача от сервера к клиенту, для реализации простых обновлений и работы с закрытыми сетями.
  • HTTP-запросы методом POST для отправки сообщений от клиента серверу.
Взаимодействие компонентов MCP-протокола
Взаимодействие компонентов MCP-протокола

Практическая реализация MCP-протокола

Серверы MCP могут предоставлять три основных типа возможностей:

  • Ресурсы— файлоподобные данные, которые могут быть прочитаны клиентами, например, ответы API или содержимое файлов. Ресурсы позволяют серверам предоставлять данные и контент, которые могут быть прочитаны клиентами и использованы в качестве контекста для взаимодействий LLM. Текстовые ресурсы содержат текстовые данные в кодировке UTF-8: исходный код, файлы конфигураций и журналов, данные в JSON или XML-форматах, обычный текст.​ Бинарные (двоичные) ресурсы содержат необработанные двоичные данные в кодировке base64: изображения, PDF, аудио и видео файлы, а также другие нетекстовые форматы. Для упрощения управляемости ресурсы можно сгруппировать в корни (root) — URI, о которых клиент информирует сервер при подключении. Это пути файловой системы или HTTP URL.
  • Инструменты — функции, которые может вызывать LLM. Подобно ресурсам , инструменты идентифицируются уникальными именами и могут включать описания для руководства по их использованию. Однако, в отличие от ресурсов, инструменты представляют собой динамические операции, которые могут изменять состояние или взаимодействовать с внешними системами.
  • Промпты — готовые шаблоны для выполнения определенных задач. Они позволяют серверам определять повторно используемые шаблоны и рабочие процессы, которые клиенты могут отображать для пользователей и LLM.

Документация MCP-протокола включает подробную спецификацию и примеры реализации клиентов, серверов и их возможностей. Все соединения устанавливаются с отслеживанием состояния и имеют следующий жизненный цикл:

  • Инициализация, когда клиент отправляет инициализирующий запрос с версией протокола и потребностями в ресурсах, промптах или инструментах. Сервер отвечает, сообщая о версии протокола и своих возможностях. В ответ клиент отправляет инициирующее уведомление.
  • Обмен сообщениями по шаблону синхронный Запрос-Ответ, когда одна сторона отправляет запросы, а другая, или асинхронные Уведомления, когда одна сторона отправляет сообщения, не ожидая ответов.
  • Разрыв соединения, когда любая из сторон (клиент или сервер) могут закрыть установленную связь.
UML-диаграмма последовательности клиент-серверного взаимодействия в MCP
UML-диаграмма последовательности клиент-серверного взаимодействия в MCP

С технической точки зрения MCP-протокол мне показался довольно простым: сообщения описываются в человеко-читаемом JSON-формате, а определить схему полезной нагрузки и ресурсы можно в спецификации OpenAPI. Хотя бинарные форматы и протоколы работают быстрее,  текстовая природа MCP обусловлена спецификой LLM, которые работают преимущественно с текстовой информацией. Кроме того, текстовые данные легко передаются между разными системами и платформами, избавляя от необходимости учитывать особенности бинарных форматов, такие как порядок байтов или специфичные кодировки. Это обеспечивает более гладкую межплатформенную коммуникацию и обмен данными между различными источниками контекста для ML-модели.

Для практического использования MCP-протокол предоставляет 5 SDK на разных языках программирования: Python, TypeScript, Java, Kotlin, C#. В каждом SDK есть примитивы для реализации клиента, сервера и его возможностей. Например, в Python SDK для этого используется класс FastMCP — основной интерфейс к протоколу MCP, который управляет подключением, соответствием протоколу и маршрутизацией сообщений. Как использовать его на практике, рассмотрим в следующий раз.

Узнайте больше про машинное обучение и ИИ на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://modelcontextprotocol.io/introduction
  2. https://www.anthropic.com/news/model-context-protocol
  3. https://github.com/modelcontextprotocol
Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.