Как улучшить интеграцию 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 поддерживает несколько транспортных механизмов на основе JSON-RPC 2.0:
- Stdio – стандартный ввод/вывод для связи, что идеально подходит для простой коммуникации локальных процессов, разработки CLI-инструментов и использования shell-скриптами;
- HTTP с SSE (Server-Sent Event), который отправляет события сервера клиенту по протоколу HTTP. Это обеспечивает потоковую передачу данных от сервера к клиенту с помощью HTTP-запросов методом POST. Это подходит, когда нужна только потоковая передача от сервера к клиенту, для реализации простых обновлений и работы с закрытыми сетями.
- HTTP-запросы методом POST для отправки сообщений от клиента серверу.
Практическая реализация MCP-протокола
Серверы MCP могут предоставлять три основных типа возможностей:
- Ресурсы— файлоподобные данные, которые могут быть прочитаны клиентами, например, ответы API или содержимое файлов. Ресурсы позволяют серверам предоставлять данные и контент, которые могут быть прочитаны клиентами и использованы в качестве контекста для взаимодействий LLM. Текстовые ресурсы содержат текстовые данные в кодировке UTF-8: исходный код, файлы конфигураций и журналов, данные в JSON или XML-форматах, обычный текст. Бинарные (двоичные) ресурсы содержат необработанные двоичные данные в кодировке base64: изображения, PDF, аудио и видео файлы, а также другие нетекстовые форматы. Для упрощения управляемости ресурсы можно сгруппировать в корни (root) — URI, о которых клиент информирует сервер при подключении. Это пути файловой системы или HTTP URL.
- Инструменты — функции, которые может вызывать LLM. Подобно ресурсам , инструменты идентифицируются уникальными именами и могут включать описания для руководства по их использованию. Однако, в отличие от ресурсов, инструменты представляют собой динамические операции, которые могут изменять состояние или взаимодействовать с внешними системами.
- Промпты — готовые шаблоны для выполнения определенных задач. Они позволяют серверам определять повторно используемые шаблоны и рабочие процессы, которые клиенты могут отображать для пользователей и LLM.
Документация MCP-протокола включает подробную спецификацию и примеры реализации клиентов, серверов и их возможностей. Все соединения устанавливаются с отслеживанием состояния и имеют следующий жизненный цикл:
- Инициализация, когда клиент отправляет инициализирующий запрос с версией протокола и потребностями в ресурсах, промптах или инструментах. Сервер отвечает, сообщая о версии протокола и своих возможностях. В ответ клиент отправляет инициирующее уведомление.
- Обмен сообщениями по шаблону синхронный Запрос-Ответ, когда одна сторона отправляет запросы, а другая, или асинхронные Уведомления, когда одна сторона отправляет сообщения, не ожидая ответов.
- Разрыв соединения, когда любая из сторон (клиент или сервер) могут закрыть установленную связь.
С технической точки зрения MCP-протокол мне показался довольно простым: сообщения описываются в человеко-читаемом JSON-формате, а определить схему полезной нагрузки и ресурсы можно в спецификации OpenAPI. Хотя бинарные форматы и протоколы работают быстрее, текстовая природа MCP обусловлена спецификой LLM, которые работают преимущественно с текстовой информацией. Кроме того, текстовые данные легко передаются между разными системами и платформами, избавляя от необходимости учитывать особенности бинарных форматов, такие как порядок байтов или специфичные кодировки. Это обеспечивает более гладкую межплатформенную коммуникацию и обмен данными между различными источниками контекста для ML-модели.
Для практического использования MCP-протокол предоставляет 5 SDK на разных языках программирования: Python, TypeScript, Java, Kotlin, C#. В каждом SDK есть примитивы для реализации клиента, сервера и его возможностей. Например, в Python SDK для этого используется класс FastMCP — основной интерфейс к протоколу MCP, который управляет подключением, соответствием протоколу и маршрутизацией сообщений. Как использовать его на практике, рассмотрим в следующий раз.
Узнайте больше про машинное обучение и ИИ на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники