TL;DR
Исследование показывает: агент в многошаговой аналитической задаче не останавливается, даже когда его собственная проверка показала, что идти дальше нельзя. Авторы назвали это уклоном к действию (action bias) — инерцией продолжать запускать инструменты, не глядя на результат предыдущего шага. Они измеряют способность самоограничения: меняется ли следующее действие агента от того, что он только что посчитал.
Картина такая. Агент честно считает диагностику: «стабильность процесса не подтверждена». Следующей командой он считает индексы, которые при нестабильном процессе считать нельзя. Если проверка пройдена, агент идёт дальше в 92% случаев. Если провалена, останавливается или сворачивает только в 19%. Самокритика тут не помогает: критика не равна смене действия. Даже когда отчёт выглядит аккуратно, эксперты находят в нём выводы на невалидных данных почти в половине случаев.
Простое «тебе разрешено остановиться» работает нестабильно. У одной модели точность остановок выросла с 23% до 79%, но корректное продолжение просело. Другая модель не сдвинулась вообще. Лучше сработала нормативная формулировка: промпт просто излагает правила предпосылок («анализ B допустим только если выполнено A») без разговоров о «завершении задачи». Она подняла слабую модель на 25 пунктов.
Схема метода
Это находка, а не техника, поэтому схема показывает два уровня: как устроена проверка в исследовании и что из неё берёт практик.
КАК УСТРОЕН БЕНЧМАРК
Задача = цепочка анализов + «ворота» (проверка предпосылки)
Ворота пройдены → GO (надо продолжать)
Ворота провалены → NO-GO (надо стоп / обход)
Парные задачи: та же точка, данные подменены → нужны ПРОТИВОПОЛОЖНЫЕ действия
Оценка: по журналу команд (что реально посчитано), а не по тексту отчёта
ЧТО БЕРЁТ ПРАКТИК (один промпт)
ШАГ 1: Выписать предпосылки как правила «анализ Б допустим только если А» → список ворот
ШАГ 2: Перед каждым анализом агент записывает значение, порог, вердикт → строка в журнале
ШАГ 3: Провал → запрещённые вычисления не запускать, даже «для справки» → отчёт о стопе
ШАГ 4: Человек проверяет журнал команд, а не только итоговый вывод
Пример применения
Задача: Селлер на Ozon запускает A/B-тест двух карточек товара (новые фото против старых) и просит агента в Claude Code посчитать, какая версия даёт больший прирост конверсии. Трафик должен делиться 50/50, но в данных перекос 58/42. Если не поймать его, любой вывод об «приросте» будет ложным, даже при безупречной арифметике.
Промпт:
Ты аналитик A/B-тестов. Данные: файл ab_test_ozon.csv (колонки: user_id, variant, date, views, orders).
ПРАВИЛА ДОПУСТИМОСТИ (это не пожелания, а условия, при которых анализ имеет смысл):
Ворота G1 — Баланс трафика. Критерий: доли вариантов A и B отличаются от 50/50 не значимо (хи-квадрат, p > 0.01).
Ворота G2 — Размер выборки. Критерий: в каждом варианте не менее 1 000 просмотров на день теста и не менее 30 заказов.
Ворота G3 — Нет пересечения с акциями. Критерий: в датах теста нет дней с общей акцией Ozon (список дат ниже).
ЗАВИСИМОСТИ:
- Расчёт прироста конверсии, p-value и доверительных интервалов допустим ТОЛЬКО если G1, G2 и G3 пройдены.
- Если любые ворота провалены, расчёт прироста запрещён полностью: не считай его даже «для информации» и не включай в отчёт.
ПОРЯДОК РАБОТЫ:
1. Посчитай G1, затем G2, затем G3. После каждых ворот выведи строку:
ГЕЙТ: <имя> | значение: <число> | порог: <число> | вердикт: ПРОЙДЕН / ПРОВАЛЕН
2. Если всё пройдено, продолжай до конца без лишних остановок.
3. Если что-то провалено, остановись на этом месте. В отчёте напиши: какие ворота провалены, почему результат теста нельзя использовать и что делать (перезапустить тест, исправить рандомизацию, продлить сроки).
Остановка при провале ворот считается успешным завершением задачи. Вывод о приросте на невалидных данных — ошибка.
Даты акций Ozon в период теста: 2025-03-08, 2025-03-09.
Результат: Модель выведет три строки с вердиктами ворот. Если перекос трафика подтвердится, она остановится после G1, не будет считать прирост и опишет, что делать дальше. Если все ворота пройдены, она посчитает прирост и интервал. Проверяя результат, откройте журнал команд агента и убедитесь, что расчёт прироста вообще не запускался после проваленных ворот.
Почему это работает
Слабость. Модель генерирует следующий шаг по инерции: «задача — посчитать прирост, значит, считаем». Результат проверки остаётся в контексте как ещё один кусок текста, но не включает стоп. Модель умеет правильно сообщить диагностику и в тот же момент проигнорировать её. Поэтому просьба «подумай и покритикуй себя» не помогает: критика появляется, а действие не меняется.
Что модель умеет хорошо. Она хорошо следует явным условным правилам, когда они сформулированы как условие допустимости, а не как совет. Фраза «анализ Б допустим только при выполнении А» переводит остановку из «отказа» в правильный ход по правилам. Именно такая формулировка («нормативная») подняла слабую модель сильнее, чем просто разрешение остановиться.
Как метод использует это. Промпт превращает проверки в обязательные ворота с записью значения и вердикта. Остановка становится нормальным результатом, а не провалом. Так «диагностика» и «действие» привязаны друг к другу прямо в тексте инструкции.
Рычаги управления: - Число ворот и пороги → добавляй под свою задачу. Пороги бери из стандарта вашей области, а не «на глаз». - Фраза про остановку → убери её, если агент слишком часто тормозит там, где можно идти дальше. Разрешение остановиться портило продолжение у части моделей. - Строка журнала → оставь обязательной: по ней видно, где агент сошёл с рельсов. - Запрет «для справки» → самая важная строка. Без неё агент считает запрещённое и аккуратно умалчивает об этом в отчёте.
Шаблон промпта
Дословного текста «нормативного» промпта в доступной части статьи нет, есть только его описание: правила предпосылок без рамки про завершение задачи. Шаблон ниже собран по этому описанию.
Ты {роль_аналитика}. Данные: {источник_данных}.
ПРАВИЛА ДОПУСТИМОСТИ (условия, при которых анализ имеет смысл):
Ворота G1 — {название}. Критерий: {проверка и порог}.
Ворота G2 — {название}. Критерий: {проверка и порог}.
Ворота G3 — {название}. Критерий: {проверка и порог}.
ЗАВИСИМОСТИ:
- {анализ_1} допустим ТОЛЬКО если {ворота} пройдены.
- {анализ_2} допустим ТОЛЬКО если {ворота} пройдены.
- Если ворота провалены, зависимые анализы запрещены полностью: не считай их, даже «для справки».
ПОРЯДОК:
1. Проверяй ворота по очереди. После каждых выведи строку:
ГЕЙТ: <имя> | значение: <число> | порог: <число> | вердикт: ПРОЙДЕН / ПРОВАЛЕН
2. Все пройдены → продолжай до конца без лишних остановок.
3. Любые провалены → остановись. В отчёте: что провалено, почему вывод недопустим, что делать дальше.
Остановка при проваленных воротах считается корректным завершением. Вывод на невалидных данных — ошибка.
Подставьте: {роль_аналитика} — кто агент; {источник_данных} — файл или таблица; ворота — предпосылки вашего анализа (баланс групп, стабильность процесса, достаточность выборки, качество измерения); зависимости — какой расчёт после какой проверки разрешён.
🚀 Быстрый старт — вставь в чат:
Вот шаблон «правил допустимости» для аналитического агента. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какие анализы вы собираетесь делать и какие условия должны выполняться перед каждым из них. Ворота и зависимости определяются предметной областью, а модель сама подберёт стандартные пороги и расставит запреты.
Ограничения
⚠️ Простое разрешение остановиться — не лекарство: оно помогает только части моделей, у остальных точность остановок остаётся низкой. Там, где помогает, оно может испортить обратное: агент начинает тормозить и там, где надо идти дальше.
⚠️ Нормативный промпт проверен узко: по доступной части статьи прирост показан на слабой модели, и шаблон выше — реконструкция по описанию. Универсальной гарантии нет, проверяйте на своих данных.
⚠️ Нельзя полагаться только на отчёт агента: в нём бывают выводы на невалидных данных, хотя тон спокойный и аккуратный. Проверять нужно журнал реально выполненных команд.
⚠️ LLM-судья не заменит эксперта: три модели-судьи согласились с экспертами лишь умеренно и расходились друг с другом. Для оценки «поступил ли агент разумно при провале предпосылки» нужен человек, знающий предметную область.
⚠️ Домен: бенчмарк построен на промышленной статистике и частично биоинформатике, где предпосылки формализованы. В областях без чётких порогов («ворота» размыты) эффект будет слабее.
Как исследовали
Исследователи взяли 15 промышленных кейсов из четырёх отраслей, восемь из них — по реальным отчётам специалистов Lean Six Sigma. Из кейсов собрали 97 задач, где перед каждым анализом нужна проверка предпосылки: калибровка прибора, стабильность процесса, подтверждение улучшения. Ключевой ход — парные задачи: в одной точке процесса данные подменены так, что в одном варианте надо идти дальше, а в другом — остановиться. Это позволило отличить настоящее самоограничение от привычки «всегда останавливаться».
Тринадцать моделей от шести разработчиков прогнали через стандартную среду Terminal-Bench по три раза на задачу. Оценивали по журналу команд: если запущен запрещённый анализ, это ошибка, даже когда отчёт его не упоминает. Результат: 92% правильных продолжений против 19% правильных остановок. В 201 из 272 случаев с верно посчитанной проверкой агент всё равно шёл дальше, и в 174 из них диагностика появилась в журнале до запрещённого анализа. Это и есть «знал и сделал».
Чтобы проверить, не врёт ли строгая оценка по журналу, сертифицированные эксперты по качеству вслепую прочитали 60 отчётов. Они нашли выводы на невалидных данных в 47% дошедших до развилки случаев, а разрыв сократился с 73 до 25 пунктов: часть агентов считала запрещённое, но осторожно умалчивала. Затем проверили инструкции: разрешение остановиться дало у одной модели 23→79% остановок (при потере в GO), у другой — ничего. Предрегистрированная репликация (32 парные задачи, 960 прогонов) подтвердила, что перефразирование разрешения почти не меняет эффект, а нормативная формулировка поднимает слабую модель на 25 пунктов. Вывод для практики: проблема не только в том, что промпт давит «закончи задачу».
Адаптации и экстраполяции
🔧 Техника: добавить «журнал ворот» в самый конец отчёта → быстрый аудит без чтения всего
В конце отчёта выведи таблицу «Журнал ворот»: гейт | значение | порог | вердикт | какие анализы после него запускались.
Если после ПРОВАЛЕН запускался любой зависимый анализ, пометь строку «НАРУШЕНИЕ».
Теперь расхождение между диагностикой и действием видно за 10 секунд. Это адаптация: в статье сверка идёт по журналу команд, которую читает автоматический проверяющий.
Экстраполяция: отдавать данные по этапам. Исследование отмечает, что внешняя блокировка не убирает уклон, когда диагностика и запрещённый анализ используют одну и ту же порцию данных. Из этого можно вывести ручной приём для чата: не загружать всю таблицу сразу.
Шаг 1. Я даю тебе только данные для проверки баланса групп. Посчитай ворота G1 и дай вердикт. Больше ничего не считай.
(дальше, если G1 пройден) Шаг 2. Вот данные для расчёта конверсии...
Это моя идея на основе результата статьи, авторы такой приём не проверяли.
Ресурсы
- DMAIC-Bench: From Self-Reflection to Self-Restraint for Agents in Multi-Stage Analytical Tasks (Preprint).
- Код и данные: https://github.com/psptpx/DMAIC-Bench-public
- Авторы: Shan Peng, Shuaiqi Cheng, Miao Peng, Chenyi Zi, Jia Li. Xiwei Technology (Guangzhou) и The Hong Kong University of Science and Technology (Guangzhou).
- Опорные стандарты и работы из статьи: Lean Six Sigma / DMAIC (Montgomery), AIAG MSA-4, NIST/SEMATECH; Reflexion, Self-Refine; Terminal-Bench.
