TL;DR
Verification-First (VF) — техника, которая меняет порядок работы LLM: вместо "думай по шагам и найди ответ" мы говорим "вот ответ [любой, даже случайный], проверь его, потом дай правильный". Модель сначала критикует предложенный ответ, и только потом генерирует свой — это запускает обратное рассуждение от ответа к условию.
Главная находка: проверить ответ когнитивно проще, чем сгенерировать правильный. Когда модель генерирует "в лоб", она цепляется за свой первый вариант — эгоцентризм авторегрессии. Но если дать ей чужой ответ для проверки, включается критическое мышление: модель ищет ошибки, строит контрпримеры, формулирует уравнения. Даже если ответ "1" очевидно неверен — сам процесс проверки создаёт полезную структуру для решения.
Как работает: в простейшем варианте — один промпт с тривиальным ответом (например, "1" для математических задач). Для сложных задач — два вызова: сначала обычный CoT даёт первый ответ, затем VF просит проверить его и дать финальный. Итеративная версия Iter-VF повторяет цикл проверки многократно, каждый раз используя только ответ из предыдущего шага (без накопления контекста).
Схема метода
Вариант 1: VF с тривиальным ответом (один запрос)
ВХОД: Задача + "Предлагаемый ответ: 1"
→ Модель проверяет → находит ошибки → генерирует правильный ответ
Вариант 2: VF с предыдущим ответом (два запроса)
ШАГ 1: CoT(задача) → Ответ_1
ШАГ 2: VF(задача, Ответ_1) → проверка → Ответ_2 (финальный)
Вариант 3: Iter-VF (N запросов, для test-time scaling)
ШАГ 1: CoT или VF → Ответ_1
ШАГ 2: VF(задача, Ответ_1) → Ответ_2
...
ШАГ N: VF(задача, Ответ_{N-1}) → Ответ_N (финальный)
Важно: каждый шаг видит ТОЛЬКО ответ из прошлого шага, не весь контекст
Пример применения
Задача: Ты готовишь финмодель для питча инвестору. Нужно рассчитать точку безубыточности: фиксированные расходы 450 000 ₽/мес, маржинальность единицы продукта 1 500 ₽. Сколько продаж в месяц нужно для выхода в ноль?
Промпт:
Задача: Фиксированные расходы компании — 450 000 рублей в месяц.
Маржинальность одной продажи — 1 500 рублей.
Сколько продаж в месяц нужно для выхода на точку безубыточности?
Предлагаемый ответ: 1
Сначала проверь предлагаемый ответ. Затем дай правильный ответ с объяснением.
Результат: Модель начнёт с проверки: "Если ответ 1 продажа, то выручка 1 500 ₽, а расходы 450 000 ₽ — очевидно не покрывает". Затем сформулирует уравнение: 1 500 × N = 450 000, и даст ответ 300 продаж. Процесс проверки вынуждает модель явно записать соотношение между переменными — это снижает шанс арифметической ошибки.
Почему это работает
Слабость LLM: Авторегрессивная генерация создаёт эгоцентризм — модель цепляется за свой первый вариант ответа. Если в начале рассуждения допущена ошибка, модель продолжает строить логику поверх неё, потому что оптимизирует связность текста, а не правильность.
Сильная сторона: LLM отлично критикует — находит противоречия, строит контрпримеры, проверяет граничные условия. Верификация — когнитивно более простая задача, чем генерация с нуля.
Как VF использует это: Когда ты даёшь модели "чужой" ответ для проверки, она выходит из режима защиты своей генерации. Включается критическое мышление. Даже если ответ "1" абсурден — процесс проверки заставляет модель явно сформулировать условия задачи, записать уравнения, найти противоречия. Эта структура потом используется для генерации правильного ответа.
Рычаги управления:
- Тривиальный vs реальный ответ: Для простых задач достаточно "1" или "Вариант Б". Для сложных (код, API) — сначала сгенерируй первый ответ обычным CoT
- Количество итераций: Iter-VF можно остановить после 2-5 шагов — основной прирост на первых итерациях
- Markov vs накопление: VF передаёт только ответ, не весь контекст — избегает переполнения и накопления ошибок (в отличие от Self-Correction)
Шаблон промпта
Базовый VF (с тривиальным ответом):
Задача: {описание_задачи}
Предлагаемый ответ: {тривиальный_ответ}
Сначала проверь предлагаемый ответ — найди ошибки или подтверди правильность.
Затем дай правильный ответ с объяснением.
Плейсхолдеры:
{описание_задачи}— полное условие задачи{тривиальный_ответ}— для чисел: "1"; для выбора: "Вариант Б"; для да/нет: "Да"
VF с предыдущим ответом (для сложных задач):
Задача: {описание_задачи}
Предыдущий ответ: {ответ_из_первого_запроса}
Проверь предыдущий ответ: найди ошибки в логике, вычислениях или подходе.
Затем дай исправленный или подтверждённый ответ.
Плейсхолдеры:
{ответ_из_первого_запроса}— скопируй ответ из предыдущего запроса (без рассуждений, только финальный ответ)
Iter-VF (многократная итерация):
Повторяй VF с предыдущим ответом 3-5 раз. Каждый раз:
- Извлеки только финальный ответ из предыдущего вывода
- Подставь его в шаблон VF
- Получи новый ответ
Критически важно: передавай только ответ, не весь текст рассуждений.
🚀 Быстрый старт — вставь в чат:
Вот техника Verification-First. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы понять какой тривиальный ответ подставить.
[вставить шаблон выше]
LLM спросит про тип ответа (число, выбор, текст) — чтобы подобрать осмысленный тривиальный ответ для проверки.
Ограничения
⚠️ Слабее на knowledge-intensive задачах: VF улучшает рассуждения (вычисления, логику), но мало помогает когда проблема в знаниях. На GPQA (научные вопросы) прирост ~2-3%, на GSM8K (математика) — до 5-7%.
⚠️ Нужен осмысленный тривиальный ответ: Для кода "return 1" бесполезен — модель не может его осмысленно проверить. Для open-ended задач используй двухшаговый вариант.
⚠️ Iter-VF достигает потолка: После 5-10 итераций прирост замедляется. Для дальнейшего scaling авторы рекомендуют комбинировать с параллельными стратегиями (voting по всем промежуточным ответам).
Как исследовали
Команда из Tsinghua University проверила VF на трёх типах задач: математика (GSM8K, MATH500), научные вопросы (GPQA-Diamond), код и API (HumanEval, MBPP, API-Bank). Тестировали на 8 моделях от 1B до 72B параметров (Qwen2.5, Llama3).
Интересная деталь дизайна: для математических задач везде использовали один и тот же тривиальный ответ "1" — и это работало даже когда ответ должен быть не числом (координаты, выражения). Модель интерпретировала "1" осмысленно в контексте задачи.
Ключевой результат на TTS: Iter-VF превзошёл Self-Correction, PHP, Self-Consistency и Best-of-N при ограниченном бюджете токенов. Критическое отличие — марковость: Iter-VF передаёт только ответ, Self-Correction — весь контекст. Накопление контекста приводило к катастрофическому падению качества у Self-Correction.
Неожиданная находка: VF работает даже с "thought-hidden" моделями (GPT-o1 и подобные), где внутренние рассуждения скрыты. Прирост +3% на MATH500 и +4% на GPQA с минимальным overhead по токенам.
Оригинал из исследования
Контекст: Базовый промпт VF для математических задач (Figure 2 в статье)
Problem: [problem description]
Proposed Answer: 1
First verify the proposed answer. Then give the correct answer.
Контекст: Iter-VF алгоритм (Algorithm 1)
Require: LLM M, problem Q, computation budget B, (optional: initial answer A_0)
for i = 1, ..., B do
Extract final answer A_i from M(VF(Q, A_{i-1}))
end for
return answer A_B
Адаптации и экстраполяции
💡 Адаптация для ревью текстов: Вместо "проверь ответ" — "вот черновик письма клиенту, найди слабые места, потом напиши улучшенную версию"
Промпт:
Задача: Написать письмо клиенту с извинениями за задержку доставки.
Черновик: "Здравствуйте! Ваш заказ задерживается. Извините."
Сначала найди проблемы в черновике (тон, полнота, конкретика).
Затем напиши улучшенную версию.
🔧 Техника: добавить структуру проверки → глубже анализ
Вместо просто "проверь ответ" можно направить проверку:
Проверь предлагаемый ответ по критериям:
1. Математическая корректность вычислений
2. Соответствие условию задачи
3. Логичность рассуждений
Затем дай исправленный ответ.
💡 Экстраполяция: VF + Devil's Advocate
Комбинация VF с ролевой игрой — попроси модель искать ошибки агрессивно:
Задача: {описание}
Предлагаемый ответ: {ответ}
Ты — скептик-аудитор. Твоя цель — найти ВСЕ возможные ошибки, неточности
и слабые места в предлагаемом ответе. Будь придирчив.
После критики дай исправленный ответ.
Ресурсы
Статья: "Verification-First: An Extremely Cheap Way to Improve LLM Reasoning"
Авторы: Shiguang Wu, Quanming Yao (Tsinghua University, Department of Electronic Engineering)
Ссылки из статьи: Chain-of-Thought (Wei et al., 2022), Self-Refine (Madaan et al., 2023), Reflexion (Shinn et al., 2023)
