COMRAD404 / GLOSSARY

ReAct (Reasoning + Acting)

ReAct (Reasoning + Acting)

ReAct (Reasoning + Acting) — паттерн агентного взаимодействия, где модель чередует шаги рассуждения с вызовами инструментов и чтением наблюдений. Ниже — как он устроен, где применяется и чем отличается от фреймворковых API.

TL;DR

ReAct — это паттерн агентного взаимодействия, где модель чередует промежуточное рассуждение с действиями во внешних инструментах и использует их результаты как новые наблюдения.

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
  ↓
Рассуждение модели
  ↓
Действие: вызов инструмента / обращение к среде
  ↓
Наблюдение: результат инструмента или среды
  ↓
Новое рассуждение с учётом наблюдения
  ↓
Следующее действие или финальный ответ
  1. Постановка задачи. Пользователь задаёт вопрос или цель.
  2. Подсказка с траекториями. В prompt включаются примеры, где уже показана последовательность «рассуждение → действие → наблюдение».
  3. Генерация шага рассуждения. Модель формирует промежуточный вывод о том, чего ей не хватает или что делать дальше.
  4. Выбор действия. Следом модель инициирует действие: например, запрос к поиску, вызов функции или обращение к окружению.
  5. Получение наблюдения. Внешний инструмент возвращает результат, и этот результат становится новой частью контекста.
  6. Повтор цикла. Модель уточняет план и либо вызывает следующий инструмент, либо выдаёт итоговый ответ.

Именно чередование 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 — это модель или способ построения агента?

Это способ организации агентного цикла. В первичном источнике 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 в такой схеме может быть одним из действий, после которого агент получает наблюдение и продолжает рассуждение.

Источники

SOURCES

Вопросы и ответы

FAQ
ReAct — это модель или способ построения агента?

Это способ организации агентного цикла. В первичном источнике ReAct описан как метод, который чередует reasoning traces и actions; конкретная модель и фреймворк могут быть разными.

Нужен ли для ReAct отдельный сервис или отдельная подписка?

Нет отдельного «сервиса ReAct» не указано. Затраты обычно возникают из-за базовой 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 в такой схеме может быть одним из действий, после которого агент получает наблюдение и продолжает рассуждение.

Читайте также

LINKS