Reasoning Lock: почему ИИ-агент в проде тратил токены и отдавал пустую строку?
Разбираем скрытый баг: ИИ-агент в проде заказчика тратил токены, генерация закрывалась со статусом «успех», а клиенту уезжала пустая строка. Причина найдена, правки встали в воркфлоу, счётчик пустых ответов уже семь дней остаётся чистым. Баг получил имя Reasoning Lock.
Агент работает на self-hosted n8n: по ночам принимает заявки в Instagram Direct, ведёт диалог, собирает анкету и создаёт или обновляет сделку в amoCRM. Стек: n8n + Redis + LangChain. Основная LLM: DeepSeek V4 Pro через OpenRouter, резервная недавно заменена на Qwen3.8 Flash.
Два периода отказов
С конца июня отказы шли двумя периодами, и разница между ними объясняет суть проблемы. Первый период пришёлся на тесты и запуск. Его природа инфраструктурная: ограничения Meta, потери вебхуков, окно ответов, двойные доставки. Это закрыли мгновенным 200 OK, буфером на Redis и дебаунсом.
Второй период длился последние два месяца и был связан с промптом. Правки от заказчика добавлялись в системный промпт под живую бизнес-логику: инструкция по пересылке оплаты пользователем, отдельные сценарии ответов для VIP-клиентов, уточнения формулировок после каждого спорного диалога. Каждая правка по отдельности правильная и рабочая, но суммарно промпт разросся примерно до 6.4k токенов, а плотность запретов («КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО», «Отправь СТРОГО этот текст») стала максимальной за всю жизнь системы.

