Отправьте статью сегодня! Журнал выйдет ..., печатный экземпляр отправим ...
Опубликовать статью

Молодой учёный

Автоматическая генерация программного кода с использованием больших языковых моделей

Информационные технологии
08.07.2026
1
Поделиться
Аннотация
Автоматическая генерация программного кода с использованием больших языковых моделей переносит часть работы разработчика с ручного набора фрагментов на постановку задачи, отбор вариантов и проверку результата. Цель статьи — определить, какие задачи кодогенерации такие модели решают наиболее надёжно и какие ограничения необходимо учитывать при их применении в разработке. Рассмотрены генерация кода по естественно-языковому описанию, автодополнение, заполнение пропусков в существующем коде и многошаговое уточнение программы. Показано, что практическая ценность таких инструментов зависит от связки «запрос — сгенерированный вариант — тест — ревью», а не от самого факта получения правдоподобного фрагмента. Поэтому автоматическую генерацию кода следует рассматривать как способ подготовки кандидатов на решение, которые проходят инженерную проверку перед включением в проект.
Библиографическое описание
Козырев, П. М. Автоматическая генерация программного кода с использованием больших языковых моделей / П. М. Козырев. — Текст : непосредственный // Молодой ученый. — 2026. — № 28 (631). — С. 25-27. — URL: https://moluch.ru/archive/631/139043.


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

Технически такая генерация опирается на обучение моделей на больших корпусах исходного кода, документации, комментариев и текстовых описаний задач. В работе OpenAI Codex была показана возможность генерировать программы из docstring-описаний и оценивать результат по прохождению тестов HumanEval. Этот подход важен тем, что качество ответа определяется не внешней похожестью на правильное решение, а фактическим выполнением требований. Для программного кода это принципиально: фрагмент может выглядеть убедительно, но ошибаться на граничном случае, неверно обрабатывать исключение или использовать неподходящий алгоритм.

Существуют разные режимы автоматической генерации кода. Первый режим — генерация функции или программы по краткому описанию. Он характерен для бенчмарков MBPP, HumanEval и APPS, где модель получает условие задачи и должна выдать исполняемый код. Второй режим — автодополнение, когда модель продолжает уже начатый фрагмент с учётом локального контекста файла. Третий режим — заполнение пропусков в существующей программе. Модели InCoder и StarCoder показывают, что для реальной разработки важны продолжение кода слева направо и редактирование фрагмента с учётом строк до и после изменяемого участка.

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

Наиболее заметные успехи кодогенерации связаны с короткими и хорошо специфицированными задачами. В таких условиях модель получает достаточно явный контракт: входные данные, ожидаемый результат и иногда примеры. Исследования Program Synthesis with Large Language Models и Evaluating Large Language Models Trained on Code показывают, что увеличение размера модели, обучение на коде и повторная выборка вариантов повышают долю решений, проходящих тесты. Однако этот результат не означает, что модель понимает задачу в инженерном смысле. Она может воспроизвести распространённый алгоритмический шаблон, но не учесть скрытое ограничение, которое в реальном проекте содержится в бизнес-логике, схеме данных или неявном API-контракте.

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

Поэтому граница применимости больших языковых моделей проходит там, где от отдельного фрагмента кода требуется знание широкого проектного контекста. Модель может написать корректную функцию сортировки, преобразователь формата или простой SQL-запрос. Значительно сложнее получить от неё изменение, которое одновременно учитывает миграцию базы данных, обратную совместимость API, обработку ошибок клиента, ограничения безопасности и наблюдаемость. Если эти требования не переданы явно в запросе или не доступны модели через контекст репозитория, сгенерированный код будет опираться на статистически вероятное продолжение запроса, а не на фактическую архитектуру системы.

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

Тип модели влияет на то, какие ошибки она будет делать в коде. Универсальная языковая модель способна генерировать программы, но специализированные модели, обученные на больших корпусах исходного кода, обычно лучше учитывают синтаксис, идиомы языков и типовые паттерны библиотек. CodeT5 использует представление идентификаторов и объединяет задачи понимания и генерации кода. StarCoder развивает открытые модели для программирования на основе набора данных The Stack, а DeepSeek-Coder показывает влияние масштабного предварительного обучения на коде и на задачах заполнения пропусков. Эти работы подтверждают, что кодогенерация стала самостоятельным направлением, где качество зависит от состава обучающих данных, длины контекста, способа дообучения и процедуры оценки.

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

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

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

Литература:

  1. Lu S., Guo D., Ren S., Huang J., Svyatkovskiy A., Blanco A., Clement C., Drain D., Jiang D., Tang D., Ge L., Shou L., Zhou L., Tufano M., Gong M., Zhou M., Duan N., Sundaresan N., Deng S. K., Fu S., Liu S. CodeXGLUE: A Machine Learning Benchmark Dataset for Code Understanding and Generation. — 2021. — URL: https://arxiv.org/abs/2102.04664.
  2. Hendrycks D., Basart S., Kadavath S., Mazeika M., Arora A., Guo E., Burns C., Puranik S., He H., Song D., Steinhardt J. Measuring Coding Challenge Competence With APPS. — 2021. — URL: https://arxiv.org/abs/2105.09938.
  3. Austin J., Odena A., Nye M., Bosma M., Michalewski H., Dohan D., Jiang E., Cai C. J., Terry M., Le Q., Sutton C. Program Synthesis with Large Language Models. — 2021. — URL: https://arxiv.org/abs/2108.07732.
  4. Chen M., Tworek J., Jun H., Yuan Q., Pinto H. P. O., Kaplan J., Edwards H., Burda Y., Joseph N., Brockman G., Ray A., Puri R., Krueger G., Petrov G., Khlaaf H., Sastry G., Mishkin P., Chan B., Gray S., Ryder N., Pavlov M., Power A., Kaiser L., Bavarian M., Winter C., Tillet P., Such F. P., Cummings D., Plappert M., Chantzis F., Barnes E., Herbert-Voss A., Guss W. H., Nichol A., Paino A., Tezak N., Tang J., Babuschkin I., Balaji S., Jain S., Saunders W., Hesse C., Carr A. N., Leike J., Achiam J., Misra V., Morikawa E., Radford A., Knight M., Brundage M., Murati M., Mayer K., Welinder P., McGrew B., Amodei D., McCandlish S., Sutskever I., Zaremba W. Evaluating Large Language Models Trained on Code. — 2021. — URL: https://arxiv.org/abs/2107.03374.
  5. Wang Y., Wang W., Joty S., Hoi S. C. H. CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation. — 2021. — URL: https://arxiv.org/abs/2109.00859.
  6. Xu F. F., Alon U., Neubig G., Hellendoorn V. J. A Systematic Evaluation of Large Language Models of Code. — 2022. — URL: https://arxiv.org/abs/2202.13169.
  7. Nijkamp E., Pang B., Hayashi H., Tu L., Wang H., Zhou Y., Savarese S., Xiong C. CodeGen: An Open Large Language Model for Code with Multi-Turn Program Synthesis. — 2022. — URL: https://arxiv.org/abs/2203.13474.
  8. Fried D., Aghajanyan A., Lin J., Wang S., Wallace E., Shi F., Zhong R., Yih W.-t., Zettlemoyer L., Lewis M. InCoder: A Generative Model for Code Infilling and Synthesis. — 2022. — URL: https://arxiv.org/abs/2204.05999.
  9. Li Y., Choi D., Chung J., Kushman N., Schrittwieser J., Leblond R., Eccles T., Keeling J., Gimeno F., Dal Lago A., Hubert T., Choy P., de Masson d'Autume C., Babuschkin I., Chen X., Huang P.-S., Welbl J., Gowal S., Cherepanov A., Molloy J., Mankowitz D. J., Robson E. S., Kohli P., de Freitas N., Kavukcuoglu K., Vinyals O. Competition-Level Code Generation with AlphaCode. — 2022. — DOI: 10.1126/science.abq1158. — URL: https://arxiv.org/abs/2203.07814.
  10. Li R., Allal L. B., Zi Y., Muennighoff N., Kocetkov D., Mou C., Marone M., Akiki C., Li J., Chim J., Liu Q., Zheltonozhskii E., Zhu T., Wang T., Dehaene O., Davaadorj M., Lamy-Poirier J., Monteiro J., Shliazhko O., Gontier N., Meade N., Zebaze A., Yee M. H., Umapathi L. K., Zhu J., Lipkin B., Oblokulov M., Wang Z., Murthy R., Stillerman J., Patel S. S., Abulkhanov D., Zocca M., Dey M., Zhang Z., Fahmy N., Bhattacharyya U., Yu W., Singh S., Lu X., Villegas P., Kunakov M., Zhdanov F., Romero M., Lee T., Timor N., Ding J., Schlesinger C., Schoelkopf H., Ebert J., Dao T., Mishra M., Gu A., Robinson J., Anderson C. J., Dolan-Gavitt B., Contractor D., Reddy S., Fried D., Bahdanau D., Jernite Y., Ferrandis C. M., Hughes S., Wolf T., Guha A., de Vries H., von Werra L. StarCoder: may the source be with you! — 2023. — URL: https://arxiv.org/abs/2305.06161.
  11. Guo D., Zhu Q., Yang D., Xie Z., Dong K., Zhang W., Chen G., Bi X., Wu Y., Li Y. K., Luo F., Xiong Y., Liang W. DeepSeek-Coder: When the Large Language Model Meets Programming — The Rise of Code Intelligence. — 2024. — URL: https://arxiv.org/abs/2401.14196.
Можно быстро и просто опубликовать свою научную статью в журнале «Молодой Ученый». Сразу предоставляем препринт и справку о публикации.
Опубликовать статью
Молодой учёный №28 (631) июль 2026 г.
Скачать часть журнала с этой статьей(стр. 25-27):
Часть 1 (стр. 1-73)
Расположение в файле:
стр. 1стр. 25-27стр. 73
Похожие статьи
Использование генеративного искусственного интеллекта в программировании
Исследование методов автоматического программирования с применением искусственного интеллекта
Влияние квантизации больших языковых моделей на качество кодогенерации для компилируемых и интерпретируемых языков
Применение локальных LLM-моделей для предварительного анализа результатов SAST в корпоративной разработке
Автоматизация разработки программного обеспечения с помощью искусственного интеллекта: как нейросети могут изменить процессы разработки
Исследование применения больших языковых моделей для автоматизации оценки сроков и бюджета IT-проектов
Генеративные модели в искусственном интеллекте: от творчества до практических приложений
Методика промпт-инжиниринга с учетом педагогическими ограничениями для генерации адаптивных заданий по программированию
Влияние искусственного интеллекта на профессию программиста: угроза или помощник?
Интеграция генеративного искусственного интеллекта в корпоративные процессы создания контента и коммуникации: стратегии внедрения и структуры управления

Молодой учёный