Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.
Фильтр для отбора траекторий кодового агента научились строить с нуля, не обучая целевую модель после каждой правки. MetaCurate выбрал данные, которые дали лучший средний результат среди проверенных способов отбора, хотя работа не прошла рецензирование, а все числа получили сами авторы. Для команд с собственным контуром дообучения это переносит часть дорогих экспериментов с моделью на более дешёвую настройку фильтра.
Успешный патч ещё не делает траекторию полезной
Траектория кодового агента — это журнал решения задачи: поиск по репозиторию, вызовы инструментов, изменения файлов, запуск тестов и рассуждения между действиями. Обычно для контролируемого дообучения, SFT, оставляют попытки, чей итоговый патч прошёл тесты.
Такой отбор смешивает качество результата с качеством процесса. Успешная попытка может содержать лишние обходы репозитория, неверные вызовы инструментов и повторяющиеся циклы правок. Неуспешная может правильно найти причину ошибки или написать полезный тест, но не успеть довести патч до рабочего состояния.
В собранном для работы наборе все попытки получили одинаковый итоговый статус для 90,1% задач. Значит, метка успеха почти не помогала выбрать лучшую попытку внутри одной задачи. Среди проверенных пар с разным исходом модель-оценщик предпочла неуспешную траекторию в 28,3% случаев.
Ручной фильтр решает проблему лишь частично. Инженер может запретить известные сбои и описать признаки хорошего решения, но такие правила отражают заранее замеченные шаблоны. Кроме того, правдоподобный критерий иногда почти одинаково оценивает все примеры и фактически не влияет на отбор.
Как попарные оценки превращаются в исполняемый фильтр
MetaCurate разделяет поиск фильтра и его применение. Во время поиска LLM сравнивает две траектории и выбирает более полезную для дообучения. Сравнивать примеры проще, чем независимо выставлять им абсолютные баллы: одна траектория сразу задаёт ориентир для другой.
Сам фильтр состоит из исполняемых правил, текстовой шкалы оценки и кода, который объединяет сигналы в итоговый балл. Поиск можно начать с одного общего критерия без правил, написанных специально для кодовых задач.
На каждой итерации агент предлагает несколько правок фильтра. Он видит пары, которые текущая версия расставила не так, как модель-оценщик, объяснения её выбора и диагностику критериев. Например, система показывает правило, которое почти никогда не срабатывает, или два критерия, измеряющих одно и то же.
Кандидаты получают баллы на выборке траекторий. Для продвижения служит отдельный фиксированный набор пар: предлагающий агент не видит сами примеры и решения по ним. Новую версию принимают, только если разница превосходит ожидаемый шум оценивания. Пары также показывают модели в обоих порядках, чтобы отсеять решения, которые меняются после перестановки примеров.
После поиска попарные сравнения больше не нужны. Готовый фильтр независимо оценивает каждую траекторию, поэтому объём вычислений растёт линейно вместе с пулом данных. Обучение целевой модели остаётся только для конечной проверки выбранного набора, а не входит в каждую итерацию поиска. В приведённом сравнении цикл с повторным обучением стоил в 3,5 раза дороже, хотя бюджеты двух подходов не выравнивали.
Когда MetaCurate меняет план разработки
Метод проверили на двух пулах: 4 286 собственных траекторий DSv4Pro и 17 220 траекторий Nemotron v3 SWE-SFT. На выбранных подмножествах дообучали Qwen 3.5 двух размеров, а затем измеряли долю решённых задач SWE-bench Verified. В сравнение вошли случайный отбор, отбор по успешному исходу, ручные правила, фиксированный LLM-фильтр и поиск через цикл обучения.
Фильтр, выросший из пустой заготовки, показал самый высокий наблюдавшийся средний результат на обоих пулах: 64,0% на DSv4Pro и 56,5% на Nemotron v3. Он также обошёл версию, которая начинала поиск с вручную подготовленных критериев. Эффект сохранился при переносе того же набора данных на более крупную целевую модель.
Вывод относится к отбору траекторий кодовых агентов для контролируемого дообучения. Проверка охватывает два пула, модели одного семейства и один конечный бенчмарк, поэтому работа пока обосновывает изменение контура подготовки данных, а не универсальный способ курировать любые наборы.
Команде с регулярным дообучением кодового агента имеет смысл поставить MetaCurate между сбором траекторий и запуском SFT. Такой порядок позволяет сначала улучшать проверяемый исполняемый фильтр, а дорогие запуски модели оставить для подтверждения нескольких финальных вариантов.
Если продукт использует готовую модель через API и не собирает собственные траектории, работа планов почти не меняет. Основная экономия появляется там, где уже есть большой пул попыток, ручные правила отбора и повторяющиеся циклы дообучения. При этом модель-оценщик остаётся источником предпочтений, поэтому фильтр стоит хранить и проверять как часть версии набора данных, а не как нейтральную предварительную обработку.
Источники
Похоже на вашу задачу?
Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.



