7 760 статей
arXiv:2611.06372 79 4 нояб. 2026 г. FREE

Give Up to Get More: как распределять бюджет попыток генерации между задачами и почему «сложным — больше» сливает токены

КЛЮЧЕВАЯ СУТЬ
Правило «давать самым сложным задачам максимум попыток» на тяжёлых пакетах сжигает бюджет впустую. Метод распределения попыток (Give Up to Get More) позволяет закрывать почти вдвое больше задач на том же лимите вызовов API. Фишка: вовремя бросай безнадёжные задачи и отдавай попытки середнякам. Сочетание автотестов и априорной истории прошлых запусков поднимает долю решённых тяжёлых тикетов с 14% до 27%.
Адаптировать под запрос
⚡

TL;DR

Оптимальное распределение бюджета повторных попыток (Test-Time Compute Allocation) — это система правил и проверок для ситуаций, когда у вас есть пакет задач (генерация кода под автотесты, решение сложных расчётов, прогон регрессионного набора) и ограниченный бюджет вызовов LLM. Исследование доказывает, что популярная интуиция «давать самым сложным задачам максимум попыток» на тяжёлых наборах задач теряет почти весь возможный выигрыш, а при наличии автопроверки успех зависит не от хитрого алгоритма распределения, а от истории прошлых запусков и защиты верификатора от ложных срабатываний.

Главная боль при пакетном запуске LLM и кодинг-агентов — слив бюджета в бездонную бочку безнадёжных задач. Когда модель в среднем решает задачу редко, правило «чем выше сложность, тем больше попыток» сжигает десятки вызовов API на задачи с околонулевым шансом успеха, отбирая попытки у задач средней сложности, которые модель решила бы со второго-третьего раза. В итоге каскадные и пропорциональные сложности схемы работают вхолостую или даже дают результат хуже обычного равномерного распределения.

Метод решает эту проблему разделением стратегии на два чётких режима: 1. Без автопроверки (статический бюджет) — распределять попытки по колоколообразной кривой (перевёрнутой U): вовремя «сдаваться» на безнадёжных задачах (оставляя им минимум) и отдавать основной бюджет задачам средней сложности. 2. С программным верификатором (автотесты, компилятор) — на новых задачах не тратить токены на дешёвые промпт-оценщики сложности, а крутить простой циклический обход (Round-Robin) нерешённых задач; а на повторяющихся прогонах (регрессии, бенчмарки, эпохи RL) подключать сэмплирование Томпсона с априорной историей прошлых запусков, что почти удваивает долю решённых тяжёлых задач.


🔬

Схема метода

ВХОД: Пакет из N задач + Общий бюджет S = u * N попыток генерации LLM
│
├─► РЕЖИМ А: Верификатора НЕТ (попытки назначаются заранее, например под мажоритарное голосование)
│     ├─ Оценить вероятность успеха p_i по прошлым прогонам родственной модели
│     ├─ Отбросить правило «сложным — больше»
│     └─ Назначить попытки по предельной пользе (перевёрнутая U):
│        k*(r_i) = max(1, ln(r_i / λ) / r_i), где r_i = -ln(1 - p_i)
│        (Безнадёжные и слишком лёгкие задачи получают по 1 попытке; максимум бюджета — середнякам)
│
└─► РЕЖИМ Б: Верификатор ЕСТЬ (юнит-тесты, проверка ответа; решённая задача сразу выбывает из пула)
      ├─ Проверка 1: Ложные срабатывания верификатора (False Acceptance) << средней решаемости?
      │    └─ НЕТ (например, шумная LLM-судья на сложных задачах) → Адаптивное распределение НЕ работает
      └─ ДА (программные тесты / точный чекер): есть ли история прогонов тех же задач (корреляция ρ > 0.55)?
           ├─ НЕТ (новые пользовательские задачи) → Простой циклический обход (Round-Robin) по нерешённым задачам
           └─ ДА (регрессионные тесты, оценка релизов, RL) → Сэмплирование Томпсона (Thompson Sampling)
              с умеренным историческим приором (tempered prior) по квинтилям прошлой решаемости

Вся логика работает как легковесный внешний диспетчер очереди запросов поверх API любой LLM или кодинг-агента.


🚀

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

Задача: Команда разработки в российской ИТ-компании (например, в Яндексе или Авито) каждую ночь гоняет кодинг-агента на пакете из 200 сложных задач по починке багов и миграции легаси-модулей с проверкой через pytest. Бюджет ограничен — в среднем по 16 попыток генерации патча на задачу (всего 3200 вызовов LLM). Раньше команда просила саму модель оценить сложность тикета от 1 до 5 и выделяла «пятёркам» по 45 попыток, но доля закрытых тикетов застряла на 14%.

Конфигурация пайплайна и промпт-инструкция для оркестратора агента:

## Правила диспетчеризации попыток кодинг-агента (по методу Give Up to Get More)

1. ЗАПРЕТ НА ОЦЕНКУ СЛОЖНОСТИ ПРОМПТОМ:
   Не запрашивай у LLM предварительную оценку сложности тикета и не выделяй максимум попыток самым «тяжёлым» задачам — на сложных пакетах это сливает бюджет в задачи с нулевой решаемостью.

2. РЕЖИМ ДЛЯ НОВЫХ ТИКЕТОВ (истории прогонов нет):
   Запускай строго циклический обход (Round-Robin) по всем нерешённым тикетам:
   - Раунд 1: по 1 попытке на каждый из 200 тикетов → прогон `pytest` → прошедшие тест тикеты исключаются из пула.
   - Раунд 2..K: по 1 попытке только на оставшиеся нерешённые тикеты, пока не исчерпан общий бюджет 3200 вызовов.

3. РЕЖИМ ДЛЯ НОЧНОГО РЕГРЕССИОННОГО ПРОГОНА (есть история pass_rate с прошлого релиза):
   - Разбей задачи на 5 групп (квинтилей) по их доле успешных прохождений в прошлых прогонах.
   - Смешай распределение квинтиля с общим распределением пакета (tempered prior с весом w) для защиты от перекосов на лёгких задачах.
   - На каждом шаге выбирай следующий нерешённый тикет через Thompson Sampling: после каждой неудачной попытки апостериорная оценка тикета снижается, и если тикет «безнадёжен» на текущем бюджете, агент автоматически перестаёт жечь на него токены и переключается на решаемые задачи средней сложности.

4. ТРЕБОВАНИЕ К ВЕРИФИКАТОРУ:
   Останавливать попытки только при прохождении строгих автотестов (`pytest` + линтер). Не использовать мягкую оценку LLM-судьи как сигнал остановки (доля ложных принятий должна быть строго ниже 1%, иначе выигрыш обнуляется).

Результат: Убрав каскад «сложным тикетам — максимум попыток» и переключившись на циклический обход для новых задач и сэмплирование Томпсона по истории прошлых релизов для регрессионного пакета, команда перестаёт сжигать сотни вызовов API на неберущихся тикетах. Высвободившийся бюджет автоматически уходит на задачи средней сложности, и доля успешно закрытых автотестами задач на том же бюджете токенов вырастает почти вдвое (в экспериментах автора — с 14% до 27%).


🧠

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

Главная ошибка большинства существующих пайплайнов (автор нашёл её как минимум в 13–32 научных работах по адаптивному вычислению для LLM) — линейное мышление: «если задача сложная, дадим ей побольше попыток». На самом деле математическая ценность одной дополнительной попытки равна $\Delta(p, k) = p(1 - p)^k$. Если задача слишком простая ($p \approx 1$), она решается с первого раза и лишние попытки ей не нужны. Но если задача слишком сложная для текущей модели ($p \approx 0$), то и 1-я, и 16-я попытка дадут почти нулевой прирост. Пик пользы от дополнительной попытки всегда находится посередине — на задачах умеренной сложности ($p = 1/(k+1)$).

На лёгких бенчмарках (вроде GSM8K, где модель решает 80–90% задач с первой попытки) почти все задачи лежат на правом склоне этого «холма», поэтому правило «сложным — больше» случайно оказывается близким к оптимуму. Но как только вы переходите к реальным тяжёлым задачам (сложный код, олимпиадная математика, где решаемость падает ниже 10%), большинство задач оказывается на левом склоне, и попытка накачивать самые глухие задачи токенами приводит к провалу.

При наличии верификатора (автотестов) механика меняется ещё сильнее: - Каждая неудача снижает шансы задачи — если задача не решилась после нескольких попыток, в байесовском смысле она скользит в категорию «безнадёжных», и продолжать долбить её без сильного предварительного знания невыгодно. - Дешёвые угадыватели сложности слепы — попытки оценить сложность новой задачи по длине текста, промптом к самой LLM или парой пробных генераций маленькой модели дают ранговую корреляцию с реальной решаемостью ниже порога окупаемости ($\rho \le 0,3\text{--}0,55$). Поэтому на новых задачах честный Round-Robin по нерешённым примерам бесплатен и оптимален. - Асимметрия ошибок верификатора — если автотест случайно забракует верное решение (ложный отказ до 20%), алгоритм почти не теряет эффективности. Но если «мягкий» верификатор (например, нейросетевая модель награды) в 5% случаев примет неправильный ответ за верный, система досрочно снимет задачу с пробега с ошибкой, и весь выигрыш умрёт.


📋

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

Используй этот шаблон в качестве чек-листа и технического задания для кодинг-агента, когда нужно написать скрипт пакетного прогона LLM (Best-of-N, генерация кода под тесты, прогон датасета оценки):

Мне нужно написать скрипт-диспетчер для пакетного запуска LLM на наборе из {число_задач} задач по теме «{описание_задачи}» с общим бюджетом в среднем {бюджет_на_задачу} попыток на задачу.

Спроектируй диспетчер строго по следующим правилам из исследования Give Up to Get More:
1. Тип проверки ответа: {тип_верификатора: нет_верификатора | программный_тест | llm_судья}.
   - Если выбран llm_судья на сложных задачах: добавь жёсткие программные проверки (схема, компиляция, инварианты), чтобы снизить вероятность ложного принятия (false acceptance) ниже 1%.
2. Наличие истории прошлых прогонов на этих же задачах: {есть_ли_история: нет_новые_задачи | да_есть_статистика_прошлых_запусков}.
   - Если «нет_новые_задачи» и есть верификатор: реализуй чистый Round-Robin по пулу нерешённых задач без оценки сложности промптом.
   - Если «да_есть_статистика_прошлых_запусков» и есть верификатор: реализуй Thompson Sampling с умеренным приором (tempered prior, вес смешивания w={вес_w_например_0.7}) по квинтилям исторического pass_rate.
   - Если верификатора нет, но есть оценки решаемости p_i: распредели число попыток k_i статически по формуле предельной ценности k*(r_i) = max(1, ln(r_i / λ) / r_i), где r_i = -ln(1 - p_i), подобрав λ под общий бюджет.

Что подставлять в плейсхолдеры: - {число_задач} и {бюджет_на_задачу} — размер вашего пакета и среднее число вызовов API на один пример (например, 100 задач по 8 попыток = 800 вызовов). - {тип_верификатора} — чем проверяется успех попытки (юнит-тесты, парсер, точный ответ или отсутствие проверки). - {есть_ли_история} — гоняете ли вы этот набор задач повторно (регрессионный стенд, бенчмарк при смене промпта/модели) или это разовый поток новых запросов.

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

Вот шаблон проектирования диспетчера попыток генерации LLM (Give Up to Get More). Адаптируй его и напиши готовый Python-скрипт под мою задачу: [опиши свой пайплайн пакетной генерации или тестирования].
Задавай вопросы, чтобы заполнить поля.

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

LLM уточнит, чем именно ты проверяешь правильность ответа в коде, какова примерная доля успешных ответов с первой попытки и сохранились ли логи прошлых прогонов — после чего выдаст код диспетчера без типичных ловушек «сложным — больше».


⚠️

Ограничения

⚠️ Для новых разовых запросов умные политики не дают выигрыша: Если задачи приходят впервые и у вас нет статистики их прошлых прогонов, ни один из дешёвых способов заранее угадать сложность (оценка промптом, текстовые признаки, пробные запуски мелкой модели) не обгоняет обычный циклический обход Round-Robin.

⚠️ Уязвимость к ложным срабатываниям LLM-судьи: Если вместо строгих юнит-тестов или точного чекера использовать неточную модель награды (Reward Model), которая хотя бы в 5% случаев принимает неверный ответ за верный, весь прирост от умного распределения бюджета полностью исчезает.

⚠️ Только для независимых попыток с бинарным успехом: Выводы проверены на задачах, где ответ либо верен, либо нет (код, математика, доказательства), а попытки независимы. Схемы, где следующая попытка получает в промпт текст ошибки компилятора от предыдущей попытки, в этой математической модели не тестировались.


🔍

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

Исследователь Джинхён Пэ из Университета иностранных языков Хангук сначала провёл строгий аудит 221 научной статьи по адаптивному распределению вычислений LLM (отобранных из 3016 работ) и сопоставил их с 12 классическими дисциплинами — от теории оптимального поиска Купмана (1957) и расписаний рестартов в SAT-солверах до краудсорсинга и отбора роллаутов в RL. Оказалось, что в классических областях давно отсекают безнадёжные задачи (правило перевёрнутой U), тогда как в 70% направленных работ по инференсу LLM авторы упорно отдают максимум бюджета самым сложным примерам. Чтобы измерить цену этой ошибки, автор прогнал масштабные симуляции на сохранённых пулах генераций (по 10 000 попыток на задачу из датасета Large Language Monkeys для MATH, GSM8K, CodeContests и MiniF2F на моделях Pythia, Gemma, Llama-3 8B/70B, плюс 1800 попыток на задачу из PRM800K для GPT-4 и выборки GPT-4o-mini) и отдельно воспроизвёл результаты на свежих генерациях моделей Qwen2.5. На лёгких задачах (GSM8K на Llama-3-8B и GPT-4o-mini, где средняя решаемость 77–93%) правило «сложным — больше» забирает 93–102% от идеального оракула. Но на сложных задачах (CodeContests и MATH на младших моделях, где средняя решаемость 1,3–9,3%) то же самое правило даже при знании истинных вероятностей успеха захватывает от 0% до 13% возможного прироста, а каскадное разбиение на уровни (21/30/45 попыток) вообще уводит результат в минус на 16–40% относительно равномерной раздачи! Зато при наличии верификатора и истории прошлых прогонов родственной модели (корреляция Спирмена $\rho = 0,66\text{--}0,93$) сэмплирование Томпсона поднимает долю решённых задач на самом тяжёлом пакете с 14% до 27% (+13 п.п.), тогда как дешёвые текстовые и LLM-приоры застревают на корреляции $\rho \le 0,3\text{--}0,55$ и дают не более +1,7 п.п.


💡

Адаптации и экстраполяции

🔧 Техника: Быстрая диагностика своего бенчмарка перед выбором стратегии → защита от потери бюджета на каскадах

Прежде чем внедрять любую сложную схему маршрутизации попыток в своём пайплайне, посчитай по 1 пробному прогону среднюю долю успеха $\bar{p}$ и умножь на плановый бюджет попыток $u$ на задачу: - Если $\bar{p} > 0,5$ (модель решает больше половины задач с первой попытки): стандартные правила «давать сложным больше попыток до лимита» работают отлично и забирают 50–100% возможного выигрыша. - Если $\bar{p} < 0,15$ (тяжёлый пакет задач, код со сложными тестами): немедленно отключи любые правила, накидывающие попытки за «высокую сложность» или низкую уверенность модели — переключись на Round-Robin с автотестами или отсекай задачи, которые не решились после первых $k$ попыток.


🔗

Ресурсы

  • Исследование: Give Up to Get More: Priors, Not Policies, Govern Test-Time Compute Allocation (arXiv:2611.06372v1, ноябрь 2026)
  • Автор: Jinhyung Bae (Department of Industrial and Management Engineering, Hankuk University of Foreign Studies, Yongin, Republic of Korea)
  • Ключевые отсылки и датасеты в работе: пулы многократного сэмплирования Large Language Monkeys (Brown et al., 2024), PRM800K (Lightman et al., 2024), Weaver (Saad-Falcon et al., 2025); классическая теория оптимального распределения поисковых усилий (Koopman, 1957; Stone, 1975); индексные политики для «ухудшающихся рук» (Gittins, 1979; Weitzman, 1979).

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

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

Правило «давать самым сложным задачам максимум попыток» на тяжёлых пакетах сжигает бюджет впустую. Метод распределения попыток (Give Up to Get More) позволяет закрывать почти вдвое больше задач на том же лимите вызовов API. Фишка: вовремя бросай безнадёжные задачи и отдавай попытки середнякам. Сочетание автотестов и априорной истории прошлых запусков поднимает долю решённых тяжёлых тикетов с 14% до 27%.

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

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

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

Если шанс решить задачу близок к нулю, даже 16-я или 45-я попытка даст почти нулевой прирост. Попытки оценить сложность новой задачи промптом к модели дают слабую связь с реальной решаемостью (корреляция 0,3–0,55) и не окупаются. Каждая неудача на автотестах снижает шансы задачи, поэтому долбить её дальше невыгодно. Это как на сложном экзамене: глупо тратить весь час на одну нерешаемую олимпиадную задачу, когда за это время можно дожать пять задач среднего уровня. Но если неточный судья из нейросети ошибочно примет всего 5% неверных ответов за верные, весь выигрыш обнулится.

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

Пакетный запуск больших языковых моделей и кодинг-агентов → конкретно для генерации кода под автотесты, ночных регрессионных прогонов и сложных расчётов, особенно когда бюджет вызовов API ограничен, а базовая решаемость пакета ниже 10–15%. НЕ подходит для мягкой проверки через неточную нейросеть-судью без строгих тестов и для цепочек, где в промпт следующей попытки передаётся текст ошибки компилятора.

Мини-рецепт

1. Отключи промпт-оценщики сложности: перестань просить модель заранее угадывать тяжесть задачи от 1 до 5.
2. Поставь жёсткий фильтр: проверяй ответы только строгими автотестами с долей ложного принятия ниже 1%.
3. Крути раундами новые задачи: если истории прогонов нет, давай по 1 попытке каждому нерешённому тикету по кругу.
4. Подключи историю на регрессиях: разбей задачи на 5 групп по прошлой решаемости и снижай приоритет тикета после каждого провала теста.

Примеры

[ПЛОХО] : Оцени сложность каждого из 200 тикетов от 1 до 5. Выдели самым сложным тикетам на 5 баллов по 45 попыток генерации патча, а простым — по 2 попытки.
[ХОРОШО] : Запусти пакет из 200 тикетов с бюджетом 3200 вызовов и проверкой через pytest. Для новых тикетов используй циклический обход по 1 попытке на нерешённую задачу. Для регрессионных тикетов разбей пул на 5 групп по прошлой доле успешных тестов и переключай бюджет с безнадёжных задач на задачи средней сложности.
Источник: Give Up to Get More: Priors, Not Policies, Govern Test-Time Compute Allocation
ArXiv ID: 2611.06372 | Сгенерировано: 2026-11-09 13:06

Проблемы LLM

ПроблемаСутьКак обойти
Выделение максимума попыток самым сложным задачам сливает бюджет токеновПри пакетном запуске даёшь самым тяжёлым задачам по 45 попыток генерации, а простым — мало. На сложных наборах большинство таких задач вообще не по зубам модели. Десятки вызовов сгорают впустую на безнадёжных задачах, отбирая бюджет у решаемых задач средней сложностиБез автопроверки отдавай максимум попыток задачам средней сложности, а на безнадёжных оставляй по 1 попытке. При наличии автотестов крути циклический обход по нерешённым задачам или используй историю прошлых запусков
Дешёвая оценка сложности задачи через сам запрос не помогает распределить попыткиПросишь модель заранее оценить сложность задачи от 1 до 5 или смотришь на длину текста, чтобы выдать больше попыток. Такие оценки плохо совпадают с реальной решаемостью задачи (ранговая корреляция не выше 0,3–0,55). В итоге умное распределение работает не лучше слепого прогонаНа новых задачах без истории прошлых прогонов откажись от предварительной оценки сложности. Запускай простой циклический обход по одной попытке на каждую нерешённую задачу, пока не пройдёт автотест
Неточная модель-судья обнуляет выигрыш от повторных попыток генерацииИспользуешь нейросетевого судью вместо строгих автотестов для остановки попыток на сложных задачах. Если судья хотя бы в 5% случаев принимает неверный ответ за верный, система досрочно закрывает задачу с ошибкой. Весь прирост от перебора вариантов полностью исчезаетОстанавливай генерацию только по строгим программным проверкам: автотестам, компиляции, проверке схемы. Доля ложных принятий неверного ответа должна быть строго ниже 1%

Методы

МетодСуть
Циклический обход и отбор по истории прошлых запусков для пакета задачПри пакетной генерации с автотестами раздели стратегию на два режима. Для новых задач крути простой циклический обход: Раунд 1 — по 1 попытке на все задачи, прошедшие тест выбывают; Раунд 2..K — по 1 попытке только на оставшиеся нерешённые. Для регулярных прогонов тех же задач разбей их на 5 групп по прошлой доле успеха и выбирай следующую задачу через алгоритм Томпсона: с каждой неудачей шанс задачи падает, и безнадёжные задачи перестают жечь бюджет. Почему работает: Пик пользы от дополнительной попытки всегда лежит на задачах средней сложности, а не на безнадёжных. Когда применять: пакетная починка кода под pytest, ночные регрессионные прогоны, решение расчётных задач с проверкой. Когда не работает: одиночный запрос, отсутствие точной проверки ответа (ложные принятия выше 1%)
Распределение попыток по перевёрнутой дуге без автопроверкиЕсли программного проверочного теста нет и число попыток нужно назначить заранее (например, под голосование большинства), оцени шанс успеха по прошлым запускам и назначь попытки по формуле предельной пользы k*(r) = max(1, ln(r / λ) / r). Слишком лёгким и безнадёжным задачам дай по 1 попытке, а основной бюджет отдай задачам средней сложности. Почему работает: Лёгкая задача решается с первого раза, а на глухой задаче и 1-я, и 16-я попытка дают околонулевой прирост. Когда применять: статическое распределение бюджета вызовов перед голосованием большинства при известной статистике прошлых прогонов. Когда не работает: совершенно новые задачи без истории решаемости

Тезисы

ТезисКомментарий
Максимальную пользу от дополнительных попыток генерации дают задачи средней сложностиЦенность новой попытки определяется формулой p(1 - p)^k. Если задача слишком простая, она решается сразу. Если задача слишком сложная для модели, новые попытки сгорают вхолостую. Выигрыш сосредоточен посередине — на задачах, которые модель берёт со 2–5 раза. Применяй: Вовремя сдавайся на глухих задачах после нескольких неудач и переводи бюджет попыток на задачи средней сложности
Ложное принятие неверного ответа при проверке опаснее ложного отказаЕсли строгий тест случайно забракует верное решение в 20% случаев, система просто сделает ещё одну попытку и почти не потеряет в качестве. Но если мягкий судья в 5% случаев примет брак за успех, задача досрочно снимется с пробега с ошибкой. Применяй: Настраивай проверочные тесты максимально строго — лучше отбросить сомнительное решение, чем пропустить ошибку
История прошлых прогонов тех же задач удваивает долю решений при том же бюджетеКогда набор задач запускается регулярно, статистика прошлых успехов даёт точный ориентир решаемости (корреляция выше 0,55). Опора на эту историю позволяет не тратить вызовы на неберущиеся задачи и поднимает долю закрытых задач с 14% до 27% на том же числе вызовов. Применяй: Сохраняй долю успешных попыток по каждой задаче с прошлых релизов и подавай её в диспетчер очереди
📖 Простыми словами

Give Up to Get More: Priors, Not Policies, Govern Test-Time Compute Allocation

arXiv: 2611.06372

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

Это как пытаться научить кота квантовой физике, выделяя на это десять часов в день вместо одного. Кот не станет умнее от количества потраченного времени, он просто дольше будет смотреть на тебя с непониманием. В то же время, если ты дашь гениальному студенту пять минут на сложнейший экзамен, он тоже провалится. Весь профит сидит в золотой середине: нужно давать ресурсы тем задачам, которые модель «почти» тянет, а не тем, где она безнадежно лажает или щелкает их как орехи.

Авторы разнесли в щепки популярный подход адаптивного вычисления, который юзают в десятках научных работ. Главная фишка тут — приоритет априорных данных, а не хитрые стратегии. Математика проста: ценность каждой новой попытки падает по экспоненте. Если вероятность успеха задачи около нуля, то и шестнадцатая попытка даст ровно столько же — ничего. Реально работают только две вещи: знание истории прошлых запусков и защита верификатора. Если твой автотест (например, pytest) кривой и пропускает галлюцинации модели за чистую монету, никакое распределение бюджета тебя не спасет.

Тестировали это на кодинг-задачах, но принцип универсален для любого массового продакшена. Будь то генерация тысяч описаний товаров, автоматизация техподдержки или миграция легаси-кода — везде работает одно правило. Вместо того чтобы заставлять модель биться головой об стену на самых сложных тикетах, нужно вычислить задачи умеренной сложности. Именно там дополнительные попытки превращают провал в успех. SEO для мозгов AI заканчивается там, где начинается чистая статистика вычислений.

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

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

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

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