C
ChaoBro

Solvita: как Нанкинский университет улучшает навыки соревновательного программирования в больших языковых моделях через «эволюцию агентов»

Solvita: как Нанкинский университет улучшает навыки соревновательного программирования в больших языковых моделях через «эволюцию агентов»

Соревновательное программирование служит отличным индикатором способности больших моделей к логическому выводу.

Задачи уровня Hard на LeetCode, задачи дивизиона 1 (Div1) на Codeforces, алгоритмические задачи уровня IOI — всё это невозможно пройти только благодаря «языковому чутью» модели. Они требуют строгого логического вывода, точного проектирования алгоритмов и безупречного контроля граничных условий.

Проект Solvita от лаборатории NJU-LINK Lab Нанкинского университета (Enhancing Large Language Models for Competitive Programming via Agentic Evolution) предлагает иной путь: вместо того чтобы «скармливать» модели бесконечные массивы задач для зубрёжки, система позволяет агенту в процессе самоэволюции самостоятельно «выработать» навыки решения задач соревновательного программирования.

Что такое эволюция агентов

Ключевой концепцией статьи является «эволюция агентов» (Agentic Evolution). Её рабочий процесс выглядит следующим образом:

Самогенерация. Агент не просто пассивно решает задачи — он также создаёт новые задачи по программированию, разрабатывает новые тестовые кейсы и конструирует новые граничные сценарии. По сути, этот процесс представляет собой ситуацию, когда агент сам составляет для себя экзаменационные билеты.

Самопроверка. Код, написанный агентом, запускается на тестовых кейсах. Успешные решения сохраняются, а неудачные попадают в процесс анализа. Агент должен понять, почему возникла ошибка: проблема в алгоритмической идее, неучтённых граничных условиях или баге в деталях реализации.

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

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

Отличия от традиционных методов

Основные современные методы улучшения навыков программирования у больших моделей:

  • Обучение с учителем (SFT): обучение модели на больших наборах пар (задача, правильный ответ). Эффективно, но зависит от качественных размеченных данных и склонно к переобучению на обучающей выборке.
  • Обучение с усилением (RL): оптимизация модели с использованием показателя успешности прохождения тестов в качестве сигнала вознаграждения. Даёт хорошие результаты, но процесс обучения нестабилен и подвержен «взлому вознаграждения» (reward hacking) — модель учится генерировать код, который проходит тесты, но логически неверен.
  • Усиление рассуждений (Reasoning Augmentation): использование техник вроде цепочки рассуждений для поэтапного вывода модели. Полезно, но не способно фундаментально улучшить способность к проектированию алгоритмов.

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

Экспериментальные результаты

Статья оценивалась на нескольких бенчмарках по соревновательному программированию. Ключевой вывод: модели, обученные с помощью эволюции агентов, демонстрируют значительно лучшую способность к обобщению при столкновении с типами задач, которых не было в обучающей выборке, по сравнению с базовыми моделями SFT и RL.

Это подтверждает центральную гипотезу статьи: способности, «выработанные» в процессе эволюции, более гибки, чем «преподанные» напрямую. Эволюционный процесс вынуждает агента понимать глубинную структуру задачи, а не просто запоминать шаблоны решений.

Связь с работой о рассуждениях уровня золотой медали IMO

Интересно, что Solvita создаёт любопытный контраст с предыдущей работой, утверждавшей, что «достичь уровня рассуждений золотой медали МО можно простым масштабированием».

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

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

Моё мнение

Самое интересное в Solvita — это объединение понятий «агент» и «обучение».

В традиционных парадигмах обучения агент пассивен: вы даёте ему данные, он учится. В Solvita агент активен: он сам решает, чему учиться, как учиться и какие выводы делать из собственных ошибок.

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

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

Конечно, вызовов тоже немало. Как гарантировать качество обучающих данных, генерируемых агентом? Не произойдёт ли деградация способностей в процессе эволюции? Как измерить «истинное понимание», а не просто «запоминание паттернов»?

На эти вопросы потребуются дополнительные исследования. Но Solvita как минимум доказывает: направление самоэволюции агентов жизнеспособно, по крайней мере, в отношении такого сложного показателя, как способность к программированию.


Основные источники: