ReAct Prompting

Материал из Systems analysis wiki
Перейти к навигации Перейти к поиску

ReAct (сокр. от Reason + Act, в переводе с англ. — «Рассуждай и Действуй») — это парадигма проектирования запросов (промптинга) для больших языковых моделей (LLM), позволяющая им решать сложные задачи путём чередования вербальных рассуждений (мыслей) и действий, взаимодействующих с внешней средой[1]. Метод был предложен в 2022 году исследователями из Google Research и Принстонского университета и стал фундаментальным подходом в развитии интеллектуальных агентов.

Ключевая инновация ReAct заключается в объединении логических рассуждений, характерных для техник типа Chain-of-Thought (CoT), с выполнением внешних действий, таких как поиск информации или взаимодействие с программными интерфейсами (API). Это позволяет модели динамически корректировать свой план, проверять факты и преодолевать ограничения собственных, зачастую устаревших или неполных знаний[2].

Предпосылки и история создания

До появления ReAct существовали два основных, но разрозненных подхода к использованию LLM для решения сложных задач:

  • Цепочка рассуждений (Chain-of-Thought, CoT): Модель генерирует пошаговые логические рассуждения для решения задачи, но делает это в «информационном вакууме», опираясь исключительно на свои внутренние знания. Это часто приводит к фактическим ошибкам и «галлюцинациям»[1].
  • Планирование действий (Act-Only): Модель генерирует последовательность действий для взаимодействия с внешней средой (например, в текстовых играх), но без явного высокоуровневого планирования. Такие системы плохо справляются с ошибками и не могут адаптировать свою стратегию при столкновении с непредвиденными обстоятельствами.

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

Механизм работы: цикл «Мысль — Действие — Наблюдение»

ReAct работает в рамках итеративного цикла, который включает три ключевых компонента. Модель последовательно генерирует траекторию, состоящую из шагов Thought, Action и Observation.

Пример структуры промпта:

Вопрос: Какой столицей является город, в котором родился изобретатель, известный благодаря переменному току?

Thought 1: Мне нужно выяснить, кто изобрел переменный ток. Затем найти место его рождения и проверить, является ли этот город столицей.

Action 1: Search[изобретатель переменного тока]

Observation 1: Переменный ток (AC) был разработан и продвинут Николой Теслой.

Thought 2: Теперь мне нужно узнать, где родился Никола Тесла.

Action 2: Search[место рождения Николы Теслы]

Observation 2: Никола Тесла родился в селе Смилян, Австрийская империя (современная Хорватия).

Thought 3: Смилян не является столицей. Таким образом, у вопроса нет однозначного ответа в такой формулировке. Однако Тесла долго жил и работал в США. Возможно, имеется в виду столица страны, где он сделал свои главные открытия. Это более сложный вопрос. Я должен констатировать факт, основанный на месте рождения. Город его рождения не является столицей.

Final Answer: Изобретатель, связанный с переменным током, Никола Тесла, родился в Смиляне (Хорватия), который не является столицей.

Мысль (Thought)

Модель генерирует внутреннее рассуждение, в котором она анализирует задачу, декомпозирует ее на подзадачи, формирует или корректирует план действий и оценивает текущее состояние. Этот шаг не влияет на внешнюю среду, но служит для внутреннего планирования.

Действие (Action)

На основе своего рассуждения модель выполняет внешнее действие, обращаясь к одному из доступных инструментов. Примеры действий:

  • Search [запрос] — для поиска информации в базе знаний (например, Википедии).
  • Click [элемент] — для навигации по веб-странице.
  • API_call [параметры] — для вызова внешнего API.

Наблюдение (Observation)

Система или внешний инструмент выполняет действие и возвращает результат (наблюдение). Это может быть фрагмент текста, ответ API или сообщение об ошибке. Модель использует это наблюдение для формирования следующей мысли, замыкая цикл обратной связи[2].

Экспериментальные результаты и эффективность

Авторы ReAct протестировали метод на широком спектре задач, продемонстрировав его превосходство над CoT и Act-Only подходами.

Результаты ReAct по сравнению с базовыми методами на ключевых бенчмарках[1]
Бенчмарк Задача ReAct (успех/точность) Chain-of-Thought (успех/точность) Act-Only (успех/точность)
FEVER Проверка фактов 87.6% 82.8% 70.1%
HotpotQA Вопросы с несколькими переходами 31.8% 36.3% 17.0%
ALFWorld Текстовая игра (планирование) 71% 10% 13%
WebShop Веб-навигация 40% - 30.1%
  • В задачах, требующих проверки фактов (FEVER), ReAct значительно превосходит CoT, так как может верифицировать информацию.
  • В задачах на интерактивное планирование (ALFWorld, WebShop), ReAct демонстрирует огромное преимущество, так как может адаптироваться к меняющейся среде.
  • В задачах на чистое рассуждение (HotpotQA), CoT может показывать сопоставимые или даже лучшие результаты. Однако гибридный подход ReAct+CoT показал наилучшую производительность, достигнув 35% в HotpotQA[1].

Критика и ограничения

Несмотря на свою эффективность, ReAct имеет ряд ограничений и уязвимостей.

  • «Хрупкость» (Brittleness): Позднейшие исследования показали, что успех ReAct может быть связан не столько с подлинной синергией рассуждения и действия, сколько с синтаксическим сходством между примерами в промпте и текущей задачей. Модель может следовать шаблону `Thought-Action-Observation`, не в полной мере понимая семантику рассуждений[3].
  • Вычислительные издержки: Каждый цикл ReAct требует как минимум одного вызова LLM и одного обращения к внешнему инструменту, что делает его медленным и дорогостоящим по сравнению со стандартным промптингом.
  • Зависимость от инструментов: Эффективность агента напрямую зависит от качества и надежности доступных инструментов. Некорректный или зашумленный ответ от API может направить рассуждения модели по ложному пути.

Значение и дальнейшее развитие

ReAct стал важной вехой в развитии ИИ, ознаменовав переход от генеративных систем к агентным системам. Он заложил концептуальный и практический фундамент для большинства современных фреймворков для создания агентов, таких как:

  • LangChain
  • LlamaIndex
  • AutoGen

Идеи ReAct послужили отправной точкой для более сложных архитектур рассуждений, таких как Reflexion (добавляет цикл саморефлексии после неудач) и Tree of Thoughts (ToT) (исследует несколько путей рассуждения параллельно).

Ссылки

Литература

  • Yao, S. et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. arXiv:2210.03629.
  • Yao, S. et al. (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models. arXiv:2305.10601.
  • Shinn, N. et al. (2023). Reflexion: Language Agents with Verbal Reinforcement Learning. arXiv:2303.11366.
  • Verma, V. et al. (2024). On the Brittle Foundations of ReAct Prompting for Agentic Large Language Models. arXiv:2405.13966.
  • Yao, S. et al. (2022). WebShop: Towards Scalable Real-World Web Interaction with Grounded Language Agents. arXiv:2207.01206.
  • Shridhar, M. et al. (2020). ALFWorld: Aligning Text and Embodied Environments for Interactive Learning. arXiv:2010.03768.
  • Qin, L. et al. (2023). AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Collaboration. arXiv:2308.08155.
  • Thorne, J. et al. (2018). FEVER: A Large-Scale Dataset for Fact Extraction and Verification. arXiv:1803.05355.
  • Yang, Z. et al. (2018). HotpotQA: A Dataset for Diverse, Explainable Multi-hop Question Answering. arXiv:1809.09600.

Примечания

  1. 1,0 1,1 1,2 1,3 Yao, S., Zhao, J., Yu, D., et al. (2022). «ReAct: Synergizing Reasoning and Acting in Language Models». arXiv preprint arXiv:2210.03629. [1]
  2. 2,0 2,1 «ReAct: Synergizing Reasoning and Acting in Language Models». Google Research Blog. [2]
  3. Verma, V., et al. (2024). «On the Brittle Foundations of ReAct Prompting for Agentic Large Language Models». arXiv preprint arXiv:2405.13966. [3]