Девять замеров промптинга и кластера агентов: где приём даёт +48 пунктов, а где различить нельзя
Про промптинг написано много, и почти всё написано одинаково: приём, красивый пример, вывод «работает». Чего в таких статьях обычно нет — числа, при котором приём перестаёт работать, и признания, что на каком-то материале он не сработал вовсе.
У нас девять замеров подряд. Не один — девять, и они спорят друг с другом. На одном материале лучший приём даёт +48 пунктов, на другом семь приёмов из восьми проигрывают обычному вопросу, на третьем мы честно не смогли различить ничего. Ниже — все девять: что спрашивали, как мерили, что вышло и чего этот ответ не говорит.
Отдельный раздел — «Чего мы не мерили». Он обязателен, и он не отговорка: из него видно, где кончается наше знание. Например, вопрос «стоит ли писать компоненты моделью» мы не мерили ни разу, и в статье об этом будет сказано прямо, а не заполнено рассуждением.
Пять ответов сразу
| вопрос | ответ | откуда |
|---|---|---|
| Есть ли вообще разница между вариантами промпта? | Есть, и крупная — но только там, где ответ надо вывести. На арифметике +28,8 пункта, на свежепорождённых задачах +48,0. На вопросах с вариантами ответа — ноль. | замер 9 |
| Как ориентироваться на тесты? | У нас есть материал, где ответ проверяется прогоном тестов (HumanEval). Там ни один приём не поднялся выше обычного вопроса, а худший потерял 14,4 пункта. | замер 9 |
| Что даёт кластер агентов и подробный бриф? | Ни один из пяти заходов не показал прибавки. Три кончились «различить нельзя», один не доведён, один показал прибавку, которая исчезает при правильной мере. | замеры 1, 2, 3, 5, 7 |
| Что даёт Digit как площадка? | Устройство собирается и границы записи держат файловые инструменты — но не терминал. Прибавки от трёхуровневого кластера мы не показали. | замеры 5, 7 |
| Писать компоненты моделью — стоит? | Не мерили. Ни один из девяти замеров этого вопроса не задавал. | — |
Одной строкой, если дальше читать некогда: дай модели считать вслух там, где надо считать; не мешай ей там, где надо писать код; и не жди, что устройство работы агентов окупится само по себе — у нас оно не окупилось ни разу.
Что мы спрашивали
Вопросов у нас было три, и они возвращались снова и снова, потому что первые ответы нас не устраивали.
- Меняет ли что-нибудь то, как написан промпт? Промпт — это текст, который вы отправляете модели. Восемь известных приёмов против baseline: обычного промпта, где стоит только вопрос и никаких инструкций.
- Покупает ли что-нибудь устройство работы агентов? Подробный бриф против короткого; кластер (надагент раздаёт работу ведущим, ведущие — рабочим) против одного агента, который делает всё подряд.
- Сколько это стоит? В вызовах, в токенах, в часах и — там, где мы платили деньгами, — в долларах.
Все девять замеров — это эти три вопроса на разном материале. Каталоги у нас
называются measure…measure9, и дальше по тексту они идут как «замер 1» …
«замер 9» в том же порядке.
Девять замеров одним экраном
| замер | что спрашивали | на чём мерили | что вышло |
|---|---|---|---|
| 1 | даёт ли подробный бриф лучший результат, чем короткая формулировка той же задачи | 3 задачи в живом коде, 6 прогонов агентов, слепой судья | различить не удалось: направление разницы непостоянно (1/2, 2/1, 2/2 дефекта) |
| 2 | даёт ли подробный бриф прибавку в ответах о задаче | 12 ячеек работы, 4 модели, 2496 разборов | прибавки нет ни на одной модели по заглавной мере |
| 3 | даёт ли кластерное устройство работы измеримую прибавку | 6 задач-долгов в живом коде, две группы по два повтора | различить нельзя: обе группы взяли 12 из 12; заявленная форма кластера не собралась |
| 4 | различаются ли приёмы промптинга между собой | те же 12 ячеек, 4 модели, 11 808 вызовов | ни на одной модели ни один приём не выиграл у обычного вопроса |
| 5 | покупает ли трёхуровневый кластер что-нибудь на Digit | — | не доведён: остановлен собственным заранее объявленным правилом |
| 6 | держатся ли приёмы на большом банке вопросов | 120 задач об истории репозиториев, 4 модели + Claude Code, 12 240 вызовов | семь приёмов из восьми проиграли обычному вопросу |
| 7 | что даёт каждый уровень устройства работы и мастер-промпт | 12 задач, две полных сетки по девять ячеек | различить нельзя: пол — 0 зелёных проверок из 12 во всех девяти ячейках |
| 8 | ломается ли картина замера 6 на моделях 30B+ | те же задачи, лестница моделей от 0,87 до 27 миллиардов параметров | не ломается; а то, что меняется с размером, меняется не в ту сторону: порог вверх пройден только на самой малой ступени |
| 9 | работают ли приёмы там, где есть что выводить | 90 задач четырёх видов, 9900 вызовов | работают: +28,8 и +48,0 пункта; на коде вредят |
Замеры 1, 3, 5, 7 — про агентов и устройство работы. Замеры 2, 4, 6, 8, 9 — про текст промпта. Замер 9 — единственный, где ответ вышел уверенно положительным, и дальше видно, почему: он единственный, где материал состоял из задач, у которых есть внутренний вывод.
Как мы мерили
Одна оснастка на все девять замеров, и её стоит описать до чисел — иначе числа нечем взвесить.
План замера пишется до первого вызова и хешируется. Мы называем это предрегистрацией: гипотеза, материал, правило разбора, порог и — обязательно — фальсификаторы, то есть заранее объявленные исходы, при которых гипотеза считается опровергнутой. Любая последующая правка оформляется отдельной поправкой со своим хешем, а не переписыванием текста. Это защита не от злого умысла, а от себя: очень легко после чисел вспомнить, что «мы, конечно, и имели в виду вот эту меру».
Ответ проверяет машина, а не человек и не другая модель. Число, буква, прогон тестов, код возврата команды. Судья детерминирован и слеп: он получает только пару «вопрос — ответ», а к какой руке и к какой модели этот ответ относится, пришивается к результату после оценки.
Порог двойной. Разница засчитывается, только если выполнены оба условия: 95-процентный промежуток парной разницы не накрывает ноль и модуль разницы больше размаха между повторами одной и той же руки. Второе условие отсекает случай, когда разница меньше, чем шум между двумя прогонами одной и той же постановки. Если хоть одно условие не выполнено, мы пишем «различить нельзя» — и это не вежливый способ сказать «не сработало». Это третий исход, и он означает ровно то, что написано: этот замер этого не различает.
Считаются три числа, а не одно. Верных, «не знаю» (отказ) и уверенно неверных. Без колонки отказов любой вывод «приём X хуже» неверен — и ниже видно, почему это не педантизм, а главный источник ошибок в таких замерах.
Результат 1. Приёмы работают там, где есть что выводить
Это замер 9 — самый свежий и единственный с уверенно положительным ответом. 90 задач четырёх видов, 9900 вызовов, все ответы проверяет машина. Вариантов промпта пятнадцать: девять приёмов и шесть зеркал, у которых поменяна одна только фраза про формат ответа, — зачем они, видно в следующем разделе.
| какие задачи | baseline | что сработало | разница, пунктов |
|---|---|---|---|
| Арифметика — GSM8K: школьные задачи в несколько действий | 41,6 % | self-consistency | +28,8 |
| Свежие задачи — та же арифметика, но придуманная нашим генератором уже после того, как модели были обучены | 44,0 % | self-consistency | +48,0 |
| Эрудиция — MMLU: вопрос и четыре варианта ответа | 55,2 % | ничего не сработало | все девять в пределах ±7 |
| Код — HumanEval: «напиши функцию на Python», ответ проверяется прогоном тестов | 53,6 % | ничего; хуже всех tree of thoughts | −14,4 |
Разница считается в процентных пунктах: baseline берёт 41,6 % задач, а self-consistency 70,4 % — это и есть +28,8 пункта.
Девять вариантов промпта, которые сравнивались:
- baseline — только вопрос, никаких инструкций; с ним сравнивают остальные;
- chain-of-thought — велеть модели рассуждать по шагам вслух, прежде чем назвать ответ;
- self-consistency — задать один и тот же вопрос пять раз и взять ответ, который встретился чаще;
- few-shot — положить в промпт три решённые задачи того же вида;
- zero-shot RCTF — роль, контекст, задача, формат; решённых примеров нет;
- tree of thoughts — попросить три варианта решения и выбрать лучший по объявленным критериям;
- chain-of-verification — черновик, три проверочных вопроса к нему, правка;
- полный бриф — наш формат: постановка задачи целиком, с ролью, известным, границами и тем, чем она опровергается;
- мастер-промпт — наш сборный промпт: контекст вызова, полномочия, порядок рассуждения.
Первые шесть — общепринятые приёмы, их описания легко найти по этим названиям. Последние два — наши собственные, и в чужих статьях вы их не встретите.
Вот baseline — строчка про вид задачи, текст задачи и больше ничего:
Задача на счёт в несколько шагов. Текст задачи — по-английски, как в источнике.
ВОПРОС
Leila buys 3 cucumbers from the market. Cucumbers are $2 each. Jack buys 5 tomatoes from the grocery store. Tomatoes are $1 each. Chase buys 1 head of lettuce from the farmer’s market. Lettuce cost $3 each. Together, how much did the three of them spend to make a salad for the potluck?
А вот победитель — self-consistency. Сам промпт при этом обычный chain-of-thought, а весь приём в том, что запрос повторяется пять раз и берётся самый частый ответ:
Задача на счёт в несколько шагов. Текст задачи — по-английски, как в источнике.
ПОСТАНОВКА
РОЛЬ. Ты счётчик. Тебе дают текстовую задачу, и ты доводишь расчёт до одного числа.
КОНТЕКСТ. Задача взята из открытого набора школьных задач. Ответ — целое число; калькулятора и выполнения кода у тебя нет, считай сам.
ЗАДАЧА. Реши заданную ниже задачу и назови число.
ФОРМАТ. Формат ответа предписан в конце запроса и обязателен.
ВОПРОС
Leila buys 3 cucumbers from the market. Cucumbers are $2 each. Jack buys 5 tomatoes from the grocery store. Tomatoes are $1 each. Chase buys 1 head of lettuce from the farmer’s market. Lettuce cost $3 each. Together, how much did the three of them spend to make a salad for the potluck?
ПОРЯДОК ОТВЕТА
Прежде чем отвечать, рассуждай по шагам и пиши рассуждение вслух:
1. назови, что именно спрашивают;
2. выпиши, что дано, — величины, условия, краевые случаи;
3. веди решение по шагам, каждый шаг отдельной строкой;
4. проверь полученное на том, что дано: сходится ли;
5. назови ответ.
ПОСЛЕДНЕЙ строкой ответа напиши ровно `ОТВЕТ: <число>`, где <число> — целое число без единиц измерения, знака валюты и разделителей разрядов.
Если не знаешь — `ОТВЕТ: НЕ ЗНАЮ`.
Копируйте и пробуйте: это не пересказ, а тот самый текст, который уходил в модель. Блок «ПОРЯДОК ОТВЕТА» и есть chain-of-thought. Если пять вызовов дорого, берите один: это будет чистый chain-of-thought, дословно тот же промпт без голосования. Он почти догоняет.
| какие задачи | baseline | self-consistency | chain-of-thought |
|---|---|---|---|
| Арифметика (GSM8K) | 41,6 % | +28,8 | +23,2 |
| Свежие задачи | 44,0 % | +48,0 | +40,0 |
| Эрудиция (MMLU) | 55,2 % | различить нельзя | различить нельзя |
| Код (HumanEval) | 53,6 % | различить нельзя | различить нельзя |
| Всё вместе | 49,1 % | +17,1 | +10,9 |
Результат 2. Самая дорогая фраза в промпте — запрет думать
Самое дорогое, что можно дописать в конец промпта, — «Ответь ровно одной строкой. Ничего больше не пиши». Вот его цена при нулевом приёме: baseline против baseline, отличается ровно эта фраза.
| какие задачи | «ответь ровно одной строкой» | «последней строкой ответа» | разница |
|---|---|---|---|
| Всё вместе | 32,2 | 49,1 | −16,9 |
| Арифметика | 9,6 | 41,6 | −32,0 |
| Свежие задачи | 6,7 | 44,0 | −37,3 |
| Код | 48,0 | 53,6 | −5,6 |
| Эрудиция | 54,4 | 55,2 | −0,8 |
На арифметике это 32 пункта — больше, чем прибавляет любой приём замера. Там, где рассуждать не о чем (эрудиция — это выбор буквы из четырёх), фраза не стоит ничего: −0,8 пункта, порог не пройден.
Дальше страннее. Наложите этот запрет на все девять вариантов сразу — и они станут почти неразличимы: 31,8–38,9 % против 32,2 % у baseline. Пробивается только chain-of-thought: 24,8 % против 9,6 % на арифметике и 24,0 % против 6,7 % на свежих задачах. Модель ухитряется считать даже в одну строку. Но это в разы меньше, чем те же 64,8 % и 84,0 %, когда рассуждать разрешено.
И наоборот: baseline вообще без всяких требований к формату даёт 60,9 % против 49,1 % у него же под «последней строкой». Любое требование к формату что-то стоит — вопрос только сколько.
Это первое, что стоит унести из статьи. Если вы сравниваете два промпта, у которых требование к формату разное, вы меряете формат, а не приём. Разница между форматами больше, чем разница между всеми восемью приёмами.
Результат 3. Где приём вредит: код и право промолчать
На коде выше baseline не поднялся никто. Baseline — 53,6 %, tree of thoughts — 39,2 %, chain-of-thought — 44,0 %.
Причина видна в отказах — так мы называем случаи, когда модель ответила «не знаю». Baseline на коде молчит в 26,4 % случаев, зато выданное им проходит тесты в 72,8 %. Chain-of-thought молчит в 0,8 % — и его код проходит тесты в 44,4 %. Приём заставляет модель всегда что-нибудь выдать, и выданное чаще не работает. Там, где ответ проверяется прогоном тестов, а не сравнением с эталоном, это стоит дороже всего.
Результат 4. На вопросах-припоминаниях приёмы проигрывают
Замеры 4 и 6 брали другой материал: вопросы с готовыми вариантами об истории наших репозиториев — какой файл правил коммит, существует ли путь в дереве, каким коммитом файл появился впервые. Отвечающий не видит дерева: у него только заголовок коммита и список вариантов. То есть задача на припоминание факта, а не на вывод.
Замер 6: банк из 1238 задач, выборка 120, 15 типов вопроса, четыре открытые модели, 12 240 вызовов (11 520 через ollama плюс 720 отдельной лигой Claude Code). Случайное угадывание на этой выборке — 28,72 %.
| рука | верных, % | разница с baseline | промежуток разницы | порог |
|---|---|---|---|---|
| baseline | 37,6 | — | — | опора |
| self-consistency | 40,1 | +2,5 | [−2,4; 7,7] | различить нельзя |
| chain-of-thought | 30,0 | −7,5 | [−12,1; −2,9] | вниз |
| мастер-промпт | 26,3 | −11,3 | [−16,1; −6,4] | вниз |
| tree of thoughts | 25,9 | −11,6 | [−16,8; −6,5] | вниз |
| полный бриф | 19,2 | −18,4 | [−24,0; −12,7] | вниз |
| chain-of-verification | 18,7 | −18,9 | [−23,9; −13,7] | вниз |
| few-shot | 16,8 | −20,8 | [−26,2; −15,4] | вниз |
| zero-shot RCTF | 15,6 | −22,0 | [−27,1; −17,0] | вниз |
Семь приёмов из восьми значимо ниже обычного вопроса, выше — ни один. Замер 4 на том же роде материала (12 ячеек нашей же работы, четыре модели, 11 808 вызовов) дал то же: ни на одной из четырёх моделей ни один приём не выиграл у обычного вопроса.
Но читать это как «приёмы не работают» нельзя, и вот почему. Половина проигрыша — плата за честность: полный бриф и chain-of-verification прямо велят отвечать «не знаю», когда ответ не следует из данных, и отказываются в 46–56 % случаев, а доля верных считает отказ ошибкой. Вторая половина — свойство материала: вывести ответ не из чего, выводить нечего, и приём, который заставляет модель рассуждать, заставляет её рассуждать в пустоте.
Именно из-за этого и появился замер 9 с задачами, где есть что выводить. Предрегистрация замера 9 начинается с признания: «Постановка была неверна, и это признано».
Отдельная лига того же замера — Claude Code без инструментов, 45 задач. Baseline — 48,7 %, полный бриф — 28,2 % (−20,5, промежуток [−33,3; −7,7]), мастер-промпт — 35,9 % (−12,8, [−23,1; −2,6]). Оба наших собственных формата значимо ниже обычного вопроса. Механизм тот же: полный бриф даёт 31 отказ из 45, обычный вопрос — ноль.
Результат 5. Размер модели ничего не чинит
Возражение, которое мы получили после замера 6, звучало разумно: «замер остановился на 14 миллиардах параметров, а на моделях покрупнее картина поменяется». Замер 8 проверял ровно это: тот же материал, те же девять рук, лестница одного семейства от 0,87 до 27 миллиардов параметров — тридцать раз по размеру при одном рецепте обучения. Меняется ровно один признак.
| ступень | baseline, % | лучшая рука | её доля, % | разница | прошла порог вверх | рук ниже baseline |
|---|---|---|---|---|---|---|
| 0,87B | 27,9 | chain-of-thought | 40,4 | +12,5 | self-consistency (+11,5) | 0 из 8 |
| 2,3B | 38,5 | zero-shot RCTF | 40,4 | +1,9 | нет | 3 из 8 |
| 4,7B | 48,1 | tree of thoughts | 42,3 | −5,8 | нет | 5 из 8 |
| 9,7B | 44,2 | tree of thoughts | 50,0 | +5,8 | нет | 3 из 8 |
| 27B | 46,2 | self-consistency | 55,8 | +9,6 | нет | 4 из 8 |
Картина не сломалась — она сломалась не в ту сторону. Порог вверх пройден только на самой маленькой ступени. Наверху лестницы, где гипотеза требовала выигрыша, выше обычного вопроса не оказалось ни одной руки. Наблюдаемая зависимость от размера обратная: чем крупнее модель, тем увереннее обычный вопрос и тем больше приёмов оказывается ниже него.
На материале замера 9, где есть что выводить, то же самое видно с другой стороны:
| размер модели | baseline | self-consistency | разница |
|---|---|---|---|
| 0,87B | 16,1 | 40,6 | +24,5 |
| 2,3B | 28,9 | 72,2 | +43,3 |
| 4,7B | 87,8 | 87,8 | 0,0 |
| 9,7B | 96,7 | 90,0 | −6,7 |
| 27B | 97,8 | 97,8 | 0,0 |
На младших моделях приём вытаскивает результат в два с половиной раза. На старших добавлять некуда: baseline и так берёт 98 из 100. Это не «на больших моделях приёмы бесполезны» — это «материал кончился раньше модели». Если вы работаете с крупной моделью на простых задачах, приём вам ничего не даст, и это не про приём.
Результат 6. Кластер агентов и подробный бриф: пять заходов, ни одной прибавки
Это вторая половина работы, и она отвечает на вопрос «а что даёт устройство работы агентов». Коротко: у нас оно не окупилось ни разу, но ни один из пяти заходов не даёт права сказать «кластер не помогает» — они говорят разное и по разным причинам.
Заход 1 (замер 1): подробный бриф против короткого на живом коде
Три задачи в настоящем форке оконного менеджера cwm, каждая делается дважды: один агент получает полный бриф (роль, известное с провенансом, соседи и границы записи, одна задача, фальсификатор, готовность как вывод команд), другой — ту же задачу одной-двумя фразами. Шесть прогонов, шесть клонов, шесть веток, слепой судья, который не знал ни о группах, ни о том, что идёт замер.
Все 12 критериев приёмки из 12 — «выполнен»: ни одного «не выполнен», ни одного «проверить не удалось». Первичная метрика — дефекты, найденные судьёй:
| пара задач | полный бриф | короткий | направление |
|---|---|---|---|
| перестановка окна в стопке | 1 дефект | 2 | бриф лучше на 1 |
| выключатель прыжка курсора | 2 | 1 | короткий лучше на 1 |
| согласование групп с лентой | 2 | 2 | ничья |
Порог был объявлен до прогона: разница засчитывается, только если её направление одинаково во всех трёх парах. Оно не одинаково. Исход — «различить не удалось», и это не то же самое, что «разницы нет».
Единственная метрика с одинаковым направлением — расход: короткий бриф оказался дороже во всех трёх парах (+21 %, +73 %, +39 % токенов). Но и это не победа брифа: дороже — потому что сделано больше. Разделить «дороже, потому что бриф хуже» и «дороже, потому что сделано больше» этот прогон не может.
Зато у брифа обнаружилось измеримое действие там, где его не искали — в границах. Файлов, изменённых за пределами объявленного набора: с полным брифом 1, 0 и 0; с коротким — 1, 3 и 12. В худшем случае ветка без границ вошла двенадцатью файлами за набор, из них семь — в чужой уже влитый стек, и переписала там числа правдоподобными. Полный бриф стоит не тем, что делает работу лучше, а тем, что удерживает исполнителя внутри его клетки.
И тут же довод против: раздел «известное: проверено, не переоткрывай» подавляет перепроверку. Неверный факт, попавший в такой раздел, разъехался с брифами по трём веткам сразу. Подробный бриф способен нести ошибку, которой короткий бриф нести не может. Одна из трёх пар вдобавок загрязнена: агент с коротким брифом читал дерево соседа, и ни один бриф этого не запрещал — запрет был только на запись. Пару пометили загрязнённой и не выбросили: выбрасывать наблюдение после того, как увидел его результат, — это подгонка.
Заход 2 (замер 2): тот же бриф, но спрашиваем модель о задаче
Двенадцать ячеек настоящей работы, пять типов вопроса о каждой, четыре открытые модели, пять повторов, 2496 разборов. Обе группы получают побайтно одинаковую подложку — опись дерева, восемь команд, список ресурсов; различается только блок постановки.
По заглавной мере (только вопросы, ответ на которые в самом брифе не лежит):
| модель | короткая постановка | полный бриф | разница | промежуток |
|---|---|---|---|---|
| 14B | 69,4 % | 71,7 % | +2,2 | [−9,4; +13,9] |
| 3B | 10,0 % | 17,2 % | +7,2 | [−1,7; +17,2] |
| 7B | 50,6 % | 48,3 % | −2,2 | [−12,2; +6,7] |
| 4B | 50,6 % | 42,8 % | −7,8 | [−15,0; −1,1] |
Ни на одной модели прибавка не показана. Единственный промежуток, не накрывающий ноль, смотрит против брифа — и гасится размахом повторов (8,3 пункта против разницы 7,8).
Если считать по всем вопросам подряд, на самой маленькой модели появляется прибавка +17,6 пункта [+8,5; +26,3] — и это ровно тот исход, который был заранее назван фальсификатором: выигрыш держится там, где ответ лежит в самом брифе, и исчезает там, где не лежит. Измерен пересказ, а не польза сверх него.
Что важно: бриф модель прочитала. Позиционный контроль (вопрос, ответ на который есть только в брифе) прошли все четыре модели с запасом: +66,7, +25,0, +66,7, +66,7 пункта. Отрицательный результат нельзя списать на «не читала».
Заход 3 (замер 3): кластер против одиночки
Шесть задач-долгов в живом дереве, каждая с машинной проверкой, красной до работы. Контроль — один агент получает все шесть карточек. Опыт — надагент, два ведущих, шесть рабочих по одной карточке.
Первая строка отчёта — дисквалификация: площадка дважды отказала ведущим в
порождении рабочих. Дословно:
Error: No such tool available: Agent. Agent is disabled for this session, in subagents as well as here.
В первом повторе рабочих не было вовсе, во втором шестерых породил сам надагент.
Заявленная форма кластера не собралась ни разу.
| корзина | одиночка | «кластер» |
|---|---|---|
| зелёная проверка | 12 из 12 | 12 из 12 |
| красная, готово не объявлено | 0 | 0 |
| ложная сдача (объявил готово, проверка красная) | 0 | 0 |
| подделка | 0 | 0 |
Обе группы у потолка — это второй заранее объявленный фальсификатор: замер не различает. Вердикт — «различить нельзя».
Уверенно из этого замера следует только цена: кластер оказался медленнее по часам (2,82×) и дороже по токенам (9,21×), то есть параллелизм здесь не окупился вовсе. С двумя оговорками, обе — из самого отчёта. Первая названа в нём прямо: часть этой цены куплена отказом площадки, ведущие тратили ходы на попытки породить рабочих, и «насколько именно — не измерено». Вторая нашлась при сверке: раздел «форма кластера» сообщает, что в первом повторе работали три агента, а в счёт цены того же повтора попало семь. Число 9,2× завышено на неизвестную величину, и цитировать его как измеренное нельзя.
Заход 4 (замер 5): вопрос, который мы не довели
Замер 5 задавал самый прямой вопрос: покупает ли трёхуровневый кластер что-нибудь на Digit — нашей собственной агентской площадке, где вложенные агенты разрешены. План был написан целиком: шесть карточек, две группы, три повтора, 36 наблюдений, слепой машинный судья, четыре корзины исходов, порог объявлен числом (зелёных у кластера больше на пять из восемнадцати).
Прогона не было. Ни харнесса, ни базовых замеров, ни единого запуска судьи. Замер остановился на собственном заранее объявленном правиле: если ведущий раздаёт работу рабочим реже, чем в половине случаев, вердикт о кластере выносить запрещено — потому что группа с неразделившим ведущим это не кластер, а тот же одиночка через лишний уровень. Зонд дал 2 из 4: дважды ведущий разделил задачу на двух рабочих, один раз отдал всё одному, один раз не делегировал вовсе. Ровно на границе.
Следующий шаг — проверить, лечится ли это моделью покрупнее — упёрся в занятую видеокарту: скрипт зонда требует 12 гигабайт свободной памяти и отказывается работать, если их нет, а карта общая и на ней в тот момент работали чужие процессы. Дальше вопрос ушёл в замер 7 в расширенной постановке. Так и запишем: спросили, не довели, вот почему.
Заход 5 (замер 7): что даёт каждый уровень
Замер 7 разложил устройство работы на признаки: одиночка, два уровня, три уровня; мастер-промпт на каждом из уровней по отдельности. Девять ячеек, две полные сетки, двенадцать задач, все красные до работы.
Результат — 0 зелёных из 12 во всех девяти ячейках обеих сеток. Ни одна конфигурация не починила ни одной задачи. Это пол: различать нечего.
Причина названа числом, и это самое полезное, что вышло из замера. Тот же материал, тот же судья, та же модель; меняется только число карточек в одном сеансе:
| карточек в сеансе | зелёных гейтов |
|---|---|
| 1 | 1 зелёный из 5 повторов |
| 2 | 1 из 5 |
| 6 | 0 из 3 |
| 12 (как в сетке) | 0 из 18 ячейко-прогонов |
То есть порога между «одной» и «двумя» нет: есть низкая доля успеха, которая на шести и двенадцати становится нулём. Модель, которой хватало на замер, не берётся за правку файла вовсе; модель, которая берётся, стоит слишком дорого по времени — единственный её зелёный гейт получен за 414 секунд при пределе в 900, а полная сетка на ней не помещалась в объявленный потолок в шесть часов. Ступень покрупнее в свободную память карты не помещается: 23,9 гигабайта против доступных 18,3.
Устройство при этом собирается: надагент порождает ведущих, ведущие — рабочих, доля разделения 0,50 в обеих сетках. Просто сравнивать нечего, когда обе группы на нуле.
И одна находка, которая, по словам самого отчёта, «дороже половины замера».
Надагент вышел за свою границу записи живьём: границу держат файловые
инструменты, а терминал — нет, и обычный echo в файл прошёл мимо неё. То есть
заперты инструменты подагента, а не подагент.
Что об этом говорит наш собственный датасет
Кроме замеров у нас есть разметка настоящей кластерной работы: 44 ячейки,
каждая — одна задача, отданная одному агенту, с брифом, ветками, воротами и
исходом. Исходы четырёх видов: success 15, mixed 14, negative (проверка
сработала против того, что задумал заказчик) 13, could-not-verify 2. Плюс
шесть контролируемых прогонов — те самые три пары из захода 1.
Публиковать этот набор нельзя: материал происходит из приватных репозиториев, и прямой запрет записан в самом наборе. Но одно его число стоит здесь привести, потому что оно объясняет, зачем вообще понадобились контролируемые прогоны: стиль брифа не восстанавливается по историческим отчётам у 33 ячеек из 44. Только два ведущих написали в отчёте, по какому шаблону они писали брифы. На таком материале вопрос «помогает ли подробный бриф» не отвечается вовсе — сколько его ни разглядывай.
Результат 7. Сколько это стоит
Токен — кусок текста, которым модель меряет объём и по которому вам выставляют счёт.
Приём. Self-consistency — лучший приём замера 9, +17,1 пункта на всём материале. Он стоит пяти вызовов вместо одного и 1 646 559 токенов на выходе против 69 545 у baseline: в 23,7 раза больше. Один пункт доли верных обходится примерно в девяносто тысяч лишних токенов. На арифметике и на свежих задачах это окупается. На эрудиции и на коде — нет: там платить не за что.
Кластер. В замере 3 кластер стоил 2,82× по часам и 9,21× по токенам относительно одиночки — при одинаковом результате 12 из 12 у обеих групп. Обе кратности читать надо с оговорками из предыдущего раздела, но знак у них не спорный: параллелизм здесь не окупился.
Деньги. Единственное место, где мы платили не своей видеокартой, а деньгами, — отдельная ячейка замера 4, где испытуемым был Claude Code. Там померены все три валюты сразу.
| рука | вызовов | токенов входа | токенов выхода | из них «думание» | $ на задачу |
|---|---|---|---|---|---|
| baseline | 1 | 1 844 | 1 966 | 1 496 | 0,0676 |
| zero-shot RCTF | 1 | 2 441 | 92 | 74 | 0,0267 |
| self-consistency ×5 | 5 | 12 927 | 7 808 | 1 313 | 0,2262 |
| chain-of-verification | 3 | 8 984 | 2 284 | 992 | 0,1470 |
| tree of thoughts | 2 | 7 205 | 2 928 | 633 | 0,1453 |
| все девять рук | 16 | 50 627 | 17 927 | 5 215 | 0,8562 |
Здесь всё переворачивается. На локальных моделях требование к формату стоило качества; на крупной закрытой модели самая дорогая по выходу рука — обычный вопрос без всяких инструкций: 1 966 токенов выхода, из них 1 496 на внутреннее рассуждение. Zero-shot RCTF, который просит ответить коротко и по форме, дешевле в 21 раз. Контракт вывода на этой модели экономит деньги, а не тратит их.
И ещё одно число, полезное всякому, кто собирается мерить сам: три руки из девяти (self-consistency, chain-of-verification, tree of thoughts) съедают 60,6 % сметы и 71 % времени модели. Полный банк на тысяче задач в девять рук и три повтора — это 48 000 вызовов, около 2 569 долларов и 84 часа. Оценка этого получена за 0,17 % его цены: прогнали три задачи и посчитали.
Чего мы не мерили
Список честный, а не отговорка. Из него видно, где кончается наше знание.
- Писать компоненты моделью — не мерили ни разу. Ни один из девяти замеров не спрашивал, стоит ли поручать модели писать код приложения, и ни одно число отсюда на этот вопрос не отвечает. Чтобы ответить, нужен другой замер: задачи-компоненты с приёмочными тестами, написанными не автором решения; две группы — модель и человек, либо модель с приёмом и без; метрика — прохождение тестов и стоимость правки после первой сдачи. У нас такого замера нет.
- Работу агентов мы почти не мерили — мерили ответы о работе. Замеры 2, 4, 6, 8 и 9 меряют, что модель говорит о задаче, а не что она делает. Перенос вывода с «понимания» на «работу» запрещён их собственными предрегистрациями. Настоящую работу мерили только замеры 1, 3, 5 и 7 — и там либо «различить не удалось», либо «различить нельзя», либо прогона не было вовсе.
- Ни одного замера с включённым встроенным рассуждением. Режим
thinkвыключен нарочно во всех прогонах: приём измерялся в тексте промпта, а не в настройке. Про модели-рассуждатели у нас нет ничего. - Приём не отделён от длины промпта. У полного брифа и мастер-промпта и токенов больше, и текста больше. Отдельного контроля «длинный, но бессодержательный промпт» мы не ставили, так что часть эффекта может быть просто объёмом.
- Качество кода не меряется. На HumanEval засчитывается прохождение тестов и только оно: ни читаемость, ни сложность, ни безопасность.
- Ни длинного контекста, ни работы с инструментами, ни диалога, ни задач на русском языке. Тексты задач английские, оснастка русская.
- Модели крупнее 27 миллиардов параметров не мерились вовсе, а те, что мерились, — одно семейство в четырёхбитном квантовании. Часть разброса между ступенями может объясняться квантованием, а не размером.
- Непрерывность работы кластера — половина навыка — не мерилась. Все задачи умещались в один сеанс; ни лимитов, ни передачи состояния следующему агенту.
- Изоляция подагента не доказана. Границы записи держат файловые инструменты и не держат терминал — это не предположение, а пойманный случай.
- Цена в деньгах измерена в одном месте из девяти. Везде остальное — токены и часы видеокарты; тариф не считался.
- Повторов мало везде. Два повтора у части ступеней, один у остальных, три пары в замере 1, один прогон на ячейку в замере 7. Разброс от прогона к прогону — самая большая дыра всех наших планов, и она не закрывается аккуратностью разбора.
Что из этого следует
Про промпт. Дайте модели считать вслух там, где надо считать: +23,2 пункта на арифметике за одну фразу. Не мешайте ей там, где надо писать код: на HumanEval ни один приём не поднялся выше обычного вопроса. И следите за требованием к формату — оно стоит дороже любого приёма и легко подменяет собой предмет сравнения.
Про агентов. Подробный бриф в наших замерах не купил качества ни разу, но дважды измеримо удержал исполнителя в границах — а в одном случае цена выхода за границы была семь чужих файлов в уже влитом стеке. Кластер не окупился ни разу. Если вы строите многоуровневое устройство работы, стоит сначала проверить самое скучное: доходит ли задача до рабочего вообще. У нас ведущий раздавал работу в половине случаев, и на этом остановился целый замер.
Про замеры. Три исхода, а не два. «Различить нельзя» — не вежливый отказ, а результат: он говорит, что этот замер этого не различает, и указывает, что чинить в следующем. У нас таких исходов больше, чем положительных, и именно они двигали работу вперёд.
Проверить самому
Двенадцати тысяч вызовов для этого не нужно. Хватит пары десятков задач и получаса.
- Возьмите задачи, где ответ проверяет машина, а не вы: число, буква, прогон тестов. Иначе вы будете мерить своё настроение.
- Сделайте ровно два промпта на задачу — baseline и он же плюс «рассуждай по шагам». Последняя фраза про формат в обоих должна совпадать побайтно, иначе вы померите её, а не приём.
- Считайте три числа, а не одно: верных, «не знаю», уверенно неверных. Приём часто не делает модель правее — он убирает у неё право промолчать.
- Проверьте сначала оснастку, а не модель. Прогоните через свою проверку эталонные решения и заведомо негодные ответы. У нас на HumanEval это выглядит так: 25 эталонных решений из 25 проходят тесты за 0,2 секунды, а пустой ответ, проза и заглушка — не проходят все три. Проверка, которая не краснеет на заведомо негодном, ничего не проверяет.
- Прогоните дважды на одной и той же модели. Разброс между двумя прогонами и есть ваш порог: разница меньше него не значит ничего.
- Берите модель поменьше. На крупной задачи кончатся раньше модели, и вы увидите ноль там, где его нет.
Где наши отчёты спорят сами с собой
Девять замеров — это девять пачек таблиц, собранных скриптами в разное время, и часть их строк друг с другом не сходится. Мы не выбирали удобное число: ниже названы оба, и статья опирается на то, что подтверждается прогоном, а не на то, что красивее.
Одна оговорка напоследок: 2 сентября 2026 выводы этой статьи пересмотрены — прежний замер сравнивал приёмы с разными требованиями к формату ответа и потому мерил требование, а не приём; что именно было не так и какие числа стояли раньше — во врезке режима «Для разработчика».