В современном мире искусственного интеллекта качество взаимодействия между сложными языковыми моделями и сторонними инструментами имеет решающее значение для эффективного развития продуктов и сервисов. Одним из распространенных вызовов является высокая частота ошибок при вызове инструментов в таких моделях, как OpenAI, Anthropic и Google Gemini, что способствует нестабильной работе и снижению уровня удовлетворенности пользователей. Новой волной в решении данной проблемы стал инновационный инструмент — слой совместимости MCP (MCP Tool Compatibility Layer), основанный на тщательном исследовании причин ошибок и адаптации схем данных к особенностям каждой модели. Эксперименты показали, что прежние уровни ошибок в 15% удалось снизить до всего 3%, что открывает новые возможности для разработчиков и пользователей. Проблема высокой частоты ошибок при вызове инструментов напрямую связана с несовместимостью схем передачи данных и ограничениями, накладываемыми различными архитектурами моделей.
Типичный кейс — когда вызов инструмента с определенным набором параметров и ограничений возвращает ошибку или игнорирует некоторые из них, что негативно отражается на работе приложения. В частности, это было характерно для ряда моделей OpenAI, где при неподдерживаемых свойствах появлялось явное сообщение об ошибке, либо для Google Gemini, где некорректные параметры просто игнорировались без уведомления, и для нескольких других моделей, у которых наблюдалась нестабильность в обработке вызовов. Создатели решения опирались на Mastra — TypeScript агентский фреймворк, в котором пользовательские вызовы инструментов требовали точного описания входных параметров при помощи Zod или JSON схем. Проблема возникала из-за того, что разнородные требования и поддержка со стороны моделей приводили к ошибкам, а также к некорректной интерпретации ограничений, таких как минимальная длина строки или размер массива. Координация обработки таких параметров стала ключевым вызовом.
Исследовательская часть включала разработку тестового набора, который содержал около 30 типов свойств и ограничений — от простых строк и чисел до сложных вложенных объектов, объединений и перечислений. Такой разнообразный тест помог проанализировать, как каждая модель справляется с конкретными ограничениями. Результаты были неоднозначными: Anthropic показал почти идеальную совместимость, Google Gemini пропускал определенные атрибуты, а OpenAI выдавал ошибки при неподдержке конкретных параметров. Модели DeepSeek и Llama демонстрировали нестабильное поведение, иногда отклоняя вызовы даже при простых запросах. Ключ к улучшению состоял в корректной передаче схем и ограничений в понятном для модели виде.
Изменение структуры входных данных, включая трансформацию nullable полей в optional, а также адаптация форматов JSON схемы помогли, но не полностью решили проблему. Следующий и более эффективный шаг заключался во внедрении ограничений напрямую в промпты, которые получают модели. Идея была в том, чтобы явно расписать требования к параметрам в тексте запроса, что обеспечивало их понимание даже для моделей с недостаточной поддержкой JSON схем. Однако интеграция информации об ограничениях в промпт воспринималась как временное и потенциально неустойчивое решение, особенно при работе с длинными и сложными запросами. Более совершенный подход заключался в инъекции схемных ограничений в описание каждого свойства — внутри самого определения инструмента.
Такой метод позволил локализовать метаданные, сделать их более структурированными и не раздувать общий текст запросов. Рассмотрим конкретный пример. Для строки, которая должна быть URL, согласно JSON Schema это свойство формата uri. Однако модели типа o3-mini зачастую игнорировали или ошибочно обрабатывали параметр "format":"uri". Новая версия совместимости заменила этот формат на вложенную JSON-строку, содержащую описание свойства, например {"url":true} в поле description.
Такой прием фактически обходил ограничения модели на чтение формата, передавая информацию в более универсальном и безопасном с точки зрения интерпретации виде. Результаты внедрения MCP показали впечатляющие улучшения. Тестирование 30 свойств и ограничений позволило повысить успешность вызова инструментов до 97% в среднем, чего не удавалось достичь ранее. Особенно заметен рост качества у моделей Google Gemini и OpenAI, где совместимость с ограничениями значительно улучшилась. Для Anthropic показатели стабильно оставались высокими.
В некоторых случаях, таких как DeepSeek и Meta Llama, наблюдались колебания, которые, тем не менее, можно было компенсировать с помощью реализации повторных попыток вызова. Безопасность и удобство использования — дополнительные преимущества нового слоя совместимости. Разработчики теперь могут экспериментировать с разными провайдерами моделей без серьезных доработок кода, значительно облегчая интеграционные процессы и снижая затраты на поддержку. Фреймворк Mastra после версии 0.9.
4 уже включает в себя данное решение, что делает его доступным для широкого круга пользователей. Суть инновации заключается в том, что уровень абстракции работы с форматами и ограничениями перенесен на промежуточный слой. Это похоже на исторический путь веб-разработки, где разработчики создавали шлемы совместимости для разных браузеров, обеспечивая стабильное отображение сайтов без необходимости постоянно переписывать код под каждую версию. Аналогично слой MCP выступает прослойкой, сглаживающей несовершенства совместимости между языковыми моделями и вызываемыми инструментами. Главная ценность решения — это рост надежности и предсказуемости работы, что крайне важно для бизнес-приложений и сложных рабочих процессов, где ошибки вызова инструментов могут привести к сбоям и потерям данных.
Улучшение совместимости также расширяет спектр задач, которые можно эффективно делегировать языковым моделям, открывая новые горизонты для автоматизации и интеллектуальных помощников. Перспективы дальнейшего развития связаны с расширением поддержки новых моделей, уточнением и стандартизацией способов описания ограничений, а также интеграцией более сложных типов данных. В частности, работа с такими Zod типами, как пересечения, кортежи и специальные значения, пока не вошла в основной набор из-за ограничений моделей, но зона активного интереса разработчиков. Важно отметить, что успех MCP — результат сочетания глубокого анализа поведения моделей, инженерной гибкости и новаторского подхода к структурам данных. Этот опыт подчеркивает важность понимания не только алгоритмической части, но и хрупкостей взаимодействия с фронтенд-системами и сторонними инструментами в экосистеме современных ИИ.