Протокол MCP

MCP (Model Context Protocol) — это открытый протокол, разработанный для обеспечения бесшовной интеграции между приложениями больших языковых моделей (LLM) и внешними источниками данных, инструментами и сервисами, подобно протоколу HTTP в сетях или протоколу SMTP в электронной почте.

Протокол MCP повышает функциональность, гибкость и масштабируемость приложений LLM за счёт стандартизации способа взаимодействия моделей с внешними ресурсами.

MCP предоставляет разработчикам унифицированную, эффективную и интероперабельную среду разработки путём стандартизации правил взаимодействия в экосистеме AI-приложений.


Основные концепции MCP

В основе MCP лежитконтекст модели, то есть вся внешняя информация и инструменты, необходимые LLM во время работы.

MCP позволяет LLM динамически получать доступ к следующему содержимому и интегрировать его путём определения стандартизированных интерфейсов и протоколов:

  1. Внешние источники данных: например, базы данных, API, библиотеки документов и т. д., предоставляющие LLM данные в реальном времени или исторические данные.
  2. Инструменты и сервисы: например, вычислительные инструменты, поисковые системы, сторонние сервисы и т. д., расширяющие возможности LLM.
  3. Управление контекстом: динамическое поддержание контекста диалога LLM для обеспечения связности и согласованности.

Архитектура MCP

Архитектура MCP состоит из четырёх ключевых частей:

  1. Хост: Хост — это ИИ-приложение, которое предполагает получать данные от серверов, например интегрированная среда разработки (IDE), чат-бот и т. д. Хост отвечает за инициализацию и управление клиентами, обработку авторизации пользователя, управление агрегацией контекста и многое другое.
  2. Клиент: Клиент — это мост между хостом и сервером. Он поддерживает соединение один к одному с сервером и отвечает за маршрутизацию сообщений, управление возможностями, согласование протокола, управление подписками и многое другое. Клиент обеспечивает четкую, безопасную и эффективную связь между хостом и сервером.
  3. Сервер: Сервер — это компонент, который предоставляет внешние данные и инструменты. Он предоставляет дополнительный контекст и функциональность для больших языковых моделей через инструменты, ресурсы и шаблоны промптов. Например, сервер может предоставлять вызовы API к внешним сервисам, таким как Gmail и Slack.
  4. Базовый протокол: Базовый протокол определяет, как взаимодействуют хосты, клиенты и серверы. Он включает форматы сообщений, управление жизненным циклом, механизмы транспорта и многое другое.

MCP похож на USB-C, позволяя разным устройствам подключаться друг к другу через один и тот же интерфейс.


Как работает MCP

MCP обеспечивает взаимодействие между LLM и внешними ресурсами, определяя стандартизированные форматы данных и протоколы связи.

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

MCP поддерживает несколько механизмов транспорта, включая локальный стандартный ввод-вывод (Stdio) и Server-Sent Events (SSE) на основе HTTP.

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

Ниже описан его рабочий процесс:

1. Запрос контекста

LLM-приложение отправляет запрос контекста внешнему ресурсу, включая требуемые данные или тип сервиса.

  • LLM-приложение отправляет запрос внешнему ресурсу на основе требований задачи.
  • Внешний ресурс возвращает требуемые данные или результаты сервиса.

2. Интеграция контекста

LLM-приложение интегрирует данные контекста, возвращённые внешним ресурсом, в модель для генерации ответов или выполнения задач.

  • LLM-приложение объединяет внешние данные с внутренними знаниями модели для генерации более точных или более содержательных ответов.

3. Управление контекстом

MCP поддерживает динамическое управление контекстом разговора LLM, обеспечивая связность в многоходовых диалогах.

  • Менеджер контекста поддерживает историю и состояние разговора.
  • LLM-приложение генерирует связные ответы на основе контекста.

Ключевая часть протокола — сообщения

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

Базовый протокол определяет три основных типа сообщений: Запросы, Ответы и Уведомления.

Ниже приведено подробное описание этих трех типов сообщений:

1. Запросы

Сообщения-запросы используются для инициирования операций от клиента к серверу или от сервера к клиенту.

Структура сообщения-запроса выглядит следующим образом:

{
  "jsonrpc": "2.0",
  "id": "string | number",
  "method": "string",
  "params": {
    "[key: string]": "unknown"
  }
}
  • jsonrpc: версия протокола, фиксированная как"2.0"。
  • id: уникальный идентификатор запроса, который может быть строкой или числом.
  • method: имя вызываемого метода, которое является строкой.
  • params: параметры метода, необязательный объект пар ключ-значение, где ключи являются строками, а значения могут быть любого типа.

2. Ответы

Сообщения-ответы — это ответы на запросы, отправляемые от сервера к клиенту или от клиента к серверу.

Структура сообщения-ответа выглядит следующим образом:

{
  "jsonrpc": "2.0",
  "id": "string | number",
  "result": {
    "[key: string]": "unknown"
  },
  "error": {
    "code": "number",
    "message": "string",
    "data": "unknown"
  }
}
  • jsonrpc: версия протокола, фиксированная как"2.0"。
  • id: соответствующий запросуidid, используемый для идентификации запроса, которому соответствует ответ.
  • result: если запрос выполнен успешно,resultполе содержит результат операции, который является объектом из пар ключ-значение.
  • error: если запрос завершается неудачно,errorполе содержит информацию об ошибке, где:
    • code: код ошибки, который является числом.
    • message: описание ошибки, которое является строкой.
    • data: необязательная дополнительная информация об ошибке, которая может быть любого типа.

3. Уведомления

Сообщения-уведомления — это однонаправленные сообщения, не требующие ответа от получателя.

Структура сообщения-уведомления выглядит следующим образом:

{
  "jsonrpc": "2.0",
  "method": "string",
  "params": {
    "[key: string]": "unknown"
  }
}
  • jsonrpc: версия протокола, фиксированная как"2.0"。
  • method: имя вызываемого метода, которое является строкой.
  • params: параметры метода, необязательный объект пар ключ-значение, где ключи являются строками, а значения могут быть любого типа.

Примечания

  • Запросы и ответы: запросы и ответы взаимно однозначны; после того как клиент отправляет запрос, сервер возвращает ответ.idПоле используется для связи запросов и ответов.
  • Уведомления: Уведомления являются односторонними; отправителю не нужно ждать ответа от получателя. Уведомления обычно используются в таких сценариях, как отправка событий или обновления статуса.
  • Обработка ошибок: Если запрос завершается неудачно, ответ будет содержатьerrorполе, содержащее коды ошибок и описания, помогающие разработчикам быстро находить проблемы.

Ключевые особенности MCP

  1. Стандартизированный интерфейс: Определяйте единые интерфейсы и протоколы для обеспечения совместимости между LLM и внешними ресурсами.
  2. Динамическая интеграция: Поддержка LLM в динамическом доступе к внешним источникам данных и инструментам и их интеграции.
  3. Контекстная осведомлённость: Поддержка динамического управления контекстом беседы для повышения связности в многоходовых диалогах.
  4. Открытость и расширяемость: Поддержка сторонних разработчиков в расширении функций и ресурсов для приложений LLM.

Сценарии применения MCP

MCP широко используется в следующих сценариях:

  1. Улучшенные системы вопросов и ответов: Предоставляют ответы в реальном времени и с высокой точностью за счёт интеграции внешних источников данных.
  2. Интеллектуальные ассистенты: Выполняют сложные задачи (такие как бронирование, вычисления, поиск и т. д.) за счёт интеграции инструментов и сервисов.
  3. Управление знаниями: Обеспечивает поддержку профессиональных знаний в предметной области за счёт интеграции библиотек документов и баз данных.
  4. Многоходовые диалоги: Обеспечивают согласованные многоходовые диалоги за счёт управления контекстом.

Плюсы и минусы MCP

Преимущества:

  1. Расширение функциональности: Значительно расширяет возможности приложений LLM за счёт интеграции внешних ресурсов.
  2. Гибкость: Поддерживает динамический доступ и интеграцию множества источников данных и инструментов.
  3. Открытость: Стандартизированные протоколы поддерживают стороннюю разработку и интеграцию.

Недостатки:

  1. Сложность: Требует проектирования и поддержки логики взаимодействия с внешними ресурсами.
  2. Накладные расходы на производительность: Доступ к внешним ресурсам может приводить к дополнительной задержке.

Альтернативы MCP

В некоторых сценариях можно использовать следующие альтернативы:

  1. Пользовательский API: Пользовательские интерфейсы API, разработанные для приложений LLM.
  2. Механизм плагинов: Используйте механизм плагинов для расширения функциональности приложений LLM.
  3. Граф знаний: Интегрируйте внешние знания через графы знаний.
Другие расширения