Как не наплодить дублей: разделяем рассуждения LLM и исполнение кода в продакшне
Когда языковая модель не просто генерирует текст, а вызывает внешние API или выполняет действия, стандартный retry после timeout может привести к дублированию операций или потере консистентности. Проблема в том, что LLM — вероятностная система, и повторный запрос может дать другой план действий, а не просто повторить предыдущий.
Автор предлагает архитектурный паттерн: разделить этап «рассуждения» (reasoning) и этап «исполнения» (side effects). На первом этапе модель только строит план, не трогая внешние системы. На втором — план выполняется с контролем идемпотентности, повторными попытками и валидацией результата. Если что-то пошло не так, можно либо повторить исполнение, либо запросить уточнение у модели, либо передать управление человеку.
Практические рекомендации: использовать идемпотентные ключи для каждого действия, логировать все вызовы, внедрять механизм компенсации (rollback) для частично выполненных операций. Статья будет полезна инженерам, которые строят production-агентов на LLM и сталкиваются с проблемами надёжности.