ReAct Паттерн (Мышление + Действие)
Фундаментальный алгоритмический паттерн автономных агентов, который чередует шаги внутренних размышлений (Thought), выполнения внешних инструментов (Action) и анализа полученного результата (Observation).
1. Обзор концепции и системная проблема
До появления концепции ReAct (опубликованной исследователями Принстонского университета и Google Research в 2022 году) в сообществе существовал раскол между двумя подходами к автоматизации LLM:
- Chain-of-Thought (Только мышление): Модель пишет длинные цепочки размышлений, но не имеет доступа к внешнему миру. В результате логика размышлений выглядит убедительно, однако основывается на вымышленных фактах и устаревших данных.
- Act-Only (Только действие): Модель вызывает API или выполняет bash-команды без промежуточного самоанализа. Это приводит к хаотичным повторам, слепому перебору параметров и неспособности решить даже простые многократные задачи.
Паттерн ReAct (Reasoning + Acting) объединил эти две силы в единый итеративный цикл: модель сначала вербализирует свои мысли и планирует следующий шаг, затем выполняет целевое действие, анализирует фактический результат окружающей среды (Observation) и только после этого принимает следующее решение.
2. Архитектурная таксономия и ментальная модель
Классический шаг цикла ReAct состоит из трех последовательных состояний:
- 1. Thought (Внутреннее размышление): Агент анализирует текущее состояние задачи, выдвигает гипотезу и формулирует конкретный намерение: «Мне нужно проверить, запущен ли сервис Redis на порту 6379, прежде чем запускать тесты». Этот этап критически снижает вероятность ошибок в аргументах инструментов.
- 2. Action (Вызов действия / инструмента):
Агент формирует конкретное действие с жесткими параметрами: название функции и валидный JSON-объект (например,
execute_bash(command="systemctl status redis")). - 3. Observation (Наблюдение окружающей среды): Внешний рантайм перехватывает действие, выполняет его на сервере или в базе данных и возвращает сырой текстовый вывод или код ошибки обратно в контекст агента.
- 4. Finish / Final Answer (Завершительное состояние): Когда агент видит в последнем Observation, что цель достигнута, он останавливает цикл и формирует итоговый ответ пользователю.
3. Технический пайплайн и внутренняя механика
Жизненный цикл работы ReAct-агента в программной среде:
- Context & Scratchpad Injection (Подготовка промпта): В системный промпт встраиваются правила взаимодействия, описания доступных инструментов и история предыдущих итераций текущей сессии (Scratchpad).
- Inference with Tool Delimiter (Генерация размышления и намерения):
LLM генерирует токены секции
Thought. Как только модель доходит до вызова инструмента, генерация приостанавливается клиентом, а аргументы вызова валидируются. - Execution & Observation Feedback (Выполнение в среде):
Оркестратор передает команду соответствующей подсистеме (локальному терминалу, базе данных или браузеру), считывает вывод, ограничивает его длину для экономии токенов и добавляет сообщение
Observation: ...к контексту. - Loop Progression & Termination Check (Проверка выхода):
Если агент достиг цели или счетчика
max_iterations = 10, цикл прерывается. В противном случае начинается следующая итерация с новым блокомThought.
4. Практические инженерные сценарии в продакшене
01. Интерактивная диагностика и ремонт серверной инфраструктуры
- Thought: Сервис возвращает ошибку 502. Сначала проверю логи Nginx за последние 5 минут.
- Action:
read_logs(service="nginx", lines=20) - Observation:
connect() failed (111: Connection refused) while connecting to upstream 127.0.0.1:3000 - Thought: Апстрим на порту 3000 упал. Нужно проверить статус процесса Node.js через PM2.
- Action:
execute_cmd(command="pm2 status") - Observation:
app-server: errored (out of memory) - Thought: Сервис упал из-за нехватки памяти. Перезагружу его с большим лимитом heap.
02. Итеративный поиск в документации и API
Агент пытается вызвать внешний сервис Stripe. На первом шаге он получает ошибку invalid_api_key. Через блок Thought агент вспоминает, что для тестового режима нужен префикс sk_test_, подтягивает правильную переменную окружения и со второй попытки успешно создает платежное намерение.
03. Пошаговая отладка юнит-тестов
Кодовый агент видит падение теста из-за расхождения ожидаемого значения. Он выдвигает гипотезу, вносит минимальное изменение в одну строку, перезапускает тест, видит зеленый результат и только тогда отчитывается о выполнении задачи.
5. Подводные камни, типовые ошибки и безопасность
- Зацикливание на ложной гипотезе (Self-Reinforcing Delusion): Если на первом шаге модель сделала ошибочный вывод, она склонна интерпретировать все последующие Observation в пользу своей ошибки. Решение: обязательное добавление шага критики (Reflection) после 3 неудачных действий подряд.
- Раздувание контекста от сырых наблюдений: Команда
cat huge_file.jsonвозвращает 50 000 токенов мусора, вытесняя системный промпт. Всегда ограничивайте размер возвращаемого Observation в рантайме (например, не более 2000 символов). - Вызов несуществующих инструментов (Action Hallucination): Модель пытается вызвать инструмент, которого нет в списке. Решение: использование нативного API Tool Calling вместо сырого парсинга текста.
FAQ: ReAct Паттерн (Мышление + Действие)
Связанные термины
AI-агенты (Autonomous Agents)
Программные системы на базе LLM, способные самостоятельно воспринимать состояние окружающей среды, декомпозировать сложные цели, вызывать внешние инструменты и итеративно исправлять собственные ошибки.
Tool Calling (Function Calling)
Низкоуровневый механизм языковых моделей, позволяющий им надежно генерировать валидированные параметры в формате JSON для выполнения функций во внешней программной среде.
Plan-and-Solve Prompting
Двухступенчатая агентская архитектура, разделяющая стратегическую декомпозицию задачи на глобальный план и его последовательное тактическое выполнение с динамическим перепланированием.
Цепочка размышлений (Chain of Thought - CoT)
Методология побуждения языковой модели генерировать последовательные промежуточные шаги размышлений перед формированием финального ответа, что конвертирует дополнительные токены (Test-Time Compute) в качество и точность результата.