3,583 papers
arXiv:2607.26922 73 29 июля 2026 г. FREE

Gated Self-Refinement: когда просить модель перепроверить ответ — а когда нет

КЛЮЧЕВАЯ СУТЬ
95 из 100 задач с кодом модель решала верно с первого раза. Стоило попросить «перепроверь и выдай финальную версию» — точность рухнула до 66%. Метод gated self-refinement (самопроверка с фильтром) позволяет проверять ответы модели, не рискуя сломать то, что уже работает. Фишка: критику разрешили ответить «CORRECT» и ничего не трогать — вместо обязательной переписки любого ответа подряд.
Адаптировать под запрос

TL;DR

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

Главная находка исследования: просьба «перепроверь и исправь» может сломать уже правильный ответ. На задачах с кодом, где модель и так решала 95 из 100 задач верно, принудительная перепроверка обвалила точность до 66% — модель начинала переписывать рабочий код «на всякий случай», хотя её не просили находить конкретную ошибку, а просили обязательно выдать финальную версию.

Решение простое: критик должен иметь право сказать «всё верно, ничего не меняю» вместо того, чтобы каждый раз переписывать заново. И запускать проверку стоит только там, где модель реально ошибается часто (при низкой точности первого ответа), а не там, где она почти всегда права.


🔬

Схема метода

ВЫЗОВ 1: Модель решает задачу обычным способом → черновой ответ
[ГЕЙТ]: Оцени — модель неуверена/задача сложная? 
   ЕСЛИ ДА → идти к ВЫЗОВУ 2
   ЕСЛИ НЕТ → оставить ответ ВЫЗОВА 1, стоп

ВЫЗОВ 2: Модель проверяет черновик.
   Промпт критика: «Если всё верно — ответь CORRECT. 
   Переписывай только если нашёл конкретную ошибку» → финальный ответ

Оба вызова — отдельные запросы (не один промпт).


🚀

Пример применения

Задача: Разработчик просит Claude написать функцию на Python для парсинга CSV-файла, а потом просит её проверить.

Промпт (вызов 1):

Напиши функцию на Python, которая читает CSV-файл и возвращает список словарей.
Обработай случай пустых строк и неправильного разделителя.

Промпт (вызов 2, после получения кода):

Вот код выше. Проверь его на ошибки логики, обработки исключений и краевых случаев.

Если код полностью корректен — ответь только словом CORRECT, ничего не переписывай.
Если нашёл конкретную ошибку — укажи её и перепиши ТОЛЬКО то место, где она есть.
Не переписывай весь код заново без причины.

Результат: Если код действительно рабочий, модель ответит "CORRECT" и не тронет исходник. Если есть реальная ошибка — покажет её точечно, без "капитального ремонта" рабочих частей. Это снижает риск, что модель "улучшит" код до состояния с новым багом.


🧠

Почему это работает

LLM склонна выполнять инструкцию буквально, даже если это вредит. Если промпт говорит «всегда перепиши финальную версию» — модель перепишет, даже когда переписывать нечего. Это создаёт риск случайно испортить то, что уже было правильным — просто из желания «отработать» задачу.

Сильная сторона LLM — она неплохо оценивает уверенность в своём ответе, если её явно спросить («это точно верно?» вместо «перепиши это»). Гейт использует эту способность: не заставляет модель переписывать всё подряд, а даёт ей возможность честно сказать «менять нечего».

Рычаги управления: - Убери слово «обязательно перепиши» из промпта критика → модель реже портит правильные ответы - Добавь условие «отвечай CORRECT, если ошибок нет» → экономия токенов и меньше случайных правок - Если задача простая и модель почти всегда права с первого раза → второй вызов вообще можно пропустить - Если задача сложная (модель часто ошибается) → второй вызов почти всегда помогает, гейт менее критичен


📋

Шаблон промпта

ВЫЗОВ 1:
{твоя задача}

ВЫЗОВ 2 (после получения ответа):
Вот решение выше. Проверь его на {критерии проверки: ошибки/логика/полнота}.

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

Подставь в {твоя задача} — исходный запрос, в {критерии проверки} — что именно проверять (грамматику, логику, расчёты, код).

🚀 Быстрый старт — вставь в чат:

Вот шаблон gated self-refinement (проверка ответа с защитой от лишних правок). 
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит какая у тебя задача и по каким критериям проверять ответ — потому что от этого зависит формулировка промпта-критика. Она возьмёт паттерн из шаблона и подгонит под твой случай.


⚠️

Ограничения

⚠️ Модель исследования: Эксперимент проводили на маленькой локальной модели (7 миллиардов параметров). ChatGPT и Claude — модели гораздо крупнее, они надёжнее держат контекст и реже "паникуют" от сложных инструкций. Эффект гейта может быть слабее на мощных моделях, но сам принцип (не заставлять модель переписывать без причины) логически применим к любой LLM.

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

⚠️ Часть про многоагентные пайплайны и JSON-формат мало применима: Основная находка статьи про то, что 5-агентные конвейеры с JSON-обменом ломаются на маленьких моделях — это специфично для локальных 7B моделей. ChatGPT и Claude надёжно генерируют JSON и держат контекст между шагами, так что этот вывод не переносится напрямую на них.


🔍

Как исследовали

Исследователи взяли локальную модель Qwen2.5-7B и прогнали её через три подхода: прямой промпт, пятиролевой конвейер (Refiner → Planner → Worker → Checker → Judge, назвали систему Parishad) и двухвызовный self-refinement. Тестировали на 500 математических задачах (GSM8K) и 164 задачах на код (HumanEval).

Самое интересное — конвейер с JSON-обменом между ролями рухнул до 45% точности на математике (при базовых 75% на прямом промпте), просто потому что маленькая модель не может стабильно генерировать валидный JSON, а сломанный JSON превращает передачу контекста между ролями в кашу. Замена JSON на обычный текст вернула точность почти к исходному уровню — 82%.

Но ключевое открытие для self-refinement: на коде, где модель и так решала 95% задач правильно, второй "проверочный" вызов с инструкцией "всегда перепиши финальную версию" обвалил точность до 66%, потому что модель переписывала рабочие решения без причины. Убрав принудительную переписку и заменив её на "скажи CORRECT если всё верно" — точность вернулась к исходным 95%. Это противоречит интуиции "чем больше проверок — тем лучше" и показывает, что формулировка промпта критика важнее самого факта проверки.


📋 Дайджест исследования

Ключевая суть

95 из 100 задач с кодом модель решала верно с первого раза. Стоило попросить «перепроверь и выдай финальную версию» — точность рухнула до 66%. Метод gated self-refinement (самопроверка с фильтром) позволяет проверять ответы модели, не рискуя сломать то, что уже работает. Фишка: критику разрешили ответить «CORRECT» и ничего не трогать — вместо обязательной переписки любого ответа подряд.

Принцип работы

Правило простое: не заставляй модель переписывать — дай ей право сказать «всё чисто». Перед вторым вызовом стоит гейт — фильтр, который решает, пускать ли ответ на проверку. Модель уверена и задача простая? Ответ остаётся как есть, второй вызов не нужен. Модель часто ошибается на такой задаче — тогда второй вызов, критик, включается почти всегда. Суть: не каждый ответ обязан пройти правки — только сомнительный.

Почему работает

LLM выполняет инструкцию буквально, даже во вред себе. Скажешь «перепиши финальную версию» — перепишет, даже если переписывать нечего. Модель неплохо оценивает собственную уверенность, если спросить прямо: «это точно верно?» — а не «перепиши это». Дай ей право ответить «менять нечего» — и точность не проседает с 95% до 66%.

Когда применять

Проверка ответов LLM → для задач где модель почти всегда права с первого раза (код, расчёты, короткие тексты), особенно когда цена случайной правки высока. Для сложных задач с частыми ошибками гейт не так критичен — второй вызов почти всегда полезен сам по себе. НЕ подходит там, где нужна жёсткая проверка каждого ответа без исключений (юридические тексты, медицинские рекомендации) — там лучше перепроверять всегда, без фильтра.

Мини-рецепт

1. Первый вызов: дай модели задачу как обычно, получи черновой ответ.
2. Гейт: оцени — модель уверена и задача простая? Если да — стоп, ответ готов, дальше не идём.
3. Второй вызов (критик): попроси проверить черновик, но явно разреши ответить «CORRECT» без изменений, если всё верно.
4. Точечная правка: если ошибка найдена — исправь только её, не переписывай всё заново без причины.

Примеры

[ПЛОХО] : Проверь код выше и выдай финальную исправленную версию.
[ХОРОШО] : Проверь код выше на ошибки логики и краевые случаи. Если всё верно — ответь только CORRECT, ничего не переписывай. Если нашёл ошибку — укажи её и исправь только это место, не трогая остальной код.
Источник: Two Calls Beat Five Agents: Evaluating Multi-Agent Pipelines Against Self-Refinement for Local Language Models
ArXiv ID: 2607.26922 | Сгенерировано: 2026-07-30 04:22

Проблемы LLM

ПроблемаСутьКак обойти
Принудительная проверка портит уже верный ответПросишь модель "перепроверь и перепиши финальную версию". Модель выполняет инструкцию буквально. Переписывает ответ, даже если он был правильным. Вносит новую ошибку туда, где ошибок не было. Точность падает сильнее всего на простых задачах, где первый ответ и так почти всегда верныйДай критику право ответить "всё верно, не меняю". Проси исправлять только конкретное найденное место, а не весь ответ целиком

Методы

МетодСуть
Проверка ответа с фильтром (гейтом) — без порчи верных решенийДва отдельных вызова модели. Первый — обычное решение задачи. Перед вторым вызовом ставишь фильтр: если модель уверена или задача простая — второй вызов пропускается, ответ остаётся как есть. Если проверка нужна — промпт критика: "если всё верно, ответь CORRECT, ничего не переписывай. Если нашёл конкретную ошибку — исправь только это место". Почему работает: модель следует инструкциям буквально. Без разрешения сказать "менять нечего" она переписывает через силу и портит рабочий результат. Применяй когда: задача с проверяемым итогом (код, расчёты, факты), модель обычно решает верно с первого раза. Не применяй фильтр (можно смело проверять всегда) когда: задача сложная, модель часто ошибается — тогда проверка почти всегда полезна
📖 Простыми словами

Two Calls Beat FiveAgents: Evaluating Multi-AgentPipelines Against Self-Refinement for LocalLanguageModels

arXiv: 2607.26922

Суть тут в том, что современные нейронки — это жуткие подлизы, которые пытаются угодить тебе любой ценой. Когда ты просишь модель проверить свой же ответ, она часто начинает чинить то, что не сломано, просто потому что ты дал команду «найди ошибку». В итоге вместо идеального кода или текста ты получаешь переусложненную фигню, где модель сама себя запутала. Исследование доказывает, что городить сложные цепочки из пяти «агентов-экспертов» — это пустая трата ресурсов, которая только плодит ошибки.

Это как если бы ты попросил опытного хирурга зашить рану, а потом приставил к нему еще четверых интернов, чтобы они «покритиковали» работу. Интерны, чтобы не казаться бесполезными, обязательно найдут к чему придраться, начнут переделывать швы и в итоге только всё испортят. Формально они поработали, но пациенту стало хуже. Метод Two Calls предлагает оставить хирурга в покое, если он уверен, что всё сделал четко, и звать проверку только в сомнительных случаях.

Работает это через элементарный фильтр-гейт между первым и вторым вызовом. Сначала модель выдает решение, а специальный алгоритм оценивает её уверенность. Если всё ок — мы забираем результат и экономим токены. Если есть сомнения — включается Self-Refinement (самопроверка). Главная фишка здесь в том, что два точных вызова с фильтром на входе уделывают навороченные пайплайны из кучи агентов. Это база: меньше лишних движений — выше качество.

Хотя тестировали это на локальных моделях, принцип универсален для любой автоматизации на базе AI. Будь то написание кода, генерация отчетов или автоматическая поддержка клиентов — не нужно заставлять нейронку бесконечно рефлексировать над каждой запятой. Избыточная итерация убивает логику. Если модель сразу выдала базу, любая попытка «улучшить» её без веской причины превращается в бег по граблям.

Короче, хватит строить «цифровые колхозы» из десятка агентов там, где справятся двое. Главный вывод: умный фильтр важнее количества проверок. Если впихнуть в процесс гейт, который отсекает лишнюю самокритику, модель перестает лажать на ровном месте. Либо делай сразу нормально, либо проверяй один раз, но по делу — иначе просто сожжешь бюджет и получишь на выходе мусор.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с