Agent Deployment Cloud

Путь агента от локального Python до облачного сервиса: один образ вместо «работает у меня», секреты в менеджере, приватная сеть с единственной публичной точкой входа, CI/CD и стриминг ответа. Шесть шагов, каждый из которых закрывает конкретный класс проблем эксплуатации.

Суть

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

Ключевой сдвиг мышления: артефактом релиза становится не код, а образ. Тот же самый образ едет в dev, stage и prod, различаясь только конфигурацией.

Маршрут: от кода до прода

FastAPI-приложение
  → Dockerfile (единый артефакт)
  → Container Registry (хранилище образов)
  → Serverless Containers (исполнение без управления серверами)
  → Lockbox / менеджер секретов (API-ключи моделей)
  → VPC + API Gateway (единственная публичная точка)
  → CI/CD (автоматическая пересборка и деплой ревизии)

Секреты. Переменные окружения делятся на обычные (идентификатор каталога — не тайна) и секретные (ключ к модели). Вторые не хранятся в образе и не лежат в репозитории: они пробрасываются в контейнер из менеджера секретов при старте ревизии. Смена ключа — новая ревизия, а не пересборка образа.

Сеть. Сам контейнер и база данных живут в приватной сети (VPC) и наружу не торчат. Публичный — только API Gateway, который проксирует запросы внутрь. Gateway при этом не просто прокси: на него вешаются правила роутинга, таймауты, авторизация.

Обвязка агента (harness)

Термин для того, что окружает модель и превращает её в сервис: LLM плюс долгосрочная память, инструменты, планирование и автоматизация деплоя. Модель — лишь один компонент; всё остальное — обычная инженерия, к которой применимы обычные практики (см. Agent Architecture).

Инфраструктура как код

Ручная настройка облака воспроизводима ровно один раз — пока помнишь, что кликал. Terraform-описание превращает инфраструктуру в версионируемый артефакт: контейнеры, база, секреты, сетевые правила лежат в репозитории рядом с кодом и раскатываются одной командой.

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

Стриминг и восприятие скорости

Полный ответ агента формируется секундами, и всё это время интерфейс молчит. Стриминг меняет ощущение: время до первого токена (TTFT) ~0.5 с под нагрузкой считается ориентиром хорошего UX.

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

Песочница для кода от модели

Отдельный класс задач — исполнение кода, который сгенерировала LLM. Обычный serverless-контейнер для этого не годится по изоляции и по времени старта; нужны специализированные эфемерные песочницы с аппаратной изоляцией и мгновенным запуском. Разбор различий — в Agent Sandboxing.

Холодный старт и граница ухода с serverless

Холодный старт и требование к TTFT совмещаются плохо — и это надо признать прямо, а не пытаться оптимизировать образ до бесконечности. На редком трафике каждый второй запрос попадает в холодный инстанс, и время до первого токена определяется не моделью, а запуском контейнера. Три рабочих обхода, в порядке цены: минимальное число прогретых инстансов (перестаёт быть serverless по стоимости, но остаётся по управлению); периодический прогрев запросом по расписанию — дёшево, но не спасает при всплеске после паузы; вынос модели из образа, чтобы холодный старт не включал загрузку весов, если инференс локальный. Если ни один не подходит, честнее пересмотреть само требование: 0.5 с на редком трафике — это требование к постоянно работающему сервису.

Граница ухода с serverless проходит не по нагрузке, а по трём признакам. Первый — доля холодных стартов: когда прогрев обходится дороже постоянного инстанса, serverless потерял смысл. Второй — состояние: если процесс должен переживать запрос (долгие задачи, ожидание внешних событий), эфемерная модель исполнения начинает мешать (Durable Execution). Третий — предсказуемость счёта: на ровной нагрузке serverless обычно дороже, и переход окупается сам. Пока ни один не сработал, оставаться на serverless выгоднее — он снимает эксплуатацию, а не только масштабирование.

Связано с

  • Serverless vs K8s AI — почему для инференса больших моделей выбирают горячий пул, а не масштабирование в ноль
  • Agent Sandboxing — изоляция недоверенного кода, соседняя задача с другими требованиями
  • Feature Flags LLM — как менять поведение задеплоенного сервиса без нового деплоя
  • Canary Release LLM — как выкатывать новую ревизию безопасно
  • Local LLM Deployment — альтернатива: инференс на своём железе
  • Agent Architecture — что именно упаковывается в образ