Последние полгода я веду несколько продакшен-агентов на Claude API и n8n: они принимают заявки, проверяют оплату через эквайринг T‑Bank, дёргают СДЭК за статусами доставки и отвечают клиентам в Telegram через aiogram-бота. Работа с ИИ-агентами на практике упирается не в промпты, а в то, что происходит после запуска: агент выбрал не тот инструмент, завис на повторных вызовах или тихо съел лимит токенов за час. Ниже разбираю, как я строю логирование, мониторинг и разбор ошибок на реальных проектах, без теории про идеальный промпт-инжиниринг.
По теме статьи
Готовое решение
AI-чатбот для сайта на Claude - отвечает как ваш менеджер, работает 24/7
Подключу к вашему сайту чат-бота на Claude API. Бот отвечает на вопросы клиентов голосом вашего бренда, знает каталог и условия доставки, забирает лиды в CRM или Telegram.
от25 000 ₽
AI / Claude API
Искусственный интеллект для бизнеса
AI-чатбот на сайт с базой знаний, автообработка заявок, генерация контента, умный парсинг. Claude API, OpenAI, RAG.
от50 000 ₽
Зачем контролировать агента, если он и так работает
На тестовых десяти заявках агент отрабатывает ровно. Проблемы начинаются на проде, когда параллельно прилетают тридцать запросов, у СДЭК на пару секунд подвисает API, а модель в ответ на таймаут решает повторить вызов инструмента оплаты вместо того, чтобы остановиться. Один из моих проектов на связке WooCommerce и эквайринга T‑Bank как раз так и словил задвоенный заказ: агент получил вебхук об оплате, начал создавать заказ, вызов завис, n8n перезапустил workflow по таймауту, а агент честно создал заказ второй раз, потому что не помнил о первой попытке.
Без логов такие вещи ищутся часами: смотришь код, гоняешь запрос заново руками, пытаешься угадать, что пошло не так. С логами это пять минут: открываешь трейс конкретного request_id и видишь оба вызова инструмента подряд с одинаковым платежом.
Логирование действий ИИ-агента: что писать в лог
Я логирую не «весь диалог», а конкретные точки, где агент принимает решения и трогает внешние системы. Для каждого шага фиксирую пять вещей: какой инструмент вызван, с какими параметрами, что вернулось, сколько это заняло по времени и сколько стоило в токенах.
| Поле лога | Зачем нужно |
|---|---|
| request_id / trace_id | Связать все шаги одного запроса, включая ретраи, в одну цепочку |
| Имя инструмента и параметры вызова | Понять, что именно агент решил сделать и с какими аргументами |
| Сырой ответ инструмента | Отличить ошибку модели от ошибки внешнего API (СДЭК, T‑Bank, CRM) |
| Токены запроса и ответа | Считать реальную стоимость каждого диалога, а не среднюю по больнице |
| Время выполнения шага | Найти узкое место, если агент отвечает медленнее ожидаемого |
На практике это выглядит как обёртка вокруг каждого tool call, которая пишет структурированную запись в базу до и после вызова:
async def call_tool(tool_name, params, request_id):
started = time.monotonic()
logger.info("tool_call_start", extra={
"request_id": request_id,
"tool": tool_name,
"params": params,
})
try:
result = await tools[tool_name](**params)
logger.info("tool_call_done", extra={
"request_id": request_id,
"tool": tool_name,
"duration_ms": int((time.monotonic() - started) * 1000),
})
return result
except Exception as exc:
logger.error("tool_call_failed", extra={
"request_id": request_id,
"tool": tool_name,
"error": str(exc),
})
raise
Такую запись я храню в Postgres, а не в текстовом файле на сервере: через полгода в проекте с оплатами и доставками счёт логов идёт на сотни тысяч строк, и без индекса по request_id и дате искать конкретный инцидент неудобно.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Мониторинг агентов в реальном времени
Логи хороши для разбора задним числом, но узнавать о падении агента от клиента в поддержке, а не от системы, неприятно. На проектах с n8n я завожу отдельный alert-канал в Telegram: если workflow падает в Error-ветке, туда летит сообщение с номером заявки и текстом ошибки. Для aiogram-ботов то же самое делаю через middleware, который перехватывает исключения на каждом апдейте и шлёт краткую сводку админу, не роняя диалог с пользователем.
Отдельно слежу за лимитами внешних API, потому что агент, который сам решает, когда дёргать инструмент, может случайно устроить локальный наплыв запросов на СДЭК или платёжный шлюз. У СДЭК, например, есть ограничение на число запросов в минуту на один аккаунт, и если агент в цикле опроса статусов доставки не соблюдает паузы, часть запросов начинает падать с кодом 429, а это уже проблема на всю очередь заявок, а не на одну.
Из метрик, которые реально смотрю каждый день:
- Доля успешных выполнений workflow за сутки
- Среднее время ответа агента от запроса до финального сообщения
- Расход токенов в день в пересчёте на рубли
- Число повторных вызовов одного и того же инструмента подряд (признак зацикливания)
Разбор ошибок: типовые сбои ИИ-агентов и как их ловить
За практику накопился набор ошибок, которые повторяются от проекта к проекту почти в одном и том же виде.
| Ошибка | Причина | Что делаю |
|---|---|---|
| Таймаут внешнего API | СДЭК, T‑Bank или CRM ответили дольше обычного под нагрузкой | Ретрай с экспоненциальной задержкой, лимит в 3 попытки |
| Невалидный JSON от модели | Модель не попала в схему function calling на сложном запросе | Строгая валидация по JSON Schema и повторный запрос с уточнением |
| 429 Too Many Requests | Агент дёргает внешний сервис чаще лимита провайдера | Очередь запросов и троттлинг вместо параллельных вызовов |
| Зацикленный агент | Модель повторяет один и тот же tool call без прогресса | Жёсткий лимит шагов на диалог и обрыв цепочки с эскалацией на человека |
| Дублирующийся заказ | Нет идемпотентного ключа при повторном вебхуке об оплате | Проверка request_id в базе перед созданием заказа |
Отдельно про зацикливание: в агентных фреймворках это частая беда, когда модель получает ошибку от инструмента, интерпретирует её как «нужно попробовать снова с теми же параметрами» и повторяет вызов десятки раз, пока не кончится лимит шагов или бюджет токенов. Лечится жёстким max_iterations на уровне оркестратора, а не надеждой, что модель сама остановится.
Работа с ИИ-агентами в связке с n8n и Telegram-ботами
Типовая для меня схема: n8n оркестрирует вызовы к Claude API и внешним сервисам, aiogram-бот выступает интерфейсом для клиента, а Postgres хранит и диалоги, и логи инструментов в одной базе, чтобы можно было связать сообщение пользователя с конкретным вызовом СДЭК или платёжного шлюза. При падении любого шага в Error-ветке n8n уходит уведомление в отдельный служебный чат, а пользователь получает нейтральное сообщение вида «уточняю детали, отвечу через пару минут» вместо голого технического текста об ошибке.
Если такую связку строить с нуля, закладывать логирование и мониторинг стоит сразу в архитектуру, а не пристраивать потом. Обычно я беру такие проекты как разработку ИИ-интеграции на Claude API с изначальной схемой логов, алертов и лимитов на повторные вызовы, потому что переделывать это на живом проекте с реальными заказами заметно дороже.
Сколько стоит внедрение контроля и логирования
Цена зависит от того, строится агент с нуля или логирование и мониторинг добавляются к уже работающему решению.
| Задача | Цена |
|---|---|
| ИИ-интеграция (Claude API, RAG) с логами и мониторингом | от 50 000 ₽ |
| Автоматизация процесса в n8n с алертами на ошибки | от 25 000 ₽ |
| Telegram-бот на aiogram с логированием диалогов | от 30 000 ₽ |
| Парсинг и автоматизация на Python с журналом запусков | от 20 000 ₽ |
| Техподдержка и разбор инцидентов после запуска | от 15 000 ₽/мес |
Срок на базовую связку агент плюс логирование плюс алерты в Telegram обычно укладывается в 2-3 недели, если интеграций с внешними системами немного (одна CRM, один платёжный шлюз, одна служба доставки). Каждая дополнительная система увеличивает и срок, и объём тестов на дублирование запросов.
Частые вопросы
Сколько логов реально нужно хранить агенту в проде
Достаточно записей по каждому вызову инструмента с request_id, параметрами и результатом, а не полного текста всех промптов. Полные промпты я храню отдельно и с более коротким сроком хранения, потому что там чаще попадают персональные данные клиента.
Как понять, что агент завис в цикле, а не просто долго думает
Смотрю на количество повторных вызовов одного и того же инструмента с одинаковыми или почти одинаковыми параметрами подряд. Если за один диалог инструмент вызван больше 3-4 раз без изменения результата, это уже не «долго думает», а зацикливание, и оркестратор должен оборвать цепочку сам.
Можно ли обойтись без базы данных для логов, если проект небольшой
На старте можно писать логи в файл, но как только в цепочке появляется оплата или отправка заказа, я сразу переношу их в Postgres: без индекса по request_id найти конкретный инцидент среди тысяч строк в текстовом файле долго и неудобно.
Что делать, если агент регулярно упирается в лимит запросов у СДЭК или другого API
Ставлю очередь с троттлингом на стороне оркестратора вместо того, чтобы агент дёргал API напрямую в моменте. Это убирает всплески параллельных запросов и держит их в пределах лимита провайдера даже при большом потоке заявок.