DeepSWE и Senior SWE-Bench: в бенчмарках для ИИ-агентов нашли методологические ошибки
Автор технического блога Дэн Лу опубликовал седьмой пост в своей серии «упражнений» по бенчмаркам, оценкам ИИ (evals) и методологии измерений. На этот раз, три примера: таблица «на салфетке» для оценки производительности систем, два бенчмарка для ИИ-агентов, пишущих код (DeepSWE и Senior SWE-Bench), и расхожее утверждение про зимнюю резину. Формат прежний: сначала цифры и код бенчмарка подаются как загадка, «что здесь не так?», а разбор идёт следом.
Первый пример, репозиторий sirupsen/napkin-math на GitHub (5,4 тыс. звёзд), таблица типовых задержек и пропускных способностей систем, которую друг автора использовал при подготовке к техническим собеседованиям. У показателя «случайное чтение/запись памяти» заявлена задержка 20 нс, но в коде теста между итерациями цикла нет зависимости по данным, обращения к памяти на деле идут параллельно, а не одно за другим, поэтому число не отражает реальную задержку доступа к DRAM; по прикидке друга автора, порядок величины должен быть ближе к 100 нс. У показателя «случайное чтение SSD» заявлены 100 мкс / 70 МБ/с, хотя, по словам автора, на быстрых современных SSD (не экзотических вроде Optane) случайное чтение обычно укладывается меньше чем в 40 мкс, например, у диска Kioxia CD9P-R замеряли около 30 мкс. Разбор кода этого же теста нашёл ещё три отдельные проблемы: смещения читаются невыровненными (из-за сдвига на единицу одно чтение задевает три страницы памяти), разные смещения могут перекрывать одни и те же страницы и попадать в кеш, а последнее из генерируемых смещений пытается прочитать 8192 байт там, где физически доступно только 4095 байт. Для последовательного чтения SSD заявлены 1 мкс и 8 ГиБ/с, но документация облачного инстанса, на котором делались замеры (Google c4-standard-48-lssd), указывает максимальную суммарную пропускную способность всех 8 локальных дисков в 5000 МиБ/с, то есть 625 МиБ/с на диск; заявленные 8 ГиБ/с выглядят так, будто тест непреднамеренно читает данные из кеша страниц, а не с диска. Питер Геогеган (Peter Geoghegan), который занимается производительностью дисков в Postgres и к которому автор обратился за консультацией, согласился с разбором.
Второй, центральный сюжет поста, критика DeepSWE и Senior SWE-Bench, двух публичных таблиц лидеров, которые постоянно приводят (в том числе, по словам автора, в рабочих чатах) как доказательство, что одна модель лучше другой пишет код. Уже на уровне общей правдоподобности таблицы противоречат друг другу: поверхностное чтение DeepSWE показывает, что прошлая модель OpenAI (GPT-5.5) не уступает нынешней модели Anthropic (Claude Fable 5), а поверхностное чтение Senior SWE-Bench, что прошлая модель Anthropic (Opus 4.8) обходит нынешнюю модель OpenAI (GPT-5.6). По словам автора, ни то ни другое не совпадает с тем, как эти модели ведут себя на практике у него и у людей, чьему опыту он доверяет; чтобы проверить рассуждение, он попросил Аарона Левина, какое-то время руководившего командой оценки моделей в Anthropic, посмотреть на логику критики, тот согласился с общей идеей и рассуждением. В самом DeepSWE, 113 задач, каждая прогоняется по четыре раза, с оценкой по шкале 0/25/50/75/100%. По заявленным цифрам GPT-5.5 на уровне усилий xhigh набирает 67% против 54% у Opus 4.8 xhigh: из 113 задач на 34 модели показывают одинаковый результат, GPT-5.5 xhigh выигрывает 57, Opus 4.8, 22. Но среди 79 задач с различающимся результатом только 4 написаны на Rust, языке, для которого автор часто использует ИИ-агентов в реальной работе; остальные, на языках, которые ему не нужны или где, по его опыту, выбор модели не имеет значения. Отсюда его вывод: даже итоговый счёт 67% против 54% лично для него почти ничего не значит. У Senior SWE-Bench к тем же проблемам добавляется субъективное судейство: чтобы решение засчитали «со вкусом» (tasteful solve), оно должно набрать проходной балл по рубрике и быть менее чем вдвое длиннее эталонного решения по объёму, жёсткий порог создаёт абсурдные пограничные случаи. Например, в задаче paperless-ngx-perf-workflow-queries решение модели GLM-5.2 в 121 строку засчитано как «со вкусом» против эталонных 61 строки, хотя ещё одна лишняя строка перевела бы результат в «не со вкусом»; в другой задаче эталонное решение, 1 строка (с учётом удаления и добавления считается как 2), из-за чего максимальный объём решения «со вкусом», 3 строки. На конкретном примере, правке контроллера статистики Plausible на Elixir, решение Opus 4.8 засчитали «со вкусом», а решения Opus 4.7 и Claude Fable 5, нет; при этом, по разбору автора, отклонённый вариант Opus 4.7 семантически идентичен эталонному решению и отличается от него только тем, что код разбит на несколько строк для читаемости, оценка «без вкуса» выглядит немотивированной. Чтобы оценить, насколько шумно само судейство (изначально его вела модель Sonnet 4.6), автор поставил эксперимент: переоценил один и тот же набор уже готовых решений для GPT-5.6 Sol и Opus 4.8 ещё 10 раз тем же судьёй. Итоговый вердикт «со вкусом / не со вкусом» разошёлся с официальным результатом в 23% случаев; если сравнивать официальный результат с медианой по 10 прогонам, расхождение, 21%. А при замене модели-судьи на GPT-5.6 Sol (в этом случае она выступает и как проверяемая модель, и как судья) число решений, засчитанных «со вкусом», упало более чем вдвое для обеих моделей. В Slack-чате, где состоит автор, кто-то поделился превью-фрагментом таблицы Senior SWE-Bench: Claude Fable 5, 29,1%, Claude Opus 4.8, 25,0%, GPT-5.6 Sol, 24,4%. Комментарий к нему хвалил эту раскладку как более реалистичную, чем у других бенчмарков, но, по словам автора, разница между 25,0% и 24,4% практически ничего не значит на фоне шума судейства, который показал его собственный эксперимент; та же таблица к тому же сравнивает модели на разных уровнях «усилия» (max для Fable, Opus и Sonnet против xhigh для линейки GPT-5), это, по словам автора, просто странно; а вот что пересказы обычно опускают, то, что по замерам самой этой страницы GPT-5.6 Sol заметно дешевле Opus 4.8.
Третий пример, расхожее мнение, что зимняя резина в холода лучше всесезонной, потому что резина всесезонных шин «дубеет» ниже 7°C (45°F) и резко теряет сцепление; в этой же формулировке идею повторяет и ИИ-обзор Google по соответствующему поисковому запросу. Автор отмечает: за этим утверждением не стоит ни один найденный им реальный тест. В противовес он приводит независимые замеры Джонатана Бенсона, который системно тестировал сцепление разных типов шин при разных температурах и условиях. По этим данным на сухом покрытии до 0°C лучше всех держат летние шины, за ними идут всесезонные, а зимние уступают обоим типам с большим отрывом; на мокром покрытии (тесты проводились до 2°C) всесезонные «сильно превзошли» летние, хотя летние по-прежнему обходят зимние. Автор уточняет: «зимними» в этих тестах были высокопроизводительные шины категории UHP, которые в США и Канаде используют редко, более распространённые там же «нордические» зимние шины показали в сравнении со всесезонными ещё худший результат. Вывод автора: представление, что один лишь холод делает всесезонную резину слишком твёрдой для сцепления и без зимней резины не обойтись, «явно неверно»; для настоящего снега и льда, которые в этих тестах не проверялись, зимняя резина остаётся оправданным выбором.
Общий тезис поста: во всех трёх случаях, чтобы заметить проблему, специальные знания в предметной области не понадобились, хватило обычной логики оценки экспериментов: репрезентативность выборки, пороговые эффекты, шум при однократном прогоне, проверка кода самого бенчмарка. Автор приводит комментарий Эм Чу: она сама «обычно скользит взглядом» мимо всего похожего на бенчмарк LLM, потому что шанс, что там есть что-то стоящее прочтения, «близок к нулю», и добавляет, что среди людей, чьему мнению он доверяет, такой скепсис к заголовочным цифрам бенчмарков, обычное дело. Исключение, по его наблюдению, те, кто профессионально работает с ИИ и держит в голове сразу множество бенчмарков, складывая из них общую картину настроений вокруг модели, но это отдельная, трудозатратная практика, а не то же самое, что доверять одной сводной цифре. Пост, седьмой в идущей серии «упражнений» на тему бенчмарков, оценок и методологии измерений, которую автор публикует на Patreon, а не в основном блоге.
Ключевые факты
- У бенчмарка sirupsen/napkin-math (5,4 тыс. звёзд на GitHub) заявленная задержка «случайного чтения/записи памяти» в 20 нс на деле измеряет параллельные обращения к памяти, а не последовательные, то есть не задержку вовсе; по оценке друга автора, реальная величина должна быть ближе к 100 нс.
- В DeepSWE (113 задач, по 4 прогона каждая) заявленные 67% у GPT-5.5 против 54% у Opus 4.8 объясняются разницей всего в 79 из 113 задач, а среди них лишь 4, на языке (Rust), которым автор пользуется на практике: для его собственной работы этот счёт почти ничего не значит.
- У Senior SWE-Bench вердикт «решение со вкусом» зависит от жёсткого порога, менее чем вдвое длиннее эталона; при повторной оценке одних и тех же решений тем же судьёй-ИИ 10 раз подряд вердикт меняется на противоположный в 23% случаев, а при смене модели-судьи число «решений со вкусом» падает больше чем вдвое.
- Фрагмент таблицы Senior SWE-Bench (Claude Fable 5, 29,1%, Claude Opus 4.8, 25,0%, GPT-5.6 Sol, 24,4%), которым кто-то поделился в Slack-чате, где состоит автор, хвалили как «более реалистичный» результат, хотя разница между 25,0% и 24,4%, по словам автора, практически ничего не значит на фоне шума самого судейства.
- По независимым тестам Джонатана Бенсона всесезонные шины обходят по сцеплению зимние и на сухом покрытии (до 0°C), и на мокром (до 2°C), вопреки расхожему утверждению, которое повторяет и ИИ-обзор Google, что всесезонная резина «дубеет» и теряет сцепление уже ниже 7°C.
Почему это важно
Публичные таблицы лидеров вроде DeepSWE и Senior SWE-Bench репостят и обсуждают так, будто разница в несколько процентных пунктов, надёжный сигнал о том, какая модель лучше пишет код; автор пишет, что видел это и во внутренних рабочих чатах. Разбор Дэна Лу показывает: за этими цифрами часто стоит не разница в качестве моделей, а шум измерения, нерепрезентативная выборка задач, жёсткие пороги, которые переворачивают вердикт из-за одной строки кода, и оценка LLM-судьёй, которая при повторном прогоне тех же данных расходится сама с собой примерно в пятой части случаев. Когда один и тот же набор моделей получает противоположные рейтинги от двух разных «авторитетных» бенчмарков, в одном прошлая модель OpenAI не уступает новейшей модели Anthropic, в другом прошлая модель Anthropic обходит новейшую модель OpenAI, по меньшей мере один из них, а вероятнее оба, измеряют шум, а не реальный разрыв в возможностях.
Кому это важно
Инженерам и командам, которые выбирают ИИ-агента для написания кода по публичным таблицам бенчмарков; людям, которые сами строят или поддерживают бенчмарки и оценки (evals) для языковых моделей, особенно там, где судьёй выступает другая модель; тем, кто использует таблицу sirupsen/napkin-math для подготовки к техническим собеседованиям или прикидок производительности систем; и просто автовладельцам, которые выбирают между всесезонной и зимней резиной, опираясь на расхожие советы из интернета.
Как это применить
Прежде чем доверять сводному баллу бенчмарка, стоит проверить то же, что проверил автор. Во-первых, действительно ли код теста измеряет заявленное: у napkin-math цикл для «задержки памяти» на деле мерит параллельную пропускную способность, а не задержку, а тест случайного чтения SSD вдобавок содержит ошибку со смещением на единицу. Во-вторых, не построена ли оценка на жёстком пороге поверх непрерывной величины: у Senior SWE-Bench правило «менее чем вдвое длиннее эталона» переворачивает вердикт из-за одной лишней строки кода. В-третьих, если оценку ставит LLM-судья, насколько сильно вердикт меняется при повторном прогоне или замене судьи: в этом разборе, 23% на том же судье и падение больше чем вдвое при смене модели-судьи. Если задачи бенчмарка не похожи на язык и тип работы, которые нужны лично вам, итоговый балл ни о чём не говорит, даже если выглядит убедительно, из 79 различающихся задач DeepSWE только 4 оказались на языке, которым автор пользуется в реальной работе. А там, где решается бытовой вопрос вроде выбора резины, стоит смотреть на конкретные проверяемые тесты (как у Джонатана Бенсона), а не на растиражированное утверждение, даже подтверждённое ИИ-обзором поисковика.
Можно ли доверять
Доверять можно. Это часть длинной серии Дэна Лу именно о методологии бенчмарков и экспериментов, разбор седьмой по счёту, и выводы не держатся на одном лишь мнении автора. Дисковую часть проверил Питер Геогеган, который занимается производительностью дисков в Postgres, согласился с разбором и добавил, что поведение SSD непрозрачно даже для операционной системы, сославшись в том числе на разговор 2023 года на ту же тему с linux-разработчиком Мэттью Уилкоксом. Рассуждение про DeepSWE и Senior SWE-Bench проверил Аарон Левин, какое-то время руководивший командой оценки моделей в Anthropic, согласился и он. Цифры про шум судейства Senior SWE-Bench (23% и 21%), не оценка на глаз, а результат эксперимента, который автор поставил сам: повторная оценка тех же решений 10 раз; в тексте есть ссылки на конкретные страницы задач и приведены настоящие диффы кода, так что утверждения проверяемы. При этом сам материал, авторский аналитический пост на личном Patreon, а не рецензируемое исследование, а данные по шинам, это данные стороннего тестировщика, а не измерения самого автора.
Риски и подводные камни
Это критика методологии и репрезентативности выборки, а не обвинение создателей DeepSWE или Senior SWE-Bench в подтасовке, организации, которые стоят за этими бенчмарками, в самом тексте вообще не названы. Пост не называет модель-победителя среди GPT-5.5, GPT-5.6 Sol, Opus 4.7, Opus 4.8, Claude Fable 5 и GLM-5.2: тезис в том, что разрывы в таблицах лидеров недостоверны, а не в том, что какая-то конкретная модель на самом деле лучшая. Данные по шинам от Джонатана Бенсона, это только качественные ранги (кто кого обошёл), без конкретных цифр по сцеплению или тормозному пути, и охватывают только сухое покрытие до 0°C и мокрое до 2°C, тестовых данных по снегу и льду в них нет, хотя лёд в тексте всё же упомянут: ледяные условия начинаются уже при 0°C, а нордические зимние шины, по словам автора, оправданны при частой езде по льду; сам он оговаривает, что есть немало условий, где зимняя резина лучше всесезонной.
«Обычно я просто скольжу взглядом мимо всего, что похоже на бенчмарк LLM, шанс, что там есть что-то стоящее прочтения, практически нулевой.»
— Эм Чу, в комментарии, который приводит Дэн Лу