Reasoning Lock: баг, заставлявший ИИ‑агента тратить токены и молчать
В продакшн‑среде обнаружен баг Reasoning Lock: агент генерировал пустой ответ, расходуя токены. Разобраны причины, выпущено исправление, счетчик пустых ответов чист уже 7 дней.
Что произошло?
В одной из продакшн‑систем, использующих ИИ‑агента для автоматизации диалогов, был замечен странный эффект: запросы завершались со статусом «успех», но клиент получал пустую строку. При этом система продолжала расходовать токены на генерацию, что приводило к росту расходов без видимого результата.
Симптомы и первые догадки
- Статус выполнения
successв логах. - Пустой ответ (
""). - Нарастающий счетчик использованных токенов без полезного вывода.
- Пользователи не получали ожидаемого контента, но платили за запросы.
Расследование «по этажам»
Автор статьи сначала описал проблему в предыдущем посте, а затем провёл детальный аудит:
- Проверка пайплайна – выяснилось, что после генерации ответа происходит дополнительный шаг post‑processing, где проверяется наличие текста.
- Тайм‑ауты – в случае, если генерация заняла более 5 секунд, система переходила к следующему этапу, но не сохраняла результат.
- Блокировка рассуждения – в некоторых сценариях LLM «застревал» в цепочке рассуждений, не достигая финального вывода, но всё равно расходовал токены.
Механика бага – Reasoning Lock
Баг получил название Reasoning Lock. Его ядром стала ошибка в условии, которое должно было проверять, что сгенерированный текст не пуст. Вместо строгой проверки if len(text) > 0 использовалось if text is not None, что пропускало случаи, когда text == "". В результате система считала ответ валидным и отмечала запрос как успешный, хотя фактически ничего не вернуло.
Как «лечили» проблему?
- Обновление воркфлоу: заменили условие проверки на
if text.strip():. - Добавили мониторинг: введён отдельный метрик‑счётчик пустых ответов, который оповещает в реальном времени.
- Тестовый набор: создали набор регрессионных тестов, имитирующих сценарии с потенциальным Reasoning Lock.
Итоги
После деплоя исправления счётчик пустых ответов не фиксирует новых инцидентов уже 7 дней. Токен‑расходы вернулись к ожидаемому уровню, а пользователи снова получают содержательные ответы.
Для разработчиков AI‑агентов это напоминание о необходимости тщательно проверять граничные случаи: пустой вывод может стоить дорого в токенах. Внедрение метрик пустых ответов и регрессионных тестов поможет избежать подобных потерь в проде.


