Журнал · Rit.work

TCS обучает LLM для кода искать ошибки собственными тестами

Авторы TCS разделили обучение генератора тестов на проверку корректности и поиск ошибок в текущих решениях модели.

Rit.work
Студия разработки
4 сентября 2026 г.4 мин чтения

Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.

Исследователи из Nanyang Technological University и Skywork AI представили TCS — систему постобучения LLM для кода с генерацией исполняемых тестов; работа опубликована как препринт, не проходивший рецензирования. На LiveCodeBench вариант TCS достиг 54,75% решённых задач при отборе по публичным и сгенерированным тестам против 47,82% у модели после обучения с учителем. Работа важна командам, которые обучают собственные модели для генерации кода или выбирают лучшее из нескольких решений во время выполнения.

Что сделали

Авторы рассматривают генерацию тестов как отдельную задачу проверки кода. Один и тот же вариант модели играет две роли: решатель пишет программу по условию, а проверяющий получает условие и кандидат программы, после чего формирует входные данные и ожидаемый результат.

Обучение разделено на два этапа. На первом проверяющий получает награду, если сгенерированный тест выполняется на эталонном решении и выдаёт указанный результат. Точное копирование примеров из условия не засчитывается. Задача этого этапа — снизить долю некорректных тестов, которые могли бы ошибочно отвергнуть рабочую программу.

На втором этапе модель учится искать контрпримеры. В обучение попадают исполняемые, но ошибочные программы, недавно созданные текущей версией решателя. Тест засчитывается, только если эталонное решение его проходит, а проверяемый кандидат — нет. Поэтому генератор ориентируется не на фиксированный набор типичных ошибок, а на текущие сбои самой модели.

Кандидаты хранятся в обновляемом буфере последних результатов. По мере изменения решателя меняются и примеры для проверяющего. Авторы противопоставляют это обучению с учителем на заранее подготовленном наборе тестов: такой набор не следует за распределением ошибок новой версии модели.

Во время применения система создаёт несколько программ, генерирует для них тесты, объединяет тесты в общий набор и выбирает программу, прошедшую больше проверок. Эталонное решение на этом этапе не требуется: оно используется только при постобучении генератора тестов.

Что показали

Авторы проверили TCS в двух режимах. Первый измеряет pass@1 — долю задач, решённых одним выбранным ответом без последующего ранжирования. Второй оценивает отбор лучшего ответа из нескольких кандидатов по числу пройденных тестов.

По замерам авторов, TCS улучшал оба показателя на TACO и LiveCodeBench относительно исходной модели и совместного обучения с учителем. Для меньшего варианта модели средний результат отбора по собственным тестам составил 28,02% против 21,89% у обучения с учителем. Это указывает на два разных эффекта: совместное обучение проверяющего может улучшать сам решатель, а сгенерированные проверки дают дополнительный сигнал при ранжировании.

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

Ограничения

TCS требует эталонного решения во время постобучения. Без него предложенный механизм не может достоверно определить, корректен ли новый тест. Это ограничивает применение на задачах, где есть только условие, неполные проверки или код без подтверждённой реализации.

Обучение проводилось на 6 318 отфильтрованных задачах TACO, а оценка — на TACO и LiveCodeBench. Обучающая выборка требовала наличия проходящего Python-решения. Для основных экспериментов использовались варианты DeepSeek-R1-Distill-Qwen размером до 7B, поэтому работа не показывает, сохранится ли эффект при обучении других семейств моделей и на задачах из производственных репозиториев.

При ранжировании авторы рассматривали наборы из 16–32 кандидатов и генерировали по одному тесту за вызов. В работе прямо отмечено, что одновременная генерация нескольких тестов потребовала бы другой функции награды: простой подсчёт корректных случаев допускает оптимизацию формального показателя без роста полезности.

Сравнение охватывает исходную модель, обучение с учителем, отдельные варианты обучения решателя и проверяющего, модель награды и генерацию тестов. Однако все обучаемые основные варианты построены на одной линейке базовых моделей. Внешние LLM использовались для проверки переноса при ранжировании их ответов, но TCS на таких моделях не обучали.

Что это значит

Для команды, которая постобучает собственную LLM для кода, работа меняет план эксперимента: генератор тестов имеет смысл проектировать не как побочную функцию решателя, а как отдельную обучаемую роль. Практическая схема следует из устройства TCS: сначала добиться корректности тестов на эталонных решениях, затем обучать поиск ошибок на свежих кандидатах текущей модели.

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

Для команд, которые только вызывают внешнюю модель через API и не управляют её обучением, вывод уже. Можно экспериментировать с генерацией нескольких решений и их перекрёстной проверкой, но работа не доказывает, что необученная модель создаст достаточно корректные и различающие тесты. Результаты авторов, напротив, связывают пользу ранжирования со специальным двухэтапным постобучением.

TCS пока не заменяет подготовленные наборы тестов и не отменяет обычную проверку программ. Работа даёт основание добавить обучаемого проверяющего в исследовательский план, если доступны эталонные решения и бюджет на обучение с подкреплением. Без этих условий она не требует пересмотра архитектуры продукта.

Источники

Иллюстрация: рисунок из статьи «Two-Stage Reinforcement Learning for Sound and Adversarial Test Generation in Code LLMs», Jiacheng Xu, Wentao Zhang, Zhiyi Lyu и др., CC BY 4.0

Пауза в чтении

Похоже на вашу задачу?

Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.

Rit.work

Студия разработки

Собираем мобильные приложения и помогаем командам получать от AI реальную пользу. Основатель и команда, работаем удалённо — с клиентами в России и за рубежом.

Ко всем материалам
Понравилось? Обсудим вашу задачу