← Back to notes

Основы LLM-агентов: CoT,
ReAct, Toolformer, Reflexion


Современный LLM-агент — это цикл: модель рассуждает, вызывает инструменты, наблюдает результат, корректирует себя. Четыре статьи 2022–2023 годов описывают ровно четыре части этого цикла, и каждая следующая надстраивается над предыдущей. Всё, что сегодня называют агентом — tool use в API, agentic-фреймворки, самокорректирующиеся кодогенераторы — комбинация этих примитивов.

Заметка — сводка по оригинальным работам: Chain-of-Thought, ReAct, Toolformer, Reflexion. Все числа взяты из статей. Раздел «Что осталось актуальным» — оценка, а не утверждение авторов.

Четыре примитива

СтатьяГодВопросПримитив
Chain-of-Thought2022Как решать многошаговые задачи?Промежуточные шаги в выводе
ReAct2022Как связать рассуждение с внешним миром?Цикл мысль → действие → наблюдение
Toolformer2023Как модель сама научится звать инструменты?Вызов API как токен в тексте
Reflexion2023Как учиться на провале без дообучения?Текстовая рефлексия в памяти

Логика связи. CoT показал, что рассуждение — это формат вывода, а не свойство весов. ReAct показал, что чистое рассуждение галлюцинирует, потому что не заземлено, и вставил в цепочку действия. Toolformer снял ограничение few-shot промпта: модель учит вызов инструмента из данных, которые сгенерировала себе сама. Reflexion добавил второй контур — между попытками, а не внутри одной.

Общее для всех четырёх: ни одна не меняет архитектуру модели. CoT и ReAct — чистый промптинг, ноль градиентных шагов. Toolformer дообучает, но на самосгенерированных данных. Reflexion обучается через текст в контексте. Главная новость 2022–2023: способности уже лежат в предобученной модели, вопрос в том, как их вызвать.


Chain-of-Thought: рассуждение как формат вывода

Wei et al., Google Brain, NeurIPS 2022

В few-shot примерах вместо пар «вопрос → ответ» даются тройки «вопрос → цепочка рассуждений → ответ». Дообучения нет. Восьми примеров хватает.

Q: У Роджера 5 теннисных мячей. Он покупает ещё 2 банки, в каждой по 3 мяча.
   Сколько мячей у него теперь?

A: Роджер начал с 5 мячей. 2 банки по 3 мяча  это 6 мячей.
   5 + 6 = 11. Ответ: 11.

Без цепочки та же модель отвечает «27».

Три факта, ради которых стоит помнить статью

CoT — эмерджентная способность масштаба. На моделях меньше ~100B параметров CoT не помогает, а часто вредит: малые модели генерируют беглые, но нелогичные цепочки, и результат хуже стандартного промптинга. Кривая масштабирования у стандартного промптинга почти плоская, у CoT — резко растущая.

Прирост тем больше, чем сложнее задача. На GSM8K (математические текстовые задачи) PaLM 540B поднялся с 17.9% до 56.9% — более чем вдвое. На одношаговых задачах из MAWPS прирост около нуля или отрицательный.

Работает именно цепочка, а не «лишние вычисления». Три абляции:

  • Только уравнение (вывести формулу вместо рассуждения) — на GSM8K почти не помогает.
  • Только переменные вычисления (вывести последовательность точек ... той же длины, что и уравнение) — результат равен базовой линии. Дело не в дополнительных токенах как таковых.
  • Цепочка после ответа — результат равен базовой линии. Дело не в «активации знаний», а именно в последовательности рассуждения, ведущей к ответу.

Ограничения

Авторы прямо оставляют открытым вопрос, рассуждает ли сеть на самом деле. Неверная цепочка может случайно дать верный ответ. Разбор 50 ошибочных выходов LaMDA 137B на GSM8K: 46% цепочек почти верны (ошибка калькулятора 8%, маппинга символов 16%, пропущен один шаг 22%), 54% сломаны семантически.

Отдельно: логика цепочки часто верна, а арифметика — нет. Внешний калькулятор поверх сгенерированных уравнений поднимает PaLM 540B с 56.9% до 58.6%. Прямой мостик к Toolformer.


ReAct: рассуждение, заземлённое в действии

Yao et al., Princeton + Google Brain, ICLR 2023

Формально агент действует по политике π(a_t | c_t), где контекст c_t = (o_1, a_1, , o_t). ReAct расширяет пространство действий до Â = A L, где L — пространство языка. Действие из L называется мыслью (thought). Мысль ничего не меняет в среде и не порождает наблюдения — она обновляет контекст: c_{t+1} = (c_t, â_t).

Thought 1: Нужно найти Apple Remote и программу, для которой он создан.
Act 1:     Search[Apple Remote]
Obs 1:     Apple Remote спроектирован для управления Front Row media center.

Thought 2: Теперь нужно найти другие устройства, управляющие Front Row.
Act 2:     Search[Front Row]
Obs 2:     Не найдено. Похожие: ...

Thought 3: Надо искать "Front Row (software)".
Act 3:     Search[Front Row (software)]
Obs 3:     Управляется Apple Remote и функциональными клавишами клавиатуры.

Act 4:     Finish[keyboard function keys]

На том же вопросе CoT галлюцинирует «iPhone, iPad, iPod Touch». Агент без мыслей (Act-only) не может сформулировать финальное действие.

Деталь дизайна: в задачах, где рассуждение критично (QA, проверка фактов), мысли и действия чередуются плотно. В задачах принятия решений мысли появляются разрежённо — модель сама решает, когда подумать.

Главный результат — таблица ошибок, а не точности

Авторы вручную разметили по 50 верных и 50 неверных траекторий у ReAct и CoT на HotpotQA:

КатегорияReActCoT
True positive (верные рассуждение и факты)94%86%
False positive (галлюцинированное рассуждение)6%14%
Ошибка: галлюцинация0%56%
Ошибка: reasoning error47%16%
Ошибка: неинформативный поиск23%

Читается так: CoT галлюцинирует, ReAct зацикливается. Доступ к внешним фактам полностью убирает галлюцинации, но жёсткая структура «мысль-действие-наблюдение» снижает гибкость рассуждения, и главной ошибкой становится повторение уже сделанных шагов. Авторы связывают зацикливание с жадным декодированием и предполагают, что beam search помог бы.

Отсюда практический вывод, который авторы реализовали: комбинировать. Если ReAct не дал ответа за N шагов (7 для HotpotQA, 5 для Fever) — откатиться на CoT-SC. Если голосование CoT-SC не набрало большинства — откатиться на ReAct.

Где ReAct выигрывает крупно

На интерактивных задачах, а не на QA.

БенчмаркМетрикаBaselineReAct
HotpotQAEMCoT 29.427.4 (комбинация → 35.1)
FeverAccuracyCoT 56.360.9 (комбинация → 64.6)
ALFWorldSuccess rateBUTLER 37%, Act 45%71%
WebShopSuccess rateIL+RL 28.7%40.0% (человек 59.6%)

BUTLER — imitation learning агент, обученный на 10⁵ экспертных траекторий на тип задачи. ReAct использовал 2 аннотированные траектории на тип. Даже худший прогон ReAct (48%) бьёт лучшие прогоны обоих конкурентов.

Абляция: свобода формы мысли — рабочая часть

ReAct-IM имитирует Inner Monologue: мысли ограничены декомпозицией цели и отслеживанием подцели. На ALFWorld это даёт 53% против 71% у полного ReAct. Без свободных мыслей агент не понимает, когда подцель завершена, и не может обратиться к внутренним знаниям предобучения, чтобы догадаться, где лежит объект.

Fine-tuning переворачивает картину

Результат, который часто упускают. При few-shot промптинге ReAct — худший из четырёх методов на малых моделях. При дообучении (3000 бутстрапнутых траекторий) ReAct становится лучшим: PaLM-8B с ReAct обходит все промпченные PaLM-62B, а PaLM-62B с ReAct обходит все промпченные PaLM-540B.

Причина: дообучение на Standard/CoT учит модель запоминать (возможно, галлюцинированные) факты, а дообучение на ReAct/Act — обобщаемому навыку доступа к информации. Это предсказание того, что случилось дальше: агентность выгоднее вшивать в веса, чем держать в промпте.


Toolformer: инструмент как выученный навык

Schick et al., Meta AI, 2023

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

Два требования авторов: обучение самоконтролируемое (self-supervised), и модель не теряет общности — сама решает, когда и как звать инструмент.

Метод: три шага

Вызов представляется токенами прямо в тексте: [QA(Что такое X?) ответ].

Шаг 1. Сэмплирование. По рукописному промпту модель размечает корпус потенциальными вызовами. Для каждой позиции считается вероятность начать вызов здесь; берутся позиции выше порога τ_s (по умолчанию 0.05), максимум k. В каждой позиции сэмплируется до m вариантов вызова.

Шаг 2. Исполнение. Каждый вызов реально исполняется. Ответ — одна текстовая строка.

Шаг 3. Фильтрация — сердце метода. Считается взвешенная кросс-энтропийная потеря на последующих токенах при разных префиксах:

L⁺   модели дан вызов и его результат
L⁻   min(вызова нет вообще, вызов есть но результата нет)

вызов сохраняется, если:  L⁻  L⁺  τ_f

Словами: вызов полезен ровно тогда, когда знание ответа инструмента помогает предсказывать дальнейший текст. Не «человек посчитал полезным», не «задача требует» — а «перплексия упала». Веса w_t max(0, 1 0.2·t) заставляют вызов стоять близко к месту, где информация нужна.

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

На инференсе генерация идёт как обычно, пока не появится токен . Декодирование прерывается, вызывается API, ответ вставляется, генерация продолжается.

Пять инструментов: QA (модель Atlas), калькулятор (Python, четыре действия), поиск по Википедии (BM25), перевод (NLLB 600M), календарь.

Результаты

База — GPT-J, 6.7B параметров, всё в zero-shot.

БенчмаркToolformer (6.7B)GPT-3 (175B)
LAMA / SQuAD33.8ниже
LAMA / T-REx53.5ниже
ASDiv (математика)40.4ниже
SVAMP29.4ниже
MAWPS44.0ниже
Natural Questions17.722.6
TriviaQA48.865.9

Модель на 6.7B обходит модели в 10 и 25 раз крупнее — на задачах, где инструмент закрывает конкретную слабость. Калькулятор зовётся в 97.9% математических задач, QA — в 98.1% задач LAMA.

Где Toolformer проигрывает GPT-3: обычный QA. Причина названа прямо — поисковик примитивен, и модель не может интерактивно переформулировать запрос или просмотреть несколько результатов. Ровно то, что умеет ReAct.

Два тонких результата

Языковое моделирование не страдает. Перплексия на WikiText и CCNet у Toolformer с отключёнными вызовами (10.3 / 10.5) не хуже, чем у GPT-J, дообученной на том же корпусе без вызовов (10.3 / 10.5). Умение звать инструменты досталось бесплатно.

Способность пользоваться инструментами эмерджентна. На семействе GPT-2 умение появляется примерно с 775M параметров: меньшие модели работают одинаково с инструментами и без них. Тот же паттерн, что у CoT, просто порог ниже.

Ограничения

Названы авторами прямо: нет цепочек инструментов (вызовы генерируются независимо, в обучающих данных нет случаев, где выход одного идёт на вход другому); нет интерактивности; чувствительность к формулировке; крайне низкая выборочная эффективность (>1M документов дают ~1000 полезных вызовов калькулятора); модель не учитывает вычислительную стоимость вызова.

Первые два ограничения — описание того, чем ReAct лучше. Правильное чтение: Toolformer и ReAct решают одну задачу с разных концов. ReAct даёт интерактивность и цепочки, но через промпт и на огромной модели. Toolformer вшивает вызов в веса маленькой модели, но теряет цикл.


Reflexion: обучение без градиентов

Shinn et al., Northeastern + MIT + Princeton, NeurIPS 2023

Классический RL учит агента через градиентный спуск: дорого, медленно, требует дообучения миллиардов параметров. Reflexion заменяет градиент текстом. После провала агент словами пишет себе, что пошло не так, кладёт текст в эпизодическую память, и в следующей попытке текст попадает в контекст.

Авторы называют это «семантическим градиентом»: скалярная награда говорит «плохо», а рефлексия говорит «ты решил, что взял нож, хотя не брал; сначала проверь инвентарь».

Три модели

КомпонентРольРеализация
ActorГенерирует действияLLM с CoT или ReAct в качестве политики
EvaluatorОценивает траекториюexact match, эвристики, самогенерируемые юнит-тесты
Self-ReflectionПишет текстовый разбор провалаLLM: траектория + награда → конкретные выводы

Память делится на краткосрочную (история текущей траектории) и долгосрочную (накопленные рефлексии, обычно 1–3 штуки — ограничение по длине контекста).

Результаты

БенчмаркBaselineReflexion
HumanEval (Python), pass@180.1% (GPT-4)91.0%
HumanEval (Rust), pass@160.0% (GPT-4)68.0%
MBPP (Python), pass@180.1% (GPT-4)77.1% — единственный проигрыш
LeetcodeHardGym, pass@17.5% (GPT-4)15.0%
ALFWorldReAct упирается в потолок на 7-й попытке130 из 134 задач, рост до 12-й попытки

На HotPotQA критический факт: чистые ReAct, CoT и CoT с эталонным контекстом статистически не способны улучшиться между попытками. При температуре 0.7 ни одна задача, не решённая с первого раза, не решается потом. Reflexion ломает этот потолок.

Эвристика запуска рефлексии в ALFWorld тривиальна: одно и то же действие с одним и тем же ответом больше 3 раз, либо больше 30 действий в среде.

Единственный провал и почему он важнее успехов

MBPP Python: 77.1% против 80.1% у базового GPT-4. Авторы разбирают причину честно.

Reflexion для кода судит себя по самогенерируемым юнит-тестам. Два типа ошибок:

  • Ложноотрицательная: тесты падают на верном решении. Терпимо — агент через рефлексию может распознать плохой тест и сохранить решение.
  • Ложноположительная: все тесты проходят на неверном решении. Катастрофа — агент уверенно отдаёт неверный код.

Ключевая метрика — P(решение неверно | тесты проходят). На HumanEval Python она равна 1.4%, на MBPP Python — 16.3%. Базовые pass@1 у них почти одинаковы (82% и 80%). Вся разница в итоге объясняется качеством самооценки, а не качеством рассуждения.

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

Абляция: рефлексия и оценка не работают порознь

50 сложнейших задач HumanEval Rust, база GPT-4:

Генерация тестовСаморефлексияPass@1
нетнет0.60
нетда0.52
данет0.60
дада0.68

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

Отсюда прямой удар по «слепому» trial-and-error дебаггингу: повторять попытки без осмысления провала неэффективно на трудных задачах.

Ограничения

Reflexion — оптимизация политики на естественном языке, и она застревает в локальных минимумах. Наглядный случай — WebShop: после 4 попыток агент не показывает улучшений и не генерирует осмысленных рефлексий. E-commerce поиск требует исследования (exploration), а рефлексия по природе эксплуатирует.

Память — примитивное скользящее окно; авторы сами предлагают векторные базы.

Эмерджентность снова: на слабой модели starchat-beta Reflexion и базовая линия дают одинаковый pass@1 = 0.26. Способность к содержательной саморефлексии — свойство сильных моделей. Слабая модель не может найти собственную ошибку.


Сквозные концепции

Эмерджентность как повторяющийся сюжет

Все три способности появляются скачком при достижении масштаба, а не постепенно:

  • CoT — примерно со 100B параметров;
  • использование инструментов — примерно с 775M;
  • саморефлексия — только у сильных моделей (starchat-beta не умеет, GPT-4 умеет).

Практическое правило, живое до сих пор: если агентная техника не работает — проверь, не слишком ли слаба модель, прежде чем чинить промпт. Ниже порога не помогает никакая инженерия.

Три способа получить обратную связь

ИсточникСтатьяПрирода сигнала
Внутренние знания моделиCoTникакой обратной связи, только развёртка
Наблюдение из средыReActфакт, заземляющий рассуждение
Падение перплексииToolformerчисленный, самоконтролируемый
Результат попытки + текстовый разборReflexionсемантический, отложенный

Toolformer — единственный, где сигнал не от человека и не от среды, а от самой модели: «стало ли легче предсказывать текст». Самый недооценённый ход из всех четырёх, и именно он даёт масштабируемость без разметки.

Галлюцинация против зацикливания

Компромисс, зафиксированный ReAct численно:

  • Свободное рассуждение гибко и галлюцинирует (56% галлюцинаций в ошибках).
  • Заземлённое действием рассуждение фактологично и застревает (0% галлюцинаций, 47% reasoning errors).

Оба режима нужны. Поэтому ReAct-авторы строят переключатели между ReAct и CoT-SC, а не выбирают победителя. Дилемма никуда не делась — она спряталась внутрь reasoning-моделей.

Внутренний контур и внешний

ReAct — цикл внутри одной попытки: мысль, действие, наблюдение, повтор. Reflexion — цикл между попытками: провалился, осмыслил, попробовал снова. Ортогональные вещи, поэтому Reflexion берёт ReAct как компонент (актора), а не заменяет его. Любой серьёзный агентный харнесс сегодня имеет оба контура.

Почему вербальная обратная связь мощнее скалярной

Скаляр −1 не говорит, какое из тридцати действий было ошибкой. Это классическая проблема присвоения ответственности (credit assignment). Текст «ты пошёл к раковине, не взяв нож» решает её напрямую, без бэкпропа по траектории. Главная концептуальная находка Reflexion, пережившая конкретный харнесс статьи.


Что осталось актуальным

Оценка, а не утверждение из статей.

Устарело как практика

  • Let's think step by step и рукописные CoT-примеры. Reasoning-модели натренированы рассуждать через RL на цепочках; просить их «думать пошагово» бессмысленно или вредно.
  • Формат Thought: / Action: / Observation: в промпте. Tool use встроен в API как структурированный протокол. Никто не парсит текст модели регулярками.
  • Метод Toolformer целиком. Никто не размечает корпус токенами [QA(...)] и не фильтрует их по перплексии. Вызов инструментов обучается в post-training напрямую.
  • Харнесс Reflexion как код. Связка Actor/Evaluator/Self-Reflection с тремя рефлексиями в скользящем окне не воспроизводится — но её идея воспроизводится постоянно.

Живо как концепция

  • Цикл ReAct. Каждый агентный харнесс — это рассуждение вызов инструмента наблюдение повтор. Формат сменился, структура нет.
  • Заземление против галлюцинации. 0% против 56% — до сих пор главный аргумент за то, чтобы агент искал, а не вспоминал.
  • Вербальная обратная связь в памяти. Долгоживущие агенты, пишущие себе заметки о провалах, — прямые потомки Reflexion. Файлы с извлечёнными уроками, память агента, AGENTS.md — это Reflexion, только руками.
  • Качество оценщика ограничивает качество самокоррекции. Провал на MBPP Python (16.3% ложноположительных тестов) — самый переносимый урок из четырёх статей. Агент, который не может достоверно понять, преуспел ли он, не может себя улучшить. Отсюда: верификация не формальность, а несущая конструкция.
  • Порог эмерджентности. Слабая модель не спасается промпт-инжинирингом.
  • Faithfulness рассуждений. CoT зафиксировал в 2022, что цепочка может не отражать реальные вычисления. Открытая проблема безопасности.

Чего в этих статьях нет

RL на цепочках рассуждений, обучение оценщика (reward model) на процессе, длинный контекст вместо памяти, мультиагентные системы, вычисления во время инференса как обучаемый ресурс. Следующий слой — но он не читается без этого.


Словарь

ТерминЗначение
Chain-of-Thought (CoT)Промежуточные шаги рассуждения в выводе модели, ведущие к ответу
Self-consistency (CoT-SC)Сэмплирование нескольких цепочек (21 при температуре 0.7) и выбор ответа большинством
Эмерджентная способностьНавык, отсутствующий у малых моделей и скачком появляющийся при достижении масштаба
Заземление (grounding)Привязка рассуждения к фактам из внешней среды, а не из весов
Мысль (thought)Действие в языковом пространстве, не меняющее среду, но обновляющее контекст
Credit assignmentОпределение, какое именно действие в траектории привело к провалу
Вербальное подкреплениеОбучение через текст в контексте вместо обновления весов
pass@1Доля задач, решённых с первой сгенерированной попытки
Exact match (EM)Точное совпадение ответа с эталоном
Ложноположительный тестТест проходит на неверном решении — самый опасный режим отказа самооценки
PerplexityМера того, насколько модель «удивлена» текстом; ниже = лучше предсказывает

Порядок чтения

  1. Chain-of-Thought — фундамент: рассуждение как формат.
  2. ReAct — главная из четырёх, если читать одну.
  3. Reflexion — второй контур обучения.
  4. Toolformer — стоит сбоку: обучение вместо промптинга. Читать последним.

Ссылки

Основы LLM-агентов: CoT, ReAct, Toolformer, Reflexion | Aleksandr Suprun