Почему SWE-bench Verified больше не измеряет передовые возможности в программировании
SWE-bench Verified использует все больше искаженных данных. Мы рекомендуем использовать SWE-bench Pro.
С тех пор как мы впервые опубликовали SWE-bench Verified в августе 2024 года, индустрия широко использует его для измерения прогресса моделей в задачах автономной программной инженерии. После выпуска SWE-bench Verified дал убедительный сигнал прогресса возможностей и стал стандартной метрикой, указываемой в релизах передовых моделей. Отслеживание и прогнозирование прогресса этих возможностей также является важной частью Программы готовности OpenAI. Когда мы изначально создали бенчмарк Verified, мы попытались решить проблемы в исходной оценке, из-за которых некоторые задачи было невозможно выполнить в датасете SWE-bench(открывается в новом окне).
После первоначальных скачков актуальный прогресс на SWE-bench Verified замедлился, показав улучшение(открывается в новом окне) с 74,9% до 80,9% за последние 6 месяцев. Это поднимает следующий вопрос: отражают ли оставшиеся сбои ограничения модели или свойства самого набора данных?
В рамках нового анализа мы обнаружили две основные проблемы с набором Verified, которые указывают на то, что бенчмарк больше не подходит для измерения прогресса в возможностях автономной программной инженерии для передовых запусков при сегодняшних уровнях производительности:
- Тесты отклоняют корректные решения: Мы провели аудит 27,6% подмножества набора данных, с которым модели часто не справлялись, и обнаружили, что по меньшей мере 59,4% проверенных задач содержат дефектные тесты, которые отклоняют функционально корректные отправки, несмотря на все наши усилия по улучшению этого на первоначальном этапе создания SWE-bench Verified.
- Обучение на решениях: Так как крупные передовые модели могут усваивать информацию из своего обучения, важно, чтобы их никогда не обучали на задачах и решениях, по которым их оценивают. Это похоже на то, как если бы перед предстоящим тестом преподаватель поделился со студентами задачами и решениями: они могут и не заучить ответ, но студенты, которые уже видели ответы, наверняка справятся лучше, чем те, кто их не видел. Задачи SWE-bench берутся из репозиториев с открытым исходным кодом, которые многие поставщики моделей используют в целях обучения. В ходе нашего анализа мы обнаружили, что все передовые модели, которые мы протестировали, смогли воспроизвести исходное, написанное человеком исправление ошибки, использованное в качестве достоверного эталонного ориентира, известное как gold patch, или дословные детали постановки задачи для некоторых заданий, что указывает на то, что все они видели по крайней мере часть этих задач и решений во время обучения.
Мы также обнаружили свидетельства того, что модели, которые видели эти задачи во время обучения, с большей вероятностью добьются успеха, поскольку у них есть дополнительная информация, необходимая для прохождения недостаточно определённых тестов.
Это означает, что улучшения на SWE-bench Verified больше не отражают значимых улучшений реальных способностей моделей к разработке программного обеспечения. Вместо этого они все чаще отражают, насколько сильно модель подвергалась воздействию теста во время обучения. Вот почему мы перестали указывать результаты SWE-bench Verified, и рекомендуем другим разработчикам моделей поступить так же.
Мы разрабатываем новые, не загрязненные данными бенчмарки, позволяющие лучше отслеживать навыки программирования, и считаем, что это важная область, на которой стоит сосредоточиться более широкому исследовательскому сообществу. Пока у нас нет таких бенчмарков, OpenAI рекомендует сообщать результаты по SWE-bench Pro.
Оригинальная оценка SWE-bench(открывается в новом окне) была выпущена в 2023 году. Каждая задача была взята из закрытой проблемы на GitHub в одном из 12 репозиториев Python с открытым исходным кодом и сопоставлена с соответствующим pull request (PR). Чтобы определить, является ли сгенерированное моделью изменение кода корректным, к каждой задаче прилагаются два набора тестов:
- Тесты, которые нельзя пройти на неизменённой кодовой базе, но можно пройти, если проблема была корректно исправлена
- Регрессионные тесты, которые можно пройти как до, так и после исправления, чтобы убедиться, что несвязанная функциональность остаётся нетронутой.
Модель не видит тесты. Она должна сформировать изменение кода, имея только исходный текст проблемы и состояние репозитория до исправления. Задача засчитывается только в том случае, если после применения изменения кода удается пройти все тесты.
Мы обнаружили в этой оценке множество проблем, которые могут привести к занижению возможностей моделей.
- Некоторые модульные тесты были слишком специфичными или не соответствовали задаче: корректные исправления могли быть отклонены.
- Многие формулировки задач были недостаточно определены, что могло привести к нескольким допустимым интерпретациям, тогда как тесты охватывали только одну конкретную.
- В зависимости от настройки окружения (например, Linux vs Windows или версии Python) некоторые тесты могут ложно завершаться сбоем
Для решения этих проблем в 2024 году был создан SWE-bench Verified. Совместно с опытными инженерами-программистами мы проверили 1 699 задач SWE-bench и отфильтровали задачи, в которых были эти проблемы. Каждая задача была независимо рассмотрена тремя экспертами. Этот процесс проверки привёл к появлению SWE-bench Verified — тщательно отобранного набора из 500 задач.
Хотя SWE-bench Verified — это существенное улучшение по сравнению с первоначальной версией, еще остаются нерешённые проблемы. Мы провели аудит 138 задач SWE-bench Verified, которые OpenAI o3 не мог решить стабильно в течение 64 независимых прогонов. Каждый случай был независимо рассмотрен как минимум шестью опытными инженерами-программистами. Если эксперт указывал на проблему, она перепроверялась другой командой.
Мы обнаружили, что 59,4% из 138 задач содержали существенные проблемы в дизайне теста и/или описании задачи, из-за чего их было крайне трудно или невозможно решить даже самой способной модели или человеку.
- 35,5% проверенных задач имеют строгие тестовые сценарии, которые навязывают конкретные детали реализации, делая недействительными многие функционально корректные решения; мы называем их узкими тестовыми сценариями.
- 18,8% проверенных задач содержат тесты, которые проверяют дополнительную функциональность, не указанную в описании задачи, что мы называем широкими тестовыми сценариями.
- Оставшиеся 5,1% задач имели разного рода проблемы, которые сложно было сгруппировать в рамках этой классификации.
Яркий пример первого режима отказа — pylint-dev__pylint-4551(открывается в новом окне), где PR вводит новую функцию `get_annotation` как часть общего решения. Это имя функции не упоминается в описании задачи, но импортируется напрямую тестами. Хотя некоторые модели могут интуитивно прийти к созданию такой функции, строго говоря, нет необходимости реализовывать функцию с этим конкретным именем, чтобы корректно решить задачу. Многие корректные решения не позволяли пройти тест из-за ошибок импорта.
Описание проблемы
Тестовый фрагмент PR
Сбои тестов PR (сокращено для удобства чтения)
Пример слишком широких тестовых сценариев — sympy__sympy-18199(открывается в новом окне). Эта задача была взята из PR, в котором были устранены три отдельные проблемы с функцией `nthroot_mod`, а именно #17373(открывается в новом окне), #17377(открывается в новом окне) и #18212(открывается в новом окне). Однако описание задачи SWE-bench Verified охватывает только финальную проблему #18212(открывается в новом окне). Это создает несоответствие: PR-тесты охватывают все три проблемы, тогда как в описании подробно рассматривается только одна. В наших запусках модели часто корректно реализуют описанное исправление, а затем проваливают тесты, которые охватывают реализацию для двух других проблем.
Исходное описание PR (из PR на GitHub)
Описание проблемы для #18212
Problem Description for SWE-bench Verified task (only taken from #18212):
SWE-bench Verified и репозитории (кодовые базы и примечания к выпуску) являются открытыми и широко используемыми и обсуждаемыми, что затрудняет избегание загрязнения данных для разработчиков моделей.
Мы впервые столкнулись с признаками загрязнения в наших собственных моделях. Например, когда GPT‑5.2 решил 31 задачу, которые мы определили как почти невыполнимые. В django__django-14725(открывается в новом окне) тесты требуют конкретного нового параметра `edit_only`, который явно не требуется в постановке задачи. При решении задачи GPT‑5.2 показывает в своей цепочке рассуждений (CoT), что у него есть информация о примечаниях к выпуску, в которых подробно описаны изменения в кодовой базе, и корректно определяет, что параметр `edit_only` был введен в Django 4.1.
Цепочка размышлений GPT‑5.2
Чтобы оценить, насколько значимо загрязнение в более широком смысле, мы создали автоматизированную систему red teaming. Для каждого вопроса SWE-bench Verified мы поручили GPT‑5 провести проверку GPT‑5.2‑Chat, Claude Opus 4.5 и Gemini 3 Flash Preview для проверки на загрязнение. Эти модели были выбраны, чтобы исключить модели рассуждений, но мы признаём, что между ними, вероятно, существует нетривиальный разрыв в возможностях.
Чтобы проверить наличие загрязнения, GPT‑5 получил ID задачи SWE-bench Verified, описание, эталонный патч и PR-тесты. За более чем 15 ходов мы позволяли GPT‑5 варьировать системный/разработческий промпт, пользовательский промпт и предварительное заполнение ассистента, а также различные стратегии сбора данных. После каждого хода модель-судья отмечала, сколько новой, специфичной для задачи информации появилось, и каждый ответ был помечен по степени загрязнения от «отсутствует» до «сильное». GPT‑5 было разрешено адаптировать свою стратегию на основе предыдущих ходов, чтобы итеративно восстанавливать специфичные для задачи детали. Для каждого примера сильного загрязнения мы с другим судьей убедились, что GPT‑5 не раскрыл слишком много информации целевой модели. Наконец, затем мы вручную проверили примеры «сильного» загрязнения, приведенные в транскриптах в этой публикации.
Ниже приведены примеры сильного загрязнения у разных поставщиков моделей.
Получив короткий фрагмент из описания задачи, GPT‑5.2 выдаёт точный gold patch. В частности, он знает точное имя класса и метода, а также новое условие раннего возврата `if username is None or password is None`, которое вводится.
Выявление загрязнения данных
Gold patch
Opus способен не только вспомнить точное функциональное изменение из 4 строк, которое внес PR, вместе с конкретным именем файла и методом, которых оно коснулось, но и дословно цитирует встроенный комментарий, который был частью diff.
Contamination elicitation
Gold patch
Модель Gemini 3 Flash, когда ей не предоставляют никакой дополнительной информации о задаче, кроме ID, способна дословно воспроизводить детали из описания задачи и gold patch. Это включает новую формулу regex для проверки имени пользователя и точные номера строк для изменения.
Выявление загрязнения данных
Gold patch
Из этого аудита SWE-bench Verified мы видим два более общих вывода для проектирования оценивания. Во-первых, контрольные показатели, полученные из общедоступных материалов, несут риск загрязнения, при котором попадание в обучающие данные может незаметно завышать оценки. Если при создании бенчмарка используются общедоступные данные, собранные автоматическим обходом веб-страниц, разработчикам моделей следует провести дополнительные тесты на загрязнение данных. Бенчмарки, и даже их решения, опубликованные публично, могут попасть в обучающие данные. Следует проявлять особую осторожность как в том, как публикуются наборы данных (т.е. защищенные паролем) и происходит фильтрация обучающих данных (т.е. строгое соблюдение строк canary).
Во-вторых, автоматизированное оценивание сложно правильно настроить; идеальные тестовые сценарии должны полностью проверять корректную функциональность, оставаясь при этом независимыми от конкретных несущественных деталей реализации и одновременно устойчивыми к решениям, использующим обходные пути. Эти проблемы по своей природе сложны и их трудно решить. Выявление этих проблем потребовало проведения нескольких масштабных кампаний по разметке данных людьми.
Мы включили эти выводы в наши недавние работы по оценке. В последние месяцы мы решили публиковать результаты по публичному сплиту SWE-Bench Pro. Мы рекомендуем другим разработчикам моделей поступать так же. SWE-bench Pro не идеален, но, судя по эмпирическим данным, по-видимому, в меньшей степени страдает от проблем, связанных с загрязнением данных. Наш конвейер выявления загрязнения обнаружил некоторые случаи загрязнения, но эти случаи были значительно более редкими и менее вопиющими, чем в SWE-bench Verified, и ни одна модель не смогла воспроизвести полный дословный gold patch.
Мы продолжим инвестировать в оригинальные бенчмарки, разработанные независимыми авторами, и просим помощи у представителей индустрии и академического сообщества. В GDPVal задачи конфиденциально разрабатываются экспертами в данной области, что снижает риск раскрытия, а решения оцениваются комплексно обученными рецензентами. Этот подход требует значительных ресурсов, но становится всё более необходимым, для точного измерения улучшений возможностей.


