Архитектура мультиагентной системы с отказоустойчивостью: разбор реального кейса
8 параллельных агентов, скоринговая петля качества, автофоллбэк между Claude/GPT/Gemini. Разбираю production-архитектуру на LangGraph с fan-out, retry и fallback.
Март прошлого года. Наш AI-сервис обрабатывает входящие заявки клиентов: классифицирует, извлекает данные, генерирует ответ, проверяет compliance. Один агент, одна модель, линейная цепочка. Работает — пока работает.
Понедельник утро, 9:47. OpenAI API возвращает 503. Сервис лежит. Очередь заявок растёт. Клиенты ждут. Мы ждём, пока OpenAI починится. 47 минут даунтайма. 230 необработанных заявок.
Через две недели — другая проблема. API работает, но Claude на сложных юридических текстах начинает галлюцинировать: выдумывает номера статей закона. Модель не упала — она уверенно врёт. Ошибку поймали через 4 часа, когда клиент пожаловался.
Два инцидента — два разных типа отказа. Первый: провайдер недоступен. Второй: провайдер доступен, но выдаёт мусор. Линейная архитектура «один агент → одна модель» уязвима к обоим.
Я перестроил систему. Восемь параллельных агентов, три LLM-провайдера, скоринговая петля качества, автоматический фоллбэк. За последние 11 месяцев — ноль минут даунтайма по вине AI-слоя. Разберу архитектуру.
Общая схема
Три слоя: параллельный fan-out → quality gate → fallback chain.
Входящая заявка уходит одновременно в восемь агентов. Все восемь результатов собираются в quality gate. Если скор < 0.8 — только провалившиеся агенты перезапускаются с другой моделью (до 3 попыток).
Слой 1: параллельный fan-out
Параллельность даёт два преимущества: скорость (8×2-4 сек последовательно → max 2-4 сек параллельно) и изоляцию отказов (падение одного агента не блокирует остальных).
Слой 2: Quality Gate
Структурные проверки (без LLM) — правильные категории, числа вместо текста, валидный JSON. Семантические проверки (gpt-4o-mini) — релевантность, полнота, отсутствие галлюцинаций.
Критически важно: scorer и agent используют разные модели. Одна модель не оценивает саму себя.
Слой 3: Retry Loop + Fallback
FALLBACK_CHAIN = [Claude Sonnet → GPT-4o → Gemini 1.5 Pro]. Максимум 3 попытки. После третьей — результат с флагом needs_human_review: true.
Результат: 11 месяцев в production
- Даунтайм AI-слоя: 0 минут
- Quality score: 0.91 (было 0.84)
- Латентность p50: 3.2 сек (было 18 сек)
- Retry rate: 12%, из них 94% разрешаются на втором провайдере
Монолит быстрее строить. Но жить с ним в production — дороже. Каждый инцидент с монолитом — полный отказ. С параллельной архитектурой — частичная деградация, которую система компенсирует автоматически.