"AI-агент сжёг $200 в токенах за ночь. Dunetrace ловит такие сбои за 15 секунд"
AI-агент сжёг $200 в токенах за ночь. Dunetrace ловит такие сбои за 15 секунд
Агенты не падают с ошибкой. Они ломаются тихо.
Вызывают один и тот же API восемь раз подряд. Раздувают контекст в пять раз. Игнорируют результаты поиска и галлюцинируют ответ. Всё это время пользователь видит спиннер, а потом — уверенный ответ. Неправильный и дорогой.
Если вы запускаете AI-агентов в продакшн (или хотя бы на staging), вы наверняка сталкивались: всё «работает», но качество деградирует, а расход токенов необъяснимо растёт. Классический мониторинг тут бессилен — нет ни ошибок, ни крашей.
Dunetrace: 15 детекторов тихих сбоев
[Dunetrace](https://github.com/dunetrace/dunetrace) — open-source библиотека, которая встраивается в агента через callback и прогоняет каждый прогон через 15 поведенческих детекторов. Не постфактум в логах, а в реальном времени.
Вот что она ловит (выборка самого интересного):
**🔴 TOOL_LOOP** — один инструмент вызван 3+ раз в окне из 5 вызовов. Агент не может распарсить ответ и зацикливается. Это главный пожиратель токенов.
**🔴 RETRY_STORM** — инструмент падает 3 раза подряд, агент продолжает долбиться вместо fallback.
**🔴 LLM_TRUNCATION_LOOP** — модель возвращает обрезанный ответ дважды. Контекст переполнен, но агент не сокращает.
**🟡 CONTEXT_BLOAT** — prompt tokens выросли в 3× от начала к концу прогона. Тихий рост стоимости.
**🟡 RAG_EMPTY_RETRIEVAL** — поиск вернул ноль результатов, агент всё равно ответил. Ответ без фактической основы.
**🟡 GOAL_ABANDONMENT** — агент перестал вызывать инструменты, пошли 4+ LLM-вызова подряд. Потерял цель и «рассуждает в пустоту».
**🔴 PROMPT_INJECTION_SIGNAL** — входные данные совпадают с паттернами инъекций.
Всего 15 детекторов. При срабатывании — Slack-алерт за 15 секунд с конкретными шагами, потраченными токенами и предложенным фиксом.
4 строки интеграции
Для LangChain/LangGraph:
```python from dunetrace import Dunetrace from dunetrace.integrations.langchain import DunetraceCallbackHandler
dt = Dunetrace() callback = DunetraceCallbackHandler(dt, agent_id="my-agent") result = agent.invoke(input, config={"callbacks": [callback]}) ```
Деплой — `docker compose up -d`. Дашборд на `localhost:3000`.
Privacy-first: никакого raw-контента
Ключевое решение: весь текст хэшируется SHA-256 прямо внутри процесса агента. На сервер Dunetrace уходят только хэши и структурные метрики — количество токенов, latency, finish_reason. Никакие промпты, ответы или данные пользователей не покидают процесс в открытом виде.
Для тех, кто работает с чувствительными данными, это критично. LangSmith и Langfuse тоже шифруют данные в транзите, но сам текст передают — Dunetrace не передаёт его вообще.
Чего не хватает
Dunetrace ловит структурные аномалии, но не оценивает смысловое качество ответа. Агент может выдать фактически неверный ответ «правильной» длины — это не сработает ни на одном детекторе.
Второе: detect без prevent. Когда TOOL_LOOP сжигает $2 за 30 секунд, алерт в Slack — уже поздно. Логичное развитие — опциональный circuit breaker, который прерывает прогон при HIGH-детекции.
Третье: мультиагентные системы. Каждый прогон анализируется изолированно. Если агент A передаёт мусор агенту B, Dunetrace это не видит.
Зачем это нужно прямо сейчас
Microsoft 18 марта 2026 года выпустил гайд, где observability для AI-систем поставлена наравне с governance. Рынок осознаёт: запустить агента — полдела, нужно понимать, что он делает после запуска.
Dunetrace — не платформа, а библиотека. Никакого vendor lock-in, всё крутится локально. Для команды из 2-3 разработчиков, которая запускает первых агентов в продакшн, — это разумный старт.
GitHub: [dunetrace/dunetrace](https://github.com/dunetrace/dunetrace)
Вы мониторите своих агентов? Или пока работает — не трогаете?