Инструменты и MCP для AI-агентов
Ключевые тезисы
- Инструменты (tools) расширяют возможности LLM, превращая их из простых генераторов текста в агентов, способных выполнять действия.
- Инструмент — это функция, предоставленная LLM, с четким описанием, вызываемой сущностью, аргументами и выходными данными.
- Model Context Protocol (MCP) — открытый стандарт для создания безопасных двусторонних соединений между AI-моделями и внешним миром, решающий проблемы масштабирования и переиспользования инструментов.
Что такое инструменты и зачем они нужны
LLM без инструментов имеют ограниченные возможности:
Нет доступа к современным данным.
Плохо справляются с арифметическими задачами.
Не могут выполнять действия самостоятельно.
Инструменты нивелируют эти проблемы. Их использование стало переломным моментом в переходе от чат-ботов к агентам.
Как работает вызов инструмента (tool calling)
- Модель получает описание доступных инструментов (обычно через системный промт).
- При анализе пользовательского запроса модель определяет, какой инструмент нужно вызвать.
- Модель генерирует структурированный вызов (например, JSON с названием функции и аргументами).
- Агент (код) распознает этот вызов, выполняет функцию и возвращает результат модели.
- Модель использует результат для формирования окончательного ответа пользователю.
Ключевые принципы проектирования инструментов
Работа в рамках распределённых транзакций — инструмент должен корректно обрабатывать цепочки действий в нескольких системах и уметь откатывать частично выполненные операции (например, при оформлении заказа).
Идемпотентность и обработка повторных вызовов — повторный вызов инструмента (например, после таймаута агента) не должен приводить к дублированию действий (например, отправке нескольких одинаковых письм).
Информативные и структурированные сообщения об ошибках — ошибки должны быть понятны не только человеку, но и модели, чтобы она могла корректно перевызвать инструмент или сообщить о проблеме (например, отсутствии обязательного параметра или токена авторизации).
Гайды по взаимодействию с пользователем — инструмент должен передавать модели инструкции, например, дозапрашивать недостающие данные у пользователя или сообщать о невозможности выполнения операции.
Structured outputs — инструменты должны возвращать данные в структурированном формате, удобном для дальнейшего использования моделью.
Ключевой вывод: Хороший инструмент для агента — это надежный контракт между LLM и реальной системой, устойчивый к сбоям, повторным вызовам и изменениям среды.
Model Context Protocol (MCP)
Проблемы, которые решает MCP
Инструменты жестко связаны с конкретным агентом, их сложно переиспользовать.
При изменении описаний (specs) инструментов приходится переписывать их в каждом агете.
Пайплайны становятся хрупкими и сложно масштабируемыми из-за зависимости от конкретных моделей и форматов вызовов.
Архитектура MCP (клиент-серверная)
- MCP Host — AI-приложение, основной интерфейс для пользователя (например, Cursor). Координирует модели, управляет подключениями к серверам, обеспечивает безопасность и обработку согласия пользователя.
- MCP Client — компонент-соединитель, создаваемый хостом для каждого сервера. Обеспечивает двустороннее соединение (JSON-RPC 2.0), согласование возможностей и запуск инструментов.
- MCP Server — легковесная программа, предоставляющая конкретные возможности (инструменты, данные) через стандартизированный протокол. Может работать с локальными источниками (файлы, базы данных) или внешними API.
Как это работает вместе
- Discovery: Хост через клиентов параллельно узнает от всех серверов, какие инструменты и протоколы они поддерживают.
- Вызов: При запросе пользователя модель выбирает инструмент. Хост создает клиент для нужного сервера, отправляет запрос, получает результат и передает его модели для дальнейшей обработки или формирования ответа.
Важно не заниматься overengineering: MCP следует использовать только при реальной необходимости, когда возникают проблемы масштабирования и переиспользования. Для простых задач можно использовать готовые библиотеки и инструменты.
Практика: Добавление инструментов к агентам
Создание инструмента вручную
- Определяем функцию (например, умножение двух чисел).
- Создаем её описание для модели: название, описание, входные/выходные аргументы с типами.
- Инструмент передается модели в промте. Модель генерирует JSON-вызов (
tool_call). - Код агента парсит вызов, выполняет функцию и возвращает результат модели как
tool_result.
Проблемы ручного создания
Описание инструмента оторвано от функции, сложно поддерживать при множестве инструментов.
Риск забыть обновить описание при изменении функции (например, типов аргументов).
Решение через декораторы и классы
- Создается класс
Toolили декоратор, который автоматически генерирует описание инструмента из сигнатуры функции и её докстринга. - Это обеспечивает единообразие и автоматическое обновление описаний.
Использование готовых библиотек (например, LangChain/LangGraph)
- Библиотеки предоставляют готовые обёртки для создания инструментов и их интеграции с моделями.
- В графе агента добавляются узлы:
LLM(с привязкой инструментов) иTools. - Роутер после узла
LLMопределяет, был ли вызов инструмента или можно дать финальный ответ.
Пример: Агент для бронирования с инструментами
- Добавляются инструменты: поиск перелетов, информация о бронировании, отмена бронирования.
- Системный промт обновляется: указывается наличие инструментов и правила их использования.
- Состояние агента теперь поддерживает диалог (добавляет сообщения, не перезаписывает).
- Агент может выполнять действия (например, найти рейс, проверить бронь) и взаимодействовать с пользователем (например, запрашивать подтверждение отмены).
Выводы
- Инструменты — ключевой компонент для превращения LLM в функциональных агентов.
- Правильное проектирование инструментов (идемпотентность, обработка ошибок, structured outputs) критически важно для надежности.
- MCP решает проблемы масштабирования, переиспользования и хрупкости пайплайнов через стандартизированную клиент-серверную архитектуру.
- На практике инструменты можно создавать вручную, автоматизировать через декораторы или использовать готовые решения из библиотек.