Почему ваши AI-агенты ломают прод: как локально собирать и использовать данные о неудачных попытках и ошибках агентов

Я — Denis Shokhirev, Enterprise AI architect из Фрайбурга, веду DennisCraft AI Studio и за последние 6 месяцев собрал 14 продакшн AI-агентов для B2B в DACH на стеке Claude, Supabase, n8n, Doppler, self-hosted Postgres. Неделю назад в очередной раз словил ситуацию: агент успешно проходит тесты, но в проде ловит edge-case и ломает бизнес-процесс клиента. Не баг в коде — ошибка в цепочке размышлений, которую никто не логировал.

Зачем фиксировать неудачные попытки: реальные сбои и опасности

Большинство AI-агентов в России и СНГ запускают в песочнице или на кастомных демо. Но как только агент идет в прод, начинается хаос: нестандартный ввод, неполные данные, внешние сбои. На трех последних внедрениях я заметил одинаковое: без централизованного сбора ошибок, ретроспектива невозможна, а регрессия превращается в угадайку. Особенно при RAG-архитектуре или сложных workflow через n8n.

В мире стартапов принято надеяться на "запустим — разберёмся". Но если работать в B2B с реальными клиентами, особенно в логистике и финтехе, цена ошибки — потерянная неделя SLA, потенциальный штраф, разрыв контракта.

Стабильность против "просто работает"

ПодходДемоПрод
Логирование ошибокЛокально, выборочноЦентрализовано, стандарт
Анализ неудачных попытокВручную, по запросуАвтоматически, по расписанию
Реакция на сбоиПочти нетРеконфигурация/rollback

Как собирать ошибки локально: архитектурный паттерн

Я не использую облачные "черные ящики". Локальный сбор ошибок — это отдельный сервис рядом с агентом, который логирует все неудачные попытки, входные параметры, трейс стека, и ключевые промежуточные состояния.

Требования к системе сбора

  • Сбор по каждому агенту: id, prompt, входные данные, результат, ошибка
  • Хранение в auditable-таблице Postgres (желательно Supabase)
  • Маскирование персональных данных (DSGVO/152-ФЗ)
  • Доступ через UI или API для анализа

Базовая схема таблицы ошибок

CREATE TABLE agent_failures (
    id SERIAL PRIMARY KEY,
    agent_id TEXT NOT NULL,
    input JSONB NOT NULL,
    error_message TEXT NOT NULL,
    stack_trace TEXT,
    intermediate_state JSONB,
    created_at TIMESTAMP DEFAULT now()
);

Обязательное требование: не только сохранять саму ошибку, но и контекст — какие данные привели к сбою, какой промежуточный результат был у агента. Это критично для регрессии и поиска паттернов.

Реализация сбора ошибок на стеке Claude, Supabase, n8n

n8n как оркестратор

В каждом workflow через n8n я добавляю отдельный node "Log Failure" после критических шагов.

// Пример node в n8n для записи ошибки в Supabase
const { createClient } = require('@supabase/supabase-js');
const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_KEY);

async function logFailure(agentId, input, errorMsg, stackTrace, intermediate) {
    await supabase
        .from('agent_failures')
        .insert([{
            agent_id: agentId,
            input: input,
            error_message: errorMsg,
            stack_trace: stackTrace,
            intermediate_state: intermediate
        }]);
}

Этот же паттерн легко интегрируется с Claude Code через внешние вызовы — не требуется глубокий рефакторинг.

Маскирование данных (PII)

В логах никогда не храню "сырые" персональные данные. Минимум — хэширование email/телефонов, удаление имен, явная пометка полей с PII в схеме. Пример — через bandit или semgrep добавить pre-commit чек на утечку PII в логах. Для российских клиентов — поддержка 152-ФЗ.

Использование ошибок для регрессии и безопасности

Собранные ошибки — это не просто "логи для галочки". Я использую их для:

  • Автоматического составления regression-списка (каждый новый релиз — прогон через 10–20 реальных failure-case)
  • Валидации безопасности: поиск SQL-injection паттернов, опасных промптов, утечек токенов через gitleaks и semgrep (см. semgrep)
  • Построения дашбордов по динамике ошибок (Supabase + Grafana)

Пример регресс-теста на Python

import requests

def replay_failure(agent_url, failure):
    response = requests.post(agent_url, json=failure['input'])
    assert response.status_code == 200
    # можно добавить проверку на ожидаемый результат

# Получаем последние 10 ошибок
failures = get_failures_from_db(limit=10)
for f in failures:
    replay_failure('https://your-agent/api/invoke', f)

Такой подход реально ловит ошибки, которые не воспроизводятся на synthetic data — только с боевыми edge-case.

FAQ

Нужно ли хранить все ошибки навсегда?

Нет. Обычно достаточно хранить 3–6 месяцев. Дальше — архивировать или анонимизировать. Для финтех-клиентов — следите за внутренними стандартами хранения.

Как интегрировать такой сбор в существующий проект?

Добавьте middleware на уровне API/клиента, который ловит и пишет ошибки в отдельную таблицу. Не трогайте core-логику агента — сбор ошибок должен быть orthogonal.

Чем отличается такой подход от Sentry/New Relic?

Sentry хорош для JS/Python-кода, но не видит агентские ошибки уровня LLM. Здесь нужен свой слой, собирающий не только stack trace, но и промпты, входные данные и промежуточные состояния.

Что делать с false positive ошибками?

Рекомендую добавлять ручную разметку через UI или комментарии в базе. На больших объемах — semi-автоматизация через bandit/semgrep для фильтрации технических ошибок.

Как защитить такую таблицу от утечек?

Минимизировать доступ, обязательно шифровать на уровне диска, регулярный аудит через gitleaks и настройка alert-ов по подозрительным insert-ам.

В какой части вашей LLM-пайплайна чаще всего всплывают критические сбои — на этапе сбора ошибок, тестирования, или уже на реальных данных? Я провожу бесплатный 30-мин аудит стека для основателей AI-проектов в регулируемых рынках DACH. Пишите в LinkedIn или на @ger_dennis_ai.

Read more

Computer-Use-Agenten scheitern an Pixeln: wie Sie auf stabile UI-Referenzen über Accessibility Trees umstellen und fehleranfällige Desktop-Automatisierung nicht mehr ständig reparieren

von Denis Shokhirev, Enterprise AI Architect aus Freiburg im Breisgau Ich bin Denis Shokhirev, Agentic AI Systems Architect in Freiburg im Breisgau, Germany, und bei DennisCraft AI Studio setze ich produktive KI-Systeme für DACH-B2B-Kunden auf Basis von Claude, Supabase, n8n, Doppler und selbst betriebenem Postgres um. Die teuersten Fehler in

By Denis Shokhirev

Компьютерные агенты ломаются на пикселях: как перейти на stable UI refs через accessibility tree и перестать чинить flaky desktop automation

Я Denis Shokhirev, Agentic AI Systems Architect из Freiburg im Breisgau, Germany, и в DennisCraft AI Studio я собираю production AI-системы для DACH B2B на Claude, Supabase, n8n, Doppler и self-hosted Postgres. Самая дорогая поломка в desktop automation, которую я вижу у клиентов, почти никогда не связана с моделью: агент

By Denis Shokhirev