Суть
Прототип агента живёт в ноутбуке и падает при переносе по банальным причинам: другая версия 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 — что именно упаковывается в образ