AutoCode: как LLM научились придумывать и проверять соревновательные задачи уровня онлайн-джаджей
AutoCode — это фреймворк, который обучает большие языковые модели не только решать задачи, но и создавать и проверять задачи соревновательного программирования и логику оценивания. Перенеся фокус с простого решения задач на их постановку, система имитирует работу человеческих составителей задач и формирует наборы тестов и вердиктов, которые соответствуют официальным онлайн-джаджам.
Почему важна постановка задач
Публичные бенчмарки кода часто опираются на недостаточно специфицированные тесты. Слабые тесты позволяют проходить неправильным или хитрым решениям (ложные положительные), а также могут отвергать корректные программы при подаче некорректных входных данных (ложные отрицательные). AutoCode решает эти проблемы, делая валидацию и генерацию adversarial-тестов центральной частью процесса, что повышает качество оценки и улучшает сигналы вознаграждения для обучения с подкреплением.
Основной цикл: Validator → Generator → Checker
AutoCode запускает замкнутый цикл, похожий на рабочий процесс в конкурсах. На каждом шаге генерируется несколько кандидатов с помощью LLM, после чего выбирается лучший по целевым тестам внутри фреймворка.
Validator (уменьшение ложных отрицательных)
Шаг Validator обеспечивают легальность входных данных, чтобы не отбрасывать корректные решения из-за некорректных случаев. Система просит LLM сгенерировать 40 входных примеров — обычно 10 валидных и 30 почти-валидных неправомерных (например, ошибки на границах). Затем она предлагает три кандидатных валидатора и выбирает тот, который лучше классифицирует эти случаи, предотвращая падения и неправильные отказания.
Generator (уменьшение ложных положительных)
Generator создает adversarial тесты с тремя взаимодополняющими стратегиями:
- Перебор малых наборов для покрытия границ
- Случайные и экстремальные случаи (переполнения, точность, коллизии хешей)
- Структуры, вызывающие TLE, чтобы ломать решения с неправильной сложностью
Неправильные случаи фильтруются валидатором; оставшиеся — дедуплицируются и балансируются по корзинам перед выборкой в итоговый набор.
Checker (логика вердикта)
Checker сравнивает выводы участников с эталонным решением в соответствии со сложными и протокольно-осведомлёнными правилами. AutoCode генерирует 40 сценариев для чекера и три кандидата-программы для проверки, оставляет только сценарии, одобренные валидатором, и выбирает чекер с наивысшей точностью на размеченных сценариях.
Interactor (интерактивные задачи)
Для интерактивных задач AutoCode использует мутантный интерактор: он делает небольшие логические правки (“мутанты”) в эталонном решении и выбирает интеракторы, которые принимают истинное решение, но отвергают мутанты. Это повышает дискриминацию и закрывает пробел, где многие публичные датасеты избегали интерактивов.
Двойная верификация и генерация новых задач
AutoCode может генерировать новые варианты задач, начиная с исходной задачи Codeforces (ниже ~2200 Elo). LLM составляет новое условие и два решения: эффективное эталонное и простое брутфорс-решение. Задача принимается только если эталонное решение согласуется с брутфорсом на сгенерированном наборе тестов (брутфорс может давать TLE на больших тестах, но служит эталоном на малых/исчерпывающих случаях). Такая двойная верификация отфильтровывает около 27% проблемных элементов и повышает корректность эталонных решений с 86% до 94% до проверки человеком.
Эксперты затем оценивают выжившие задачи по разрешимости, корректности, качеству, новизне и сложности. После фильтрации 61.6% сгенерированных задач годятся для обучения моделей, 76.3% — для обучения людей, и 3.2% достигают уровня ICPC/IOI. Сложность обычно возрастает по сравнению с исходником, а прирост сложности коррелирует с восприятием качества.
Результаты и показатели
На наборе из 7,538 существующих задач (195,988 человеко-сабмитов) AutoCode достигает 91.1% согласованности с официальными вердиктами, при 3.7% ложноположительных и 14.1% ложноотрицательных. Это превосходит предыдущие генераторы типа CodeContests, CodeContests+, TACO и HardTests (72.9–81.0% согласованности).
На отдельном наборе из 720 недавних задач Codeforces (включая интерактивы) полный фреймворк показывает 98.7% согласованности с официальными решениями, 1.3% FPR и 1.2% FNR. Абляции показывают, что все три стратегии генератора и оптимизация подсказок важны: отключение оптимизации подсказок снижает согласованность до 98.0% и более чем удваивает FNR до 2.9%.
Значение для бенчмаркинга
AutoCode объединяет цикл Validator–Generator–Checker (+Interactor) с двойной верификацией (эталон vs брутфорс) для создания наборов тестов конкурсного уровня и новых задач. Стандартизируя легальность ограничений, adversarial-покрытие и протокольно-осведомленное оценивание, система уменьшает ложные срабатывания и отвергания и добивается согласованности с джаджем (≈99% на отложенных задачах; 98.7% на недавних Codeforces, включая интерактивы). Это делает сигналы оценки более чистыми и устойчивыми для тренировки и оценки моделей.
Мутантный интерактор и схема двойной верификации — практические улучшения, закрывающие известные провалы публичных бенчмарков и позволяющие автоматически генерировать качественные задачи для тренировки и конкурсов.
Ресурсы
Полные технические детали и воспроизводимый код доступны в статье и проекте AutoCode: https://arxiv.org/pdf/2510.12803