ReAct (Reasoning + Acting) — это паттерн, в котором языковая модель чередует шаги рассуждения с действиями во внешней среде: вызовами инструментов, поиском и чтением наблюдений. Вместо попытки ответить «за один проход» модель по ходу решения получает новые данные и на их основе продолжает вывод.
В оригинальном описании ReAct подаётся как метод, который объединяет reasoning traces и task-specific actions, чтобы использовать внешние источники или окружения и тем самым повышать интерпретируемость и качество решения. Для практики важно другое: ReAct — это не отдельная модель и не единый стандарт API, а исследовательский паттерн, который разные фреймворки реализуют по-разному.
Английский термин: ReAct (Reasoning + Acting). В текущих экосистемах вы также встретите названия ReActAgent, create_agent, исторические create_react_agent и createReactAgent — но это уже конкретные классы и helper-функции, а не сам термин ReAct.
Простыми словами
Грубо говоря, ReAct — это стиль работы агента «подумай → сделай шаг → посмотри на результат → подумай ещё раз». Если обычный ответ модели можно представить как разовый монолог, то ReAct ближе к диалогу модели с инструментами.
Простой образ: вы не отвечаете на сложный вопрос сразу, а сначала решаете, что нужно проверить, открываете поиск, читаете найденное, уточняете следующий шаг и только потом формулируете итог. ReAct формализует именно такой цикл.
Как это работает
Канонический ReAct prompt строится из few-shot trajectories: примеров, где показаны reasoning traces, actions и observations. Модель видит не только правильный ответ, но и структуру промежуточных шагов.
Схема цикла
Задача пользователя
↓
Few-shot траектории в prompt
↓
Рассуждение модели
↓
Действие: вызов инструмента / обращение к среде
↓
Наблюдение: результат инструмента или среды
↓
Новое рассуждение с учётом наблюдения
↓
Следующее действие или финальный ответ
- Постановка задачи. Пользователь задаёт вопрос или цель.
- Подсказка с траекториями. В prompt включаются примеры, где уже показана последовательность «рассуждение → действие → наблюдение».
- Генерация шага рассуждения. Модель формирует промежуточный вывод о том, чего ей не хватает или что делать дальше.
- Выбор действия. Следом модель инициирует действие: например, запрос к поиску, вызов функции или обращение к окружению.
- Получение наблюдения. Внешний инструмент возвращает результат, и этот результат становится новой частью контекста.
- Повтор цикла. Модель уточняет план и либо вызывает следующий инструмент, либо выдаёт итоговый ответ.
Именно чередование reasoning и acting отличает ReAct от более «монолитного» вывода. В текущей документации LangChain агенты описаны именно как цикл, где чередуются reasoning, tool calls и observations.
Где применяется
- Многошаговые вопросы и фактчекинг. Оригинальный публичный репозиторий ReAct включает эксперименты и ноутбуки для HotpotQA и FEVER — это задачи, где одного внутреннего знания модели часто недостаточно.
- Интерактивные окружения. В том же репозитории есть примеры для ALFWorld: агент должен не просто ответить текстом, а делать последовательные действия в среде.
- Веб-задачи. Репозиторий также содержит сценарии для WebShop, где важна цепочка решений и чтение результатов каждого шага.
- Современные агентные фреймворки. В LangChain текущие агенты описываются как ReAct-style loop, а в LlamaIndex в текущем коде присутствует
ReActAgent. Если вы строите агента поверх внешнего поиска, полезно также понимать смежные подходы вроде RAG (Retrieval-Augmented Generation) и Corrective RAG (CRAG): retrieval может быть одним из действий в цикле ReAct, но сам ReAct описывает именно логику «рассуждение ↔ действие ↔ наблюдение».
Практический пример
Ниже — упрощённый сценарий, который показывает механику ReAct без привязки к конкретной библиотеке. Названия инструментов условные: в каждом фреймворке они будут отличаться.
Вопрос: Кто руководил компанией, которая выпустила продукт X, в год его запуска?
Мысль: Сначала нужно понять, какая компания выпустила продукт X.
Действие: Tool[найти производителя продукта X]
Наблюдение: Производитель — компания Y.
Мысль: Теперь нужно узнать, кто руководил компанией Y в нужный год.
Действие: Tool[найти руководителя компании Y в год Z]
Наблюдение: В год Z руководителем был N.
Мысль: Данных достаточно для ответа.
Ответ: В год запуска продукт X был выпущен компанией Y, которой тогда руководил N.
Что здесь важно на практике:
- модель не пытается «догадаться» весь ответ сразу;
- каждый внешний результат становится наблюдением для следующего шага;
- качество зависит не только от LLM, но и от доступных инструментов, их прав доступа и актуальности данных.
Если вы реализуете этот цикл в LangChain, текущая рекомендация — смотреть на create_agent, а не на старое имя create_react_agent. Если вы работаете с LlamaIndex, текущий код проекта указывает на использование ReActAgent или FunctionAgent из workflow-модуля; старые пути вида ChatMode.REACT и OPENAI отмечены как deprecated и removed.
Чем отличается от…
| Термин | Что это | Ключевое отличие |
|---|---|---|
| Агент | Более широкий объект или runtime во фреймворке | По текущей документации LangChain агент может следовать ReAct-паттерну, но сам термин «агент» шире одного способа организации цикла. |
create_react_agent / createAgent / create_agent |
Имена helper API в LangChain | Это не сам метод ReAct, а способ создать агента в конкретной версии фреймворка. Старые ReAct-имена в текущих гайдах заменены на create_agent и createAgent. |
ReActAgent |
Конкретный класс в текущем codebase LlamaIndex | Это реализация паттерна во фреймворке, а не универсальное определение ReAct. |
Ограничения и заблуждения
- Заблуждение: ReAct — это отдельная модель. На самом деле это метод/pattern. Он может быть реализован поверх разных LLM и агентных фреймворков.
- Заблуждение: если в библиотеке есть имя ReAct, поведение стандартизовано. Нет: API и даже сами названия меняются. В LangChain старые helper-имена были заменены, а в LlamaIndex часть старых режимов убрана.
- Ограничение: у ReAct нет собственной «цены». Отдельного прайсинга у метода нет; расходы определяются базовой моделью, поиском и другими внешними инструментами.
- Ограничение: качество зависит от среды. Если инструмент возвращает слабые или неполные наблюдения, цикл ReAct будет строиться на плохих данных.
- Ограничение: документация может отставать от кода. Для LlamaIndex в source pack прямо отмечен version drift; поэтому при проверке текущего статуса надёжнее смотреть репозиторий и актуальные файлы кода.
- Не путайте ReAct с React-контекстом фронтенда. Если вам нужен инструмент для генерации интерфейсов и фронтенд-кода для React и Next.js, это другой сюжет — см. v0 (Vercel): генерация интерфейсов и фронтенд-кода для React и Next.js.
Редакционная оговорка на 2026-08-16: ниже описан ReAct как исследовательский паттерн и как он отражён в текущих документах LangChain и коде LlamaIndex. Конкретные имена классов, import path и helper-функции нужно сверять с вашим стеком и его текущей версией.
Практический вердикт: если вам нужен агент, который не только отвечает, но и по ходу решения ходит во внешние источники, ReAct стоит понимать прежде всего как дизайн цикла. Для внедрения выбирайте не «бренд ReAct», а актуальный API конкретного фреймворка и набор инструментов, которые этот цикл будут кормить наблюдениями.
Связанные термины и инструменты
- RAG (Retrieval-Augmented Generation) — полезно, если вы строите агента поверх внешнего поиска.
- Corrective RAG (CRAG) — смежный подход, если важно проверять качество извлечённых данных.
- v0 (Vercel) — пригодится, если вы пришли по запросу про React/Next.js и искали не агентный паттерн ReAct, а фронтенд-инструмент.
Источники
- ReAct: Synergizing Reasoning and Acting in Language Models
- arXiv: ReAct: Synergizing Reasoning and Acting in Language Models
- GitHub – ysymyth/ReAct
- Agents – Docs by LangChain
- LangChain v1 migration guide – Docs by LangChain
- What’s new in LangChain v1 – Docs by LangChain
- GitHub – langchain-ai/react-agent
- GitHub – run-llama/llama_index (base.py)
- GitHub – run-llama/llama_index (agent __init__.py)
Вопросы и ответы
ReAct — это модель или способ построения агента?
Это способ организации агентного цикла. В первичном источнике ReAct описан как метод, который чередует reasoning traces и actions; конкретная модель и фреймворк могут быть разными.
Нужен ли для ReAct отдельный сервис или отдельная подписка?
Нет отдельного «сервиса ReAct» в source pack не указано. Затраты обычно возникают из-за базовой LLM, поиска и других внешних инструментов, которые вы подключаете к агенту.
Актуален ли сегодня helper create_react_agent?
В текущем migration guide LangChain указано, что старое имя create_react_agent было заменено на create_agent, а путь импорта тоже изменился. В JavaScript-ветке текущие release notes говорят о переходе на createAgent.
Что смотреть в LlamaIndex, если старые гайды расходятся между собой?
В source pack более надёжным источником назван текущий код репозитория: там фигурируют ReActAgent и FunctionAgent из workflow-модуля, а старые пути ChatMode.REACT и OPENAI помечены как deprecated и removed.
Можно ли сочетать ReAct с внешним поиском или retrieval?
Да. В каноническом описании ReAct прямо говорится об использовании внешних источников или окружений; retrieval в такой схеме может быть одним из действий, после которого агент получает наблюдение и продолжает рассуждение.