От небольшой мастерской к ML-фабрике: как мы Yandex AI Studio пересобирали. ai-агенты.. ai-агенты. mcp.. ai-агенты. mcp. mlops.. ai-агенты. mcp. mlops. realtime api.. ai-агенты. mcp. mlops. realtime api. responses api.. ai-агенты. mcp. mlops. realtime api. responses api. ии-агенты.
От небольшой мастерской к ML-фабрике: как мы Yandex AI Studio пересобирали - 1

Сегодня на Yandex Neuro Scale 2025 наша ML‑команда представила обновлённую AI Studio — платформу с большим набором инструментов для разработки ИИ‑агентов в единой end‑to‑end‑среде. Среди новинок — визуальный конструктор агентов, поддержка популярных API и реализация протокола MСP, механизмы AI search.

Агентские платформы уже какое‑то время находятся на пике популярности. Поэтому с одной стороны нашей задачей было учесть уже сформированные лидерами отрасли лучшие практики. А с другой — обобщить собственный опыт разработки и внедрения агентов, использующих большие языковые модели, и избавить разработчиков от проблем при инференсе.

Вместе с коллегами из команды разработки Анастасией Каримовой и Дмитрием Рыбалко покажем, как это устроено под капотом:

  • какие особенности эксплуатации нам нужно было учесть, чтобы найти баланс между производительностью и качеством;

  • как мы сталкивались с особенностями опенсорс‑инструментов для ML и учились справляться с этим разными способами;

  • как мы упростили создание голосовых агентов и заодно уменьшили latency запросов.

Какие бывают сложности при разработке ИИ-агентов

За последний год многие большие модели стали ещё доступнее — немало из них было выложено в опенсорс, при этом сравнение открытых моделей с проприетарными на стандартных бенчмарках показывает всё меньший разрыв по качеству.

Тем не менее, это по‑прежнему не позволяет «просто взять и скачать модель с Hugging Face, поднять её на виртуалке и сделать своего агента». На практике возникает много барьеров: для машинного обучения продакшн‑уровня нужна инфраструктура, а также большая исследовательская работа, чтобы достичь нужных метрик.

Именно поэтому возникает потребность в агентских платформах — а уже существующие платформы продолжают развиваться в ответ на новые запросы пользователей. Так, даже в рамках одной модели у разных провайдеров будет разное качество инференса модели:

Сравнение проводили с помощью бенчмарков GPQA Diamond и AIME25 (Источник)

Сравнение проводили с помощью бенчмарков GPQA Diamond и AIME25 (Источник)

Почему возникает эта разница? Вот лишь несколько проблем, с которыми сталкивались и мы сами как разработчики, и наши пользователи.

Нет выработанного стандарта с точки зрения инференса. Большое количество моделей, которые уже существуют на рынке, доступны в разных вариантах поставки. В индустрии есть несколько популярных публичных API: например, Anthropic API, OpenAI API — и многие опенсорс‑модели предоставляют режим совместимости с ними. В Yandex Cloud нас тоже очень просили предоставить возможности развернуть модели не только со своим нативным форматом, но и в режиме совместимости c OpenAI API. Мы добавили режим совместимости, но столкнулись с тем, что условия поддержки API регулярно меняются.

Изначально у нас на платформе был наш gRPC API и в дополнение к этому мы поддержали Chat Completions API от OpenAI с инструментами для генерации текста. Он не сохранял стейт, то есть был Stateless.

А между тем OpenAI пошли дальше и вслед за этим реализовали ещё два API:

  1. Realtime API, для построения голосовых агентов, которые на вход получают аудио и синтезируют ответ.

  2. Responses API — как для построения агентов, так и просто для чата с моделью.

Responses API — уже Stateful, что сильно отличается от прошлой реализации. Раньше пользователь создавал тред, получал его идентификатор, и все его сообщения были привязаны к одному треду, в рамках одного потока сообщений. С новым API у пользователя есть несколько способов управлять стейтом диалога: через Conversation API, который пока что поддерживается не везде, или с использованием древовидной структуры через previous_response_id.

Соответственно, у разработчика агентов появилась необходимость где‑то хранить это дерево, и если оно разветвлённое, это может добавить сложности.

Там, где стандарт уже наметился, он может быстро устареть. Один из немногих стандартов, описанных в мире ИИ, — это протокол MCP, Model Context Protocol, который регламентирует взаимодействие между LLM и внешними инструментами и источниками данных. При реализации Responses API это позволяет задать логику, когда бэкенд вызывает необходимые инструменты вместо пользователя — а ему самому уже не нужно писать код, чтобы обработать вызов.

Какие тут могут быть дополнительные задачи:

  • на бэкенде нужно хранить стейт этого вызова;

  • нужно реализовать механизм ожидания для тех операций, которые могут выполняться в фоне (например, если мы хотим проводить Deep Research, который может выполняться часы и дни).

Звучит не так сложно, но на практике с этим связано много тонкостей реализации.

Наш коллега Владислав Носивской уже рассказывал на JPoint, как в этой части у нас использовались очереди через Redis, и почему для этого также потребовалась связка с другими инструментами.

Для подобных задач мы всегда тестируем разные варианты, например, также пробовали использовать Temporal — но он не подошёл нам именно в контексте realtime‑задач.

Вдобавок к этому множество инструментов сейчас всё ещё работают со старой версией протокола MCP. В обозримом будущем планируется переход на новую — и с этим могут возникнуть новые интересные задачи.

Не всегда можно без проблем развернуть модели с помощью опенсорс‑инструментов. Для запуска моделей есть множество движков инференса:

  • vLLM

  • SGLang

  • Ollama

  • Triton

У каждого из них есть свои особенности. Как правило, когда выходит новая модель, опенсорс‑комьюнити добавляет её поддержку в движок.

Наиболее популярен vLLM, в нём достаточно быстро появляется поддержка новых моделей, но они могут работать не полностью. Например, когда не так давно OpenAI выложила в опенсорс две своих модели, под это появилась отдельная версия vLLM, но при запуске в Chat Completions API не работал вызов тулов. Исправить это можно с помощью различных парсеров, но в случае vLLM и gpt‑oss парсеров не было, и это было проблемой. Даже если парсеры есть, часто их поиск где‑то в комментариях на GitHub превращается в детективную историю.

Какие‑то баги в опенсорсе со временем исправляются, но не так быстро, как хотелось бы:

Например, сейчас в vLLM есть баг c поддержкой Qwen: во время вызова тулов в стримовом режиме через OpenAI часть аргументов могут просто пропасть. Issue висит уже пару месяцев, есть около пяти пул‑реквестов с решениями, но ни один из них пока не доделан.

Оценка моделей зависит от множества параметров. Чтобы выбрать подходящую модель для создания агента, разработчику как правило хочется покрутить разные варианты и сравнить показатели на примере своей задачи. Для этого применяются разные бенчмарки — их достаточно много в опенсорсе, у нас в Яндексе также есть свои.

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

Когда мы разворачивали в облаке YandexGPT 5.1 и прогоняли на этой модели все приёмочные испытания, то увидели интересную ситуацию с тестом BFCL — это инструмент для оценки того, как модель вызывает функции.

Наши коллеги из ML‑команды отдали нам модель с результатами по BFCL около 70%. Мы развернули её у себя, запустили тот же самый тест и получили 60%. Только через три дня дебага кода и тестов нам стало понятно, в чём проблема: публичное имя, присвоенное модели, работало у нас как URI, то есть имело вид gpt://name. А вызов функции в тесте работал так: бралось имя модели, имя теста, из этого собиралась строчка и вызывалась через питоновский eval (что само по себе не совсем продакшн‑подход). Но из‑за двоеточия в названии нашей модели тест падал — чтобы исправить это быстро, пришлось сделать свой форк BFCL.

Отдельная боль — это хостинг моделей. Разные модели могут отличаться по типам квантования. У каждой модели есть веса, эти веса в каком‑то формате, и под разные типы видеокарт есть разные возможности квантования, перекомпиляции этих весов.

Для нас уже давно хорошим тоном стала квантизация моделей — процесс преобразования значений из представления с большим объёмом информации (обычно непрерывного множества) в более компактное представление, обычно из дискретного множества. Квантизация помогает сократить объёмы потребляемых ресурсов, например памяти, и одновременно повысить скорость инференса.

Наши коллеги уже много рассказывали про это, например, в статьях про квантизацию и ускорение инференса.

Важно уметь выбирать тип квантования весов, исходя как из точности модели, так и из бизнес‑потребностей. За уменьшение потребления памяти мы часто платим точностью, и нужно уметь оценивать насколько эти потери приемлемы. Для опенсорсных моделей в перекомпиляции весов часто нет необходимости, обычно хватает готовых. Но иногда нужно поквантовать руками и подобрать подходящую технологию: есть варианты, которые просто сжимают веса, а есть технологии, которые пытаются делать это умно, сжимая только те веса, которые меньше всего используются.

Есть ещё одна проблема, которая станет актуальнее в перспективе: очень большие модели могут не поместиться на один хост.

У DeepSeek R1 уже 671B параметров — это 1342 Гб видеопамяти только на веса. А ещё нужна память под kv‑cache и активации.

Сейчас готовятся модели с ещё большим числом параметров. Например, Qwen3 Max, уже с триллионом параметров. Новый DeepSeek (в разработке) — тоже будет огромным.

По текущей статистике, наши пользователи чаще обращаются к моделям поменьше, но уже сейчас проблемы хостинга виднеются на горизонте. А значит для развёртывания будет необходима мультихостовая архитектура с возможностью доставки токенов на несколько машин и с распределённым KV‑кешем.

Единый подход для решения этой проблемы индустрией пока ещё тоже не выработан, есть варианты, например Prefill‑Decode Disaggregation: суть подхода в том, что чтение промта (Prefill) и генерация новой части (Decode) создают разные по профилю нагрузки на GPU.

Вариант, как можно решить проблему мультихостового деплоя

Вариант, как можно решить проблему мультихостового деплоя

А при работе с голосовыми агентами становятся особенно критичны задержки. До сих пор мы говорили про сложности при работе с разными моделями, однако в примерах чаще обращались к текстовым моделям. Но если мы проектируем голосового агента, появляются новые требования с точки зрения пользовательского опыта: разговор с голосовым помощником в идеале должен быть в режиме реального времени, без длинных пауз, как будто мы общаемся с человеком. А на задержки влияют и параметры сети, и архитектура решения, и используемые API.

Вот пример, с чем мы столкнулись при попытке реализовать агента через связку ASR + Responses API + TTS, если ничего не оптимизировать и дожидаться полной генерации:

От небольшой мастерской к ML-фабрике: как мы Yandex AI Studio пересобирали - 4

В нашем случае это решилось за счёт оптимизаций уже на уровне платформы. Но если собирать пайплайн самому, такие длинные паузы вполне возможны.

Итого, что бывает важно учитывать при инференсе:

  • форматы парсеров тулов;

  • особенности работы и баги опенсорсных инструментов;

  • типы API, которые поддерживают эти инструменты;

  • типы квантования моделей;

  • типы видеокарт в наличии;

  • производительность;

  • а ещё отказоустойчивость и мониторинги.

Все эти факторы приводят к тому, что продакшн‑деплой моделей превращается в достаточно нетривиальную исследовательскую задачу — и у небольшой команды разработки агента для её решения не всегда есть достаточно времени и возможностей.

Как это решается в нашей платформе

К выходу обновлённой AI Studio мы хотели избавиться от барьеров, которые ограничивают разработку ИИ‑агентов для команд: от нехватки вычислительных ресурсов до ограничений в проведении экспериментов.

Получилось вот такое идеальное видение агентской платформы, которое мы запланировали реализовать.

От небольшой мастерской к ML-фабрике: как мы Yandex AI Studio пересобирали - 5

Что здесь самое интересное из уже реализованного.

Единая Model Gallery для тестирования разных моделей. Нижний логический слой AI Studio — это модели, которые решают разные задачи. Если среди всего многообразия не получилось найти подходящей — можно дообучить, протестировать и подобрать подходящую конфигурацию.

С точки зрения пользовательского опыта, удобнее видеть всю информацию о доступных моделях в одном месте. Поэтому мы собрали их на единую витрину, включая опенсорсные модели, собственные модели Яндекса и дообученные модели, в том числе модели классификации, эмбеддингов и реранкинга.

При необходимости модели предварительно квантизируются, а у пользователя есть организационная и инфраструктурная поддержка для оптимизации деплоя. Поскольку инференс моделей регулярно преподносит что‑то новенькое — то для быстрого решения возникающих проблем у нас есть выделенная команда.

Поддержка Responses API. Существующая в опенсорсе поддержка Responses API, например, в том же vLLM, имеет свои ограничения: например, пока там в экспериментальном режиме поддерживается сохранение стейта в памяти, но это не готовое решение. Текущие опенсорсные решения подходят для совсем небольших и локальных сценариев использования, а для продакшн‑решений уже малопригодны. Для полной поддержки совместимости нужны ресурсы большой команды, недоступные отдельным разработчикам.

Вот что мы сделали для полной поддержки:

  1. Поддержали стейты, авторизацию, долгоживущие сессии.

  2. Поддержали синхронный, асинхронный и потоковый режимы.

  3. Реализовали MCP Tool Calling в Responses API.

Поддержка Realtime API. Для обновлённой платформы мы поставили цель: при работе с голосовым интерфейсом от окончания фразы пользователя до начала ответа у нас должно быть точно меньше секунды. Как уже показано в первой части, связка TTS с Responses API, совсем не соответствовала целевой метрике.

Сначала мы попробовали решить задачу за счёт Streaming TTS, но и в этом случае показатель явно можно было улучшить:

2–3 секунды по-прежнему много для голосового общения, где все привыкли к более естественной длине пауз

2–3 секунды по-прежнему много для голосового общения, где все привыкли к более естественной длине пауз

Realtime API стал более подходящим решением, которое укладывается в целевую метрику:

От небольшой мастерской к ML-фабрике: как мы Yandex AI Studio пересобирали - 7

На старте мы поддерживаем WebSockets‑версию, а на будущее также думаем о поддержке WebRTC.

Для максимальной живости голосовых агентов мы запустили также и стриминговый синтез. Он нативно встроен в Realtime API, но также может использоваться отдельно в сервисе SpeechKit. Благодаря поддержке стриминга, реплики для синтеза можно досылать по мере их появления (генерации моделью) и озвучивать максимально естественно в рамках одной сессии.

AI search. Инструменты веб‑поиска позволяют агентам при генерации ответа на запрос находить в интернете публичные документы с актуальными сведениями по теме запроса, и обобщать найденную информацию. Можно искать документы как на заданных сайтах, так и без ограничений по адресам.

В обновлённой платформе для поиска также появилась связка с новым API, совместимым с OpenAI — Vector Store API. Одновременно с этим мы добавили ещё несколько возможностей:

  • гибкое управление базой знаний: добавление и удаление файлов без перестроения индекса;

  • фильтрация по метаданным;

  • загрузка заранее подготовленных чанков;

  • использование только поиска без дальнейшей генерации.

Поддержка протокола MCP. В MCP Hub мы даём возможность как подключить внешний MCP‑сервер, так и создать свой MCP, который будет принимать запросы и распределять их между сервисами. Также можно трансформировать в MCP‑сервер любой API:

От небольшой мастерской к ML-фабрике: как мы Yandex AI Studio пересобирали - 8

В случае с Responses API схема работы с MCP может выглядеть так:

От небольшой мастерской к ML-фабрике: как мы Yandex AI Studio пересобирали - 9

В ближайшее время мы также учтём изменение стандартов и добавим поддержку MCP для Realtime API.

Демо: как это работает

Внутри AI Studio создадим на основе последней модели YandexGPT простого агента для службы комплаенса, который будет проверять контрагентов на благонадёжность:

Добавим инструменты RAG: загрузим в базу документы финансовой отчётности, которые необходимо использовать для поиска информации при проверке.

Дополнительно подключим поиск по материалам в интернете, чтобы найти сведения о важных публичных фактах о проверяемых компаниях.

Создадим MCP‑сервер для безопасного доступа к данным о компаниях из сервиса Контур.Фокус с помощью преднастроенного шаблона, протестируем работу агента и подключим дополнительные инструменты.

Готово! Другие сервисы также могут добавить свой API в MCP Hub — так что в ближайшее время таких шаблонов станет больше.


Помимо новых инструментов мы также предусмотрели возможности для плавной миграции. Не обязательно отказываться от прежних наработок, текущие решения по-прежнему можно вызывать через Function Calling.

Надеемся, всё это обеспечит большую гибкость разработки, где low-code-инструменты используются для быстрой проверки гипотез, а поддержка новых API, протоколов и возможностей поиска поможет лучше управлять качеством работы агентов.

Автор: SerjN

Источник

Rambler's Top100