Современный LLM-агент — это цикл: модель рассуждает, вызывает инструменты, наблюдает результат, корректирует себя. Четыре статьи 2022–2023 годов описывают ровно четыре части этого цикла, и каждая следующая надстраивается над предыдущей. Всё, что сегодня называют агентом — tool use в API, agentic-фреймворки, самокорректирующиеся кодогенераторы — комбинация этих примитивов.
Заметка — сводка по оригинальным работам: Chain-of-Thought, ReAct, Toolformer, Reflexion. Все числа взяты из статей. Раздел «Что осталось актуальным» — оценка, а не утверждение авторов.
Четыре примитива
| Статья | Год | Вопрос | Примитив |
|---|---|---|---|
| Chain-of-Thought | 2022 | Как решать многошаговые задачи? | Промежуточные шаги в выводе |
| ReAct | 2022 | Как связать рассуждение с внешним миром? | Цикл мысль → действие → наблюдение |
| Toolformer | 2023 | Как модель сама научится звать инструменты? | Вызов API как токен в тексте |
| Reflexion | 2023 | Как учиться на провале без дообучения? | Текстовая рефлексия в памяти |
Логика связи. 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:
| Категория | ReAct | CoT |
|---|---|---|
| True positive (верные рассуждение и факты) | 94% | 86% |
| False positive (галлюцинированное рассуждение) | 6% | 14% |
| Ошибка: галлюцинация | 0% | 56% |
| Ошибка: reasoning error | 47% | 16% |
| Ошибка: неинформативный поиск | 23% | — |
Читается так: CoT галлюцинирует, ReAct зацикливается. Доступ к внешним фактам полностью убирает галлюцинации, но жёсткая структура «мысль-действие-наблюдение» снижает гибкость рассуждения, и главной ошибкой становится повторение уже сделанных шагов. Авторы связывают зацикливание с жадным декодированием и предполагают, что beam search помог бы.
Отсюда практический вывод, который авторы реализовали: комбинировать. Если ReAct не дал ответа за N шагов (7 для HotpotQA, 5 для Fever) — откатиться на CoT-SC. Если голосование CoT-SC не набрало большинства — откатиться на ReAct.
Где ReAct выигрывает крупно
На интерактивных задачах, а не на QA.
| Бенчмарк | Метрика | Baseline | ReAct |
|---|---|---|---|
| HotpotQA | EM | CoT 29.4 | 27.4 (комбинация → 35.1) |
| Fever | Accuracy | CoT 56.3 | 60.9 (комбинация → 64.6) |
| ALFWorld | Success rate | BUTLER 37%, Act 45% | 71% |
| WebShop | Success rate | IL+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: инструмент как выученный навык
Модели плохо делают простые вещи, где их бьют крошечные специализированные системы: свежая информация, точная арифметика, низкоресурсные языки, знание текущей даты. Существующие подходы либо требовали человеческой разметки, либо привязывали инструмент к одной задаче.
Два требования авторов: обучение самоконтролируемое (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 / SQuAD | 33.8 | ниже |
| LAMA / T-REx | 53.5 | ниже |
| ASDiv (математика) | 40.4 | ниже |
| SVAMP | 29.4 | ниже |
| MAWPS | 44.0 | ниже |
| Natural Questions | 17.7 | 22.6 |
| TriviaQA | 48.8 | 65.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 штуки — ограничение по длине контекста).
Результаты
| Бенчмарк | Baseline | Reflexion |
|---|---|---|
| HumanEval (Python), pass@1 | 80.1% (GPT-4) | 91.0% |
| HumanEval (Rust), pass@1 | 60.0% (GPT-4) | 68.0% |
| MBPP (Python), pass@1 | 80.1% (GPT-4) | 77.1% — единственный проигрыш |
| LeetcodeHardGym, pass@1 | 7.5% (GPT-4) | 15.0% |
| ALFWorld | ReAct упирается в потолок на 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 | Мера того, насколько модель «удивлена» текстом; ниже = лучше предсказывает |
Порядок чтения
- Chain-of-Thought — фундамент: рассуждение как формат.
- ReAct — главная из четырёх, если читать одну.
- Reflexion — второй контур обучения.
- Toolformer — стоит сбоку: обучение вместо промптинга. Читать последним.
Ссылки
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models — Wei et al., Google Brain, NeurIPS 2022
- ReAct: Synergizing Reasoning and Acting in Language Models — Yao et al., Princeton + Google Brain, ICLR 2023
- Toolformer: Language Models Can Teach Themselves to Use Tools — Schick et al., Meta AI, 2023
- Reflexion: Language Agents with Verbal Reinforcement Learning — Shinn et al., NeurIPS 2023
- ReAct project page — примеры траекторий и промпты
- Reflexion: код и данные