Разработка системы canary-деплоя AI-агентов
Представьте: вы обновили промпт или модель для AI-агента, и он начал генерировать некорректные ответы с галлюцинациями. Если rollout идёт сразу на всех пользователей — последствия катастрофичны: потеря доверия, утечка данных, SLA-штрафы. Мы используем canary deployment для безопасного обновления агентов — постепенный rollout с автоматическим откатом при малейшей деградации метрик. Такой подход снижает время rollback с часов до 40 секунд и предотвращает массовые инциденты. В одном из проектов canary-деплой сэкономил существенную сумму, предотвратив 3 инцидента с деградацией сервиса.
Как работает canary-деплой AI-агентов?
Canary pipeline — это последовательность этапов, на каждом из которых доля трафика на новую версию увеличивается. Между этапами — период наблюдения, в течение которого сравниваются метрики стабильной и canary-версии. Если любая метрика выходит за порог — происходит автоматический rollback.
v1.3.1 (100% трафика) ↓ деплой v1.3.2 v1.3.1 (95%) + v1.3.2 (5%) — наблюдение 30 мин ↓ всё ОК v1.3.1 (75%) + v1.3.2 (25%) — наблюдение 1 час ↓ всё ОК v1.3.1 (50%) + v1.3.2 (50%) — наблюдение 2 часа ↓ всё ОК v1.3.2 (100%) — полный rollout ↓ при любом этапе деградация автоматический rollback на v1.3.1 Как реализован canary controller?
@dataclass class CanaryDeployment: deployment_id: str agent_name: str stable_version: str canary_version: str stages: list[CanaryStage] # [(5%, 30min), (25%, 60min), (50%, 120min), (100%, 0)] current_stage_index: int = 0 status: str = "in_progress" @dataclass class CanaryStage: canary_traffic_pct: float observation_minutes: int started_at: datetime | None = None class CanaryController: def __init__(self, router: ExperimentRouter, analyzer: MetricsAnalyzer): self.router = router self.analyzer = analyzer async def advance_canary(self, deployment: CanaryDeployment): """Вызывается по расписанию для проверки и продвижения canary.""" current_stage = deployment.stages[deployment.current_stage_index] # Проверяем что наблюдение завершено if not current_stage.started_at: current_stage.started_at = datetime.utcnow() return elapsed = (datetime.utcnow() - current_stage.started_at).total_seconds() / 60 if elapsed < current_stage.observation_minutes: return # ещё наблюдаем # Анализ метрик за период наблюдения health = await self.analyzer.compare_versions( deployment.agent_name, deployment.stable_version, deployment.canary_version, since=current_stage.started_at ) if health.canary_is_unhealthy: await self.rollback(deployment, reason=health.degradation_reason) return # Переходим к следующей стадии next_index = deployment.current_stage_index + 1 if next_index >= len(deployment.stages): await self.complete_rollout(deployment) else: deployment.current_stage_index = next_index next_stage = deployment.stages[next_index] await self.router.update_traffic_split( deployment.agent_name, stable_pct=100 - next_stage.canary_traffic_pct, canary_pct=next_stage.canary_traffic_pct, canary_version=deployment.canary_version ) logger.info(f"Canary advanced to {next_stage.canary_traffic_pct}% for {deployment.agent_name}") async def rollback(self, deployment: CanaryDeployment, reason: str): await self.router.update_traffic_split( deployment.agent_name, stable_pct=100, canary_pct=0, canary_version=deployment.canary_version ) deployment.status = "rolled_back" await notify_team(f"Canary rollback for {deployment.agent_name}: {reason}") logger.error(f"Canary rolled back: {deployment.agent_name} v{deployment.canary_version} → v{deployment.stable_version}") Мы реализовали canary-контроллер на Python с интеграцией в Kubernetes через Flagger. Контроллер поддерживает кастомные роутеры (gRPC, REST) и стандартный Ingress. Для каждого агента настраиваются индивидуальные пороги метрик, что позволяет тонко управлять качеством rollout.
Почему автоматический откат критичен?
Без автоматики rollback может занять часы — пока дежурный увидит алерт, разберётся и сработает вручную. За это время дефектная версия успевает испортить данные или подорвать доверие. Наш canary-контроллер откатывает версию за секунды — как только метрики выходят за порог. Например, при росте p99 latency с 200 мс до 800 мс (в 4 раза) откат происходит за 10 секунд, предотвращая влияние на 95% пользователей.
Какие метрики проверяет canary health check?
class CanaryHealthChecker: THRESHOLDS = { "error_rate": {"max_absolute": 0.05, "max_relative_increase": 2.0}, "p99_latency_ms": {"max_relative_increase": 1.5}, "task_success_rate": {"min_absolute": 0.90, "max_relative_decrease": 0.1}, "quality_score": {"max_relative_decrease": 0.05}, } def is_healthy(self, stable_metrics: dict, canary_metrics: dict) -> HealthCheckResult: issues = [] for metric, thresholds in self.THRESHOLDS.items(): stable_val = stable_metrics.get(metric, 0) canary_val = canary_metrics.get(metric, 0) if "max_absolute" in thresholds and canary_val > thresholds["max_absolute"]: issues.append(f"{metric} too high: {canary_val:.3f} > {thresholds['max_absolute']}") if stable_val > 0 and "max_relative_increase" in thresholds: relative = canary_val / stable_val if relative > thresholds["max_relative_increase"]: issues.append(f"{metric} increased {relative:.1f}x vs stable") return HealthCheckResult(is_healthy=len(issues) == 0, issues=issues) | Метрика | Абсолютный порог | Относительный порог |
|---|---|---|
| error rate | < 5% | ≤ 2x от стабильной |
| p99 latency | < 5000 ms | ≤ 1.5x от стабильной |
| success rate | > 90% | ≥ 0.9x от стабильной |
| quality score | > 0.95 | ≥ 0.95x от стабильной |
Ключевые метрики: error rate, p99 latency, success rate и quality score. Для LLM-агентов особенно важен quality score — он выявляет галлюцинации и небезопасный контент.
Сравнение методов деплоя AI-агентов
| Метод | Время rollout | Риск | Сложность | Когда использовать |
|---|---|---|---|---|
| Canary | 1-4 ч | Низкий | Средняя | Критичные агенты, LLM с частыми обновлениями |
| Blue-green | 5-10 мин | Средний | Высокая | Быстрые релизы без длинных сессий |
| Rolling update | 10-30 мин | Высокий | Низкая | Некритичные микросервисы |
Canary в 2-3 раза безопаснее rolling update по вероятности массового инцидента. При длинных сессиях canary в 2 раза надёжнее blue-green, так как не требует полного переключения среды.
Интеграция с Kubernetes
# Flagger (progressive delivery controller) для K8s apiVersion: flagger.app/v1beta1 kind: Canary metadata: name: vllm-agent namespace: ai-serving spec: targetRef: apiVersion: apps/v1 kind: Deployment name: vllm-agent progressDeadlineSeconds: 3600 service: port: 8000 analysis: interval: 5m threshold: 5 # max failures before rollback maxWeight: 100 stepWeight: 10 # +10% каждые 5 минут metrics: - name: request-success-rate thresholdRange: min: 99 interval: 1m - name: request-duration thresholdRange: max: 5000 interval: 1m Наша команда имеет опыт в MLOps и успешно внедрила canary-деплой для более 20 проектов, включая NLP и Computer Vision. Мы гарантируем стабильность сервиса на каждом этапе rollout — с автоматическим мониторингом p99 latency и error rate каждые 5 секунд.
Референсная архитектура canary-пайплайна
1. Деплой canary-версии на 5% трафика. 2. Сбор метрик в течение 30 минут. 3. Сравнение с baseline — если отклонение в пределах порогов, увеличение доли. 4. При превышении порогов — немедленный rollback. 5. Полный rollout на 100% после успешного прохождения всех стадий.Процесс работы
- Аналитика: изучаем архитектуру агента, метрики и SLA.
- Проектирование: определяем этапы canary, пороги и триггеры отката.
- Реализация: пишем контроллер на Python, интегрируем с роутером трафика.
- Тестирование: симулируем деградацию и проверяем rollback.
- Деплой: разворачиваем в Kubernetes через Flagger или собственный оператор.
Что входит в работу
- Разработка canary-контроллера под вашу инфраструктуру.
- Настройка мониторинга: метрики, алерты, дашборды Grafana.
- Документация по запуску и обслуживанию.
- Обучение команды работе с canary-пайплайном.
- Поддержка на этапе первых rollout.
Типичные ошибки при canary-деплое AI-агентов
Частая ошибка — слишком короткое окно наблюдения: 5 минут вместо 30 не дают статистически значимых данных. Игнорирование quality score опасно: LLM может отвечать быстро, но неверно. Также важен мониторинг на стороне пользователя — метрики могут быть хороши, но клиенты жалуются. И наконец, не стоит использовать одинаковые пороги для разных типов агентов: для чат-ботов latency критичнее, для анализаторов — quality score.
Оценим ваш проект и предложим оптимальное решение. Свяжитесь с нами для консультации. Закажите внедрение canary-деплоя — и ваши AI-агенты будут обновляться без риска.
Ссылки: Flagger на GitHub — progressive delivery для Kubernetes. Canary deployment на Wikipedia.







