Колонка

Мы переписали бенчмарк, чтобы он звучал по-человечески

Первый чат-корпус спрашивал у модели про build digest и goodput. Живые пользователи так не спрашивают. Та же ячейка, перемеренная на шестнадцати бытовых запросах, дала другую долю отказов на том же железе — а старое число мы всё равно оставили.

мнение 2 сентября 2026 г.

Это колонка-мнение, а не результат лаборатории. Цифры здесь — из рабочего журнала автора и цитируемых внешних источников (помечены в тексте), никогда — из реестра клеймов. Измеренные результаты с доказательствами живут в /claims/.

Первую версию нашего чат-бенчмарка инженер писал для инженера, и это видно по каждой строчке. Знаю точно, потому что писал её я. Ворклоад называется interactive-assistant-v1, заморожен в начале августа, а его промпты звучат как собеседование в эту лабораторию. «Одним предложением: что именно идентифицирует digest образа runtime?» «В чём разница между throughput и goodput? Ответь двумя предложениями.» Длинный пункт просил внутреннюю записку о том, почему лаборатория должна публиковать неудачные и невалидные прогоны наравне с успешными, — и ответ на возражение, что это выглядит непрофессионально. Мы попросили модель писать наши же редакционные колонки, а потом замеряли, сколько она раскачивается перед первым словом.

С формой корпуса всё было в порядке. Два языка, три диапазона длины, лимит слов на каждый пункт, за которым следит гейт формата, отдельные гейты языка и повторов, клиентский тайминг от первого токена до последнего. Проблема была в теме. Каждый промпт проверял, насколько модель освоилась в нашем жаргоне, а жаргон тянет за собой длинные экспертные ответы. Спросите модель, чего читателю ещё не хватает, чтобы поверить цифре пропускной способности, — и она напишет эссе. Ни один живой пользователь не спросит у локального чат-бота, что идентифицирует build digest. Он попросит написать соседу насчёт цветов.

Так что в тот же вечер мы написали interactive-assistant-v2. Та же форма, те же гейты, те же лимиты слов — и ни одного промпта про наше ремесло. Сообщение в два предложения с просьбой к соседу полить цветы на выходных. Вежливый отказ выйти в субботнюю смену. Почему небо голубое — для десятилетнего. Письмо арендодателю про подтекающий кран на кухне. По-русски: просьба к соседке забрать посылку у курьера, почему зимой холодно, письмо в управляющую компанию про свет в подъезде, который не горит вторую неделю. Ничего такого, что человеку было бы неловко набрать.

Потом прогнали ту же ячейку ещё раз. Сделайте diff двух манифестов прогонов — разойдутся id прогона, id ворклоада, хеш корпуса и таймстемпы. Больше не сдвинулось ничего.

Отказ, за которым мы на этой ячейке следим пристальнее всего, — answerless-запрос: reasoning-проход съедает всё окно генерации, ответ так и не начинается, и сервер возвращает HTTP 200, внутри которого пусто. На инженерном корпусе, при более тесном из двух наших бюджетов, пустыми вернулись три запроса из четырёх. На человеческом — чуть меньше шести из десяти. Я ждал, что промпты подружелюбнее сделают число хуже. Вышло наоборот. Старый корпус никому не льстил — он завышал долю отказов. В сырых записях запросов модель рассуждает о бытовых делах чуть меньше, чем о нашем ремесле, а когда окна хватает, чтобы договорить, её ответы выходят короче вдвое с лишним. Именно благодаря короткому рассуждению больше ответов успевает начаться до того, как тесное окно захлопнется; а короткий ответ — любезность к читателю, а не причина, по которой запрос выживает. Страницы клеймов по человеческому корпусу включают ещё и более поздние прогоны на нашем втором, коммерчески идентичном юните — поэтому у них другой уровень доказательств, чем у старых. На одной только исходной коробке сдвиг тот же по направлению и примерно тот же по величине.

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

Этот текстовый файл — такой же кусок паспорта числа, как версия прошивки или дефолтное число параллельных слотов; более раннее эссе уже доказывало это для всех остальных полей. Процитируйте долю answerless для этой модели, не сказав, о чём её спрашивали, — и вы процитировали половину числа.

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

Старое число мы не «починили». Оба корпуса лежат замороженными в каталоге со своими хешами и в публичном репозитории харнесса. Два семейства клеймов живут в реестре бок о бок, по одному на ворклоад, на той же системе, том же рантайме, той же модели и тех же ячейках. Валидатор каталога не даёт одному клейму ссылаться на прогоны двух ворклоадов или двух ревизий, так что доли v1 и v2 никогда не усреднятся в цифру посимпатичнее. Старые страницы клеймов стоят со своими прогонами и ограничениями, а отчёт про answerless цитирует оба числа — человеческое первым.

Переписать бенчмарк — это поднять версию и показать diff, а не тихо подправить. Соблазн — перезаписать плохо написанный корпус, чтобы число получше похоронило число похуже, оставив его жить только на чьих-нибудь старых скриншотах. Когда хранятся оба, любой может положить две страницы клеймов рядом, сверить отпечаток рантайма и сам решить, чего стоят шестнадцать промптов. Это же единственная причина верить новому числу больше, чем старому: diff, который его породил, публичен — как и diff харнесса.

На промптах, которые человек действительно набрал бы, отказов меньше, чем мы сообщали. При тесном бюджете сосед получает сообщение про цветы каждый раз, а десятилетнему, который спросил, почему небо голубое, по-прежнему в большинстве случаев прилетает HTTP 200 с пустотой внутри.

← Все колонки