Self-Healing агенты: как мы учим AI восстанавливаться после ошибок без человека
Агент упал. Инструмент вернул 500. API провайдера лёг. Модель сгенерировала невалидный JSON. В production это не «если», а «когда». Разница между хрупким прототипом и надёжной системой — в том, как агент обрабатывает неизбежные сбои.
За 3 месяца продакшена Hermes Agent мы выработали 4 паттерна recovery, которые покрывают 95% ошибок.
1. Retry with Backoff и Escalation. Первое правило: не retry'ть бесконечно. Базовая схема — exponential backoff (1s → 2s → 4s → 8s, макс 3 попытки). Если все три провалились — escalation: переключиться на другую модель (DeepSeek V4 Flash → Nemotron) или другой эндпоинт (OpenRouter → прямой API). Мы храним карту fallback-провайдеров для каждого инструмента. DeepSeek упал → Qwen 3.5 Flash через OpenRouter за 200ms.
2. Schema Recovery. Самая частая ошибка LLM при tool calling — невалидный JSON или пропущенные поля. Вместо того чтобы падать и просить пользователя «исправить запрос», мы применяем трёхуровневую стратегию: (а) перегенерация — модель повторяет вызов с тем же контекстом, (б) schema patching — если не хватает поля, подставляем дефолт из JSON Schema, (в) strategy switch — если инструмент не вызывается третий раз подряд, агент переключается на альтернативный инструмент с той же семантикой.
3. Graceful Degradation. Агент, который не может выполнить задачу полностью, должен сделать 80%. Мы проектируем каждый workflow с точками отсечки: если не удалось получить данные из источника A — взять из кэша B. Если кэша нет — ответить с пометкой «данные частичные». Полный отказ хуже, чем неполный ответ. В Hermes это реализовано через priority chains — список источников в порядке предпочтения, агент идёт по списку пока не получит валидный результат.
4. Self-Verification Loops. После каждого tool call агент делает минимальную проверку результата: не пустой ли ответ? соответствует ли схеме? не превышает ли лимиты? Если проверка не пройдена — repeat с изменённым промптом. Для критических операций (деплой, запись в БД) — double-check: два независимых tool call с разными моделями, результат принимается при совпадении.
Цифры с нашего продакшена: до внедрения recovery-паттернов ~15% задач агента заканчивались ошибкой, требующей ручного вмешательства. После — 2.3%. При этом среднее время выполнения задачи выросло всего на 12% за счёт retry. Экономия времени разработчика — часы в день.
Главный урок: не пытайтесь сделать агента, который не ошибается. Делайте агента, который быстро и незаметно исправляет свои ошибки. Надёжность AI-системы — это не качество модели. Это качество recovery-логики вокруг неё.
Хороший агент не тот, кто никогда не падает. А тот, чьё падение пользователь никогда не замечает.
Self-Healing Agents: How We Teach AI to Recover Without Human Intervention
Your agent crashed. The tool returned 500. The API provider went down. The model generated invalid JSON. In production, this isn't "if" — it's "when". The difference between a brittle prototype and a reliable system is how your agent handles the inevitable failures.
After 3 months running Hermes Agent in production, we've settled on 4 recovery patterns covering 95% of all errors.
1. Retry with Backoff & Escalation. First rule: don't retry forever. Base pattern — exponential backoff (1s → 2s → 4s → 8s, max 3 attempts). After 3 failures, escalate: switch to another model (DeepSeek V4 Flash → Nemotron) or another endpoint (OpenRouter → direct API). We maintain a fallback provider map per tool. DeepSeek down → Qwen 3.5 Flash via OpenRouter in 200ms.
2. Schema Recovery. The #1 LLM failure in tool calling — invalid JSON or missing fields. Instead of crashing and asking the user to "fix the prompt", we apply a three-tier strategy: (a) regeneration — model retries with same context, (b) schema patching — inject defaults from JSON Schema for missing fields, (c) strategy switch — if a tool fails 3 times consecutively, switch to a semantically equivalent alternative tool.
3. Graceful Degradation. An agent that cannot complete 100% should deliver 80%. Every workflow gets cutoff points: if source A is unavailable → fall back to cache B. If no cache → respond with a "partial data" disclaimer. Full failure is worse than an incomplete answer. In Hermes, we implement this via priority chains — ordered source lists the agent walks through until it gets a valid result.
4. Self-Verification Loops. After every tool call, the agent performs a minimal self-check: is the response empty? does it match the expected schema? within limits? If the check fails → repeat with an adjusted prompt. For critical operations (deploy, DB writes), we use double-check verification: two independent tool calls with different models, result accepted only on match.
Production numbers: before recovery patterns, ~15% of agent tasks ended with errors requiring manual intervention. After implementation — 2.3%. Average task latency increased only 12% due to retries. Developer hours saved: hours per day.
The key takeaway: Don't try to build an agent that never makes mistakes. Build one that catches and fixes its own mistakes quickly and invisibly. The reliability of an AI system isn't a function of model quality. It's a function of the recovery logic around it.
A good agent isn't one that never fails. It's one whose failures the user never notices.