Большие языковые модели (LLMs) добились впечатляющих успехов в генерации кода для различных задач программирования. Однако они в основном полагаются на распознавание шаблонов из статических примеров кода, а не на понимание того, как код ведёт себя во время выполнения. Это часто приводит к тому, что программы выглядят корректными, но терпят неудачу при запуске.
Роль синтеза программ и подсказок в генерации кода
Синтез программ уже давно используется для оценки LLM и автоматизации тестирования генерации кода, такого как MBPP, HumanEval и CodeContests. Стратегии подсказок, такие как few-shot и Chain-of-Thought, улучшили производительность. Новые методы теперь включают петли обратной связи, которые используют инструменты или результаты выполнения для уточнения выходных данных.
Некоторые фреймворки даже распределяют задачи между несколькими агентами LLM, каждый из которых решает разные аспекты проблемы. Однако большинство подходов всё ещё основаны на простых методах декодирования. В отличие от традиционных стратегий, новые методы руководства, такие как CFG, предлагают более динамичный подход, но пока не получили широкого применения с обратной связью в реальном времени.
Введение в EG-CFG
Исследователи из Тель-Авивского университета представили EG-CFG — новый метод генерации кода, который активно использует обратную связь во время процесса генерации. Вместо того чтобы ждать до конца, EG-CFG оценивает частичный код по мере его написания, направляя модель к правильным и исполняемым выходным данным.
Метод использует поиск по лучу для генерации нескольких вариантов кода, запускает их и интегрирует результаты выполнения для влияния на следующие шаги. Этот цикл обратной связи в реальном времени значительно повышает производительность по стандартным бенчмаркам, таким как MBPP, HumanEval и CodeContests, даже превосходя модели с закрытым исходным кодом, а также обеспечивает эффективное параллельное рассуждение и динамическое исследование.
Как работает EG-CFG: обратная связь в реальном времени, поиск по лучу и синтаксический анализ AST
Метод EG-CFG улучшает генерацию кода, направляя языковые модели с помощью обратной связи в реальном времени во время логического вывода. Для данной задачи программирования он генерирует частичные решения кода и исследует несколько продолжений с помощью поиска по лучу. Эти продолжения проверяются на синтаксис с помощью синтаксического анализа AST, и только допустимые выполняются на тестовых примерах для сбора подробных трассировок выполнения, включая состояния переменных и ошибки.
Эта обратная связь затем вводится в подсказку модели, чтобы информировать будущие прогнозы. Механизм управления интерполирует между стандартным выводом модели и предложениями, основанными на обратной связи, помогая модели шаг за шагом совершенствовать своё решение до тех пор, пока оно не пройдёт все тестовые случаи.
Результаты тестирования: EG-CFG превосходит GPT-4 и Claude на HumanEval и MBPP-ET
Метод EG-CFG был протестирован с использованием двух версий моделей DeepSeek: модели с 1,3 миллиарда параметров локально и более крупной модели V3-0324 через API. Он был оценён на пяти кодовых бенчмарках: MBPP, HumanEval, CodeContests, MBPP-ET и HumanEval-ET.
На HumanEval EG-CFG с DeepSeek V3 решил 90,1% задач правильно, превзойдя GPT-4 (85,5%) и Claude 2 (83,2%). На MBPP-ET он достиг точности 81,4%, установив новый стандарт. Примечательно, что модель с 1,3 миллиарда параметров также продемонстрировала значительный прогресс, улучшившись с 46,3% до 61,7% на HumanEval при использовании EG-CFG.
Заключение: EG-CFG имитирует отладку человеком для продвижения генерации кода
Метод EG-CFG представляет новый способ генерации кода с помощью языковых моделей, включая обратную связь в реальном времени во время генерации. В отличие от традиционных подходов, основанных на статических шаблонах, EG-CFG имитирует процесс, как программисты-люди тестируют и совершенствуют код.
Он использует поиск по лучу для изучения возможных завершений кода, тестирует их с реальными входными данными и затем направляет генерацию на основе результатов. Это происходит построчно, обеспечивая структурированную и действенную обратную связь. Метод также поддерживает работу нескольких агентов параллельно, повышая эффективность. EG-CFG достигает высокой точности по стандартным бенчмаркам, показывая отличные результаты даже на сложных задачах кодирования и с меньшими моделями.
1. Какие проблемы существующих методов генерации кода решает EG-CFG?
Ответ: EG-CFG решает проблему зависимости больших языковых моделей от распознавания шаблонов из статических примеров кода. Он использует обратную связь в реальном времени для улучшения генерации кода, направляя модель к правильным и исполняемым выходным данным.
2. Какие методы используются в EG-CFG для генерации и оценки кода?
Ответ: В EG-CFG используются следующие методы:
* поиск по лучу для генерации нескольких вариантов кода;
* запуск сгенерированных вариантов кода для проверки их работоспособности;
* интеграция результатов выполнения для влияния на следующие шаги генерации;
* синтаксический анализ AST для проверки синтаксиса сгенерированного кода;
* сбор подробных трассировок выполнения, включая состояния переменных и ошибки.
3. Какие результаты были получены при тестировании EG-CFG на стандартных бенчмарках?
Ответ: При тестировании на пяти кодовых бенчмарках (MBPP, HumanEval, CodeContests, MBPP-ET и HumanEval-ET) метод EG-CFG показал высокие результаты. На HumanEval EG-CFG с DeepSeek V3 решил 90,1% задач правильно, превзойдя GPT-4 (85,5%) и Claude 2 (83,2%). На MBPP-ET он достиг точности 81,4%.
4. В чём заключается преимущество EG-CFG перед традиционными подходами к генерации кода?
Ответ: Преимущество EG-CFG заключается в том, что он имитирует процесс отладки человеком. Он использует поиск по лучу для изучения возможных завершений кода, тестирует их с реальными входными данными и затем направляет генерацию на основе результатов. Это происходит построчно, обеспечивая структурированную и действенную обратную связь.
5. Какие перспективы открывает использование EG-CFG в генерации кода?
Ответ: Использование EG-CFG открывает перспективы для повышения точности и эффективности генерации кода с помощью языковых моделей. Он может быть использован для решения сложных задач кодирования и с меньшими моделями, что делает его перспективным инструментом для разработчиков.