Дата публикации
ai_products

Как Яндекс собрал платформу AI‑агентов для Алисы поверх Temporal и зачем вообще понадобился свой сервер

Что нового

Яндекс перестал запускать агентский режим Алисы на «тонкой обёртке» над OpenAI Agents SDK и построил отдельную платформу Agent Transport System (ATS). Это центральный сервер, который управляет агентами, инструментами и моделями через собственный gRPC‑протокол и опирается на Temporal для отказоустойчивости.

Ключевые изменения по сравнению с нулевой версией:

  1. Долгоживущие агенты с восстановлением состояния

    • Агент «Исследовать» в Алисе AI работает до 20 минут.
    • За одну сессию он успевает обойти десятки сайтов, запустить несколько моделей и вызвать множество инструментов на разных хостах.
    • Если в середине цепочки что‑то падает — релиз, сеть, проблемы с инфраструктурой — ATS восстанавливает выполнение с последнего консистентного состояния, а не запускает всё заново.
  2. Распределённое выполнение по умолчанию

    • Один агент может жить на одном сервисе, другой — на другом, инструменты — на третьем.
    • ATS координирует все вызовы, не требуя, чтобы «всё крутилось в одном процессе», как у базового OpenAI Agents SDK.
  3. Тонкий SDK для разработчиков агентов

    • Агентский код реализует протокол и бизнес‑логику.
    • Хранение состояния, ретраи, мониторинг, доступы и квоты уезжают в ATS.
    • Time‑to‑first‑run для нового сервиса снижается: не нужно каждому агентскому сервису поднимать свою БД и инфраструктуру отказоустойчивости.
  4. Слой поверх Temporal, а не привязка агентов к Temporal SDK

    • ATS использует Temporal как движок надёжного исполнения workflow и activity.
    • Агентский код не зависит напрямую от Temporal SDK и может быть написан на языках без официальной поддержки Temporal (в частности, на C++).

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

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

От наивного SDK к платформе

Первая версия агентского режима в Алисе выглядела просто: Яндекс взял OpenAI Agents SDK и написал над ним тонкую обёртку. Всё работало в духе «идеальной лабораторной установки»: агенты и инструменты — в одном процессе, состояние выполнения — в памяти.

Проблемы такого подхода:

  • Локальное состояние. Процесс упал — вся история выполнения потеряна. Агент стартует с нуля, даже если до этого два часа гонял тяжёлые запросы к LLM.
  • Хрупкая цепочка сервисов. Если у вас цепочка вида Агент1 → Агент2 → Агент3 → Агент4, и Агент2 лежит из‑за релиза или сетевого сбоя, вы теряете всё, что ниже по дереву: результаты, промежуточные данные, прогресс.
  • Инфраструктурный зоопарк. Можно было «залатать» проблему: добавить БД, ретраи, мониторинг, алерты, квоты для каждого сервиса. Но тогда каждый агентский сервис превращается в мини‑платформу, а запуск нового агента занимает недели: доступы, база, конфигурации.

Команда сформулировала требования:

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

Отсюда родилась идея ATS — отдельного сервера, который говорит с агентами и инструментами по gRPC и берёт на себя всё «тяжёлое» вокруг надёжности.

Temporal как «двигатель надёжности»

Под ATS лежит Temporal — фреймворк для построения систем, которые не теряют состояние даже при падении воркеров, сетевых проблемах и рестартах.

Temporal оперирует двумя сущностями:

  • Workflow — объект с состоянием, который описывает последовательность шагов. Код workflow должен быть детерминированным и без сайд‑эффектов. Нельзя ходить в сеть, открывать файлы, использовать случайные числа без фиксации исходного значения.
  • Activity — функции с сайд‑эффектами (сеть, БД, вызовы моделей, инструменты). Workflow вызывает activity, когда нужно сделать «что‑то недетерминированное».

Как Temporal держит всё в порядке:

  1. История выполнения (event history)
    Temporal сохраняет каждое решение workflow и результаты завершённых activity в хранилище. Это подробный лог: какие activity вызывали, с какими аргументами, что вернулось.

  2. Восстановление через replay
    Если воркер с кодом workflow падает, Temporal поднимает новый воркер, «проигрывает» историю и приводит workflow в то же состояние, в котором он был до сбоя. Уже завершённые activity не запускаются повторно — их результаты берутся из истории.

  3. Повтор activity и идемпотентность
    Activity выполняются по схеме at‑least‑once. Если воркер не успел записать completion в историю, Temporal может запустить activity повторно. Поэтому любой сайд‑эффект (запись в БД, запрос к внешнему API) должен быть идемпотентным или иметь дедупликацию.

Для ATS это означает: если что‑то упало, workflow агента восстанавливается до последнего консистентного шага, а activity (вызовы инструментов, моделей, внешних сервисов) аккуратно ретраятся по заданной политике.

Почему Яндекс не пишет агентов напрямую на Temporal

У Temporal есть интеграция с OpenAI Agents SDK. Теоретически можно было бы описывать агентов как workflow прямо в Temporal. Команда Алисы на это не пошла по нескольким причинам:

  1. Жёсткая привязка к Temporal SDK
    Если агентский код напрямую использует Temporal, миграция на другой движок будет болезненной.

  2. Языки разработки
    В Яндексе много кода на C++. У Temporal нет официального C++ SDK. Привязывать архитектуру к доступности SDK по языкам — плохая идея.

  3. Модель взаимодействия с пользователем
    Temporal отлично подходит для стейт‑машин и сложных графов выполнения: запустили workflow, он прошёл фазы и выдал финальный ответ.
    Алисе нужно другое: отдавать пользователю промежуточные ответы по мере выполнения, а не только финальный результат.

Поэтому Яндекс построил свой сервер ATS поверх Temporal. Temporal отвечает за надёжное выполнение внутренних workflow, а ATS реализует протокол общения с агентами, маршрутизацию вызовов, работу с несколькими сервисами и выдачу частичных ответов пользователю.

Что это значит для вас

Если вы продуктовый менеджер или архитектор

  1. Долгие сценарии без страха падений
    Агент «Исследовать» — пример сложного сценария: десятки сайтов, вызовы моделей, инструменты, до 20 минут работы.
    С ATS такие сценарии можно планировать осознанно: если один из сервисов упадёт, вы не потеряете два часа запросов к LLM и не сожжёте бюджет на токены в холостую.

  2. Масштабирование без дублирования инфраструктуры
    Вам не нужно заставлять каждую команду поднимать свою БД, писать ретраи и мониторинг для агентского кода.
    Команды пишут агентов как «чистый» код, ATS берёт на себя распределённое выполнение и устойчивость.

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

Если вы бэкенд‑разработчик

  1. Меньше инфраструктурного кода в сервисе
    Внутри агентского сервиса вы реализуете протокол, бизнес‑логику и, при необходимости, инструменты.
    Логика ретраев, хранение истории, восстановление состояния и оркестрация по сервисам живут в ATS и Temporal.

  2. Понимание, как писать код с учётом at‑least‑once
    Любой вызов, который Temporal видит как activity, может выполниться повторно.
    Если вы сейчас проектируете свой агентный фреймворк, придётся сразу закладывать идемпотентность или дедупликацию.

  3. Чёткое разделение: детерминированный workflow и сайд‑эффекты
    Подход Temporal дисциплинирует архитектуру. Часть кода должна быть чистой и детерминированной, часть — содержать сайд‑эффекты и работать как activity.
    Это упрощает отладку и делает поведение системы предсказуемым.

Когда такой подход вам поможет

Использовать идеи ATS и Temporal стоит, если:

  • у вас есть ассистент или агент, который выполняет цепочки действий дольше нескольких секунд — от минут до десятков минут;
  • сценарий включает несколько внешних сервисов и инструментов, которые могут падать или временно быть недоступны;
  • повтор выполнения «с нуля» слишком дорог — по времени, по деньгам (LLM‑токены), по нагрузке на внешние API.

Когда можно обойтись без этого

Если ваш агент:

  • живёт внутри одного процесса,
  • делает один‑два коротких запроса,
  • и вы спокойно переносите повторный запуск целиком,

то городить Temporal и отдельный сервер не обязательно. Встроенных возможностей OpenAI Agents SDK или аналогов будет достаточно.

Доступность и ограничения

Речь идёт о внутренней платформе Яндекса для Алисы AI. Публичного доступа к ATS нет, это не внешний продукт.
Если вы разрабатываете свои агенты, вы можете использовать Temporal напрямую или строить аналогичный слой поверх него.

Для работы с Temporal в России может понадобиться VPN в зависимости от того, где вы разворачиваете инфраструктуру и какие облака используете. ATS как продукт Яндекса доступен только внутри экосистемы Яндекса.

Место на рынке

Яндекс решает задачу, с которой уже столкнулись крупные игроки, строящие сложных ассистентов:

  • OpenAI развивает OpenAI Agents SDK и интеграцию с Temporal, но по умолчанию предлагает модель, где многое живёт в одном процессе и без жёсткой платформенной прослойки.
  • Многие компании пишут собственные оркестраторы поверх workflow‑движков (Temporal, Cadence, Argo Workflows) или строят свои DSL для описания цепочек действий.

Яндекс выбрал связку «Temporal как движок + собственный сервер ATS как оркестратор агентов». Это даёт:

  • независимость агентского кода от конкретного workflow‑движка (нет прямой завязки на Temporal SDK);
  • возможность использовать языки без официальной поддержки Temporal, включая C++;
  • архитектуру, заточенную под ассистента, который должен отдавать пользователю промежуточные ответы, а не только финальный результат workflow.

Конкретных сравнений по скорости выполнения, стоимости или SLA с другими платформами (например, встроенными агентами у OpenAI или решениями на базе Cadence) команда не приводит. Фокус — на архитектуре и надёжности долгоживущих сценариев.

Если вы строите свою платформу агентов, опыт Яндекса показывает, что одного лишь SDK от поставщика LLM часто мало. Нужен отдельный слой, который умеет жить в распределённом мире, переживать падения сервисов и беречь ваши токены и время разработчиков.


Читайте также