Может ли ИИ писать код? Только маленькими шагами

Может ли ИИ писать код? Небольшими шагами

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

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

Также: Как использовать ChatGPT для написания кода

“То, что генерация открыла глаза всем, это то, что я почти могу иметь партнера, когда выполняю задачу, который в сущности дает мне предложения, помогающие преодолеть творческие тупики”, – сказал Навин Рао, сооснователь и исполнительный директор стартапа по ИИ MosaicML, который был приобретен в августе компанией Databricks.

В то же время, по словам Рао, помощь в программировании невелика.

“Они дают вам опору, некоторые вещи, которые можно повторять, но они не дают вам ничего особенно хорошего”, – сказал он. “Если я скажу: решите эту очень сложную проблему, то они не смогут этого сделать, верно? Они даже не пишут особенно хороший код; это как человек, который занимается этим год или два, уровень кода.”

Действительно, некоторые исследования показали, что большие модели языка, такие как GPT-4, значительно уступают человеческим программистам по общему уровню качества кода.

Недавнее исследование ученых Sayed Erfan Arefin и его коллег из Техасского технологического университета проверило GPT-4 и его предшественника GPT-3.5 на примерах задач по кодированию с онлайн-платформы LeetCode – задач, которые задаются соискателям работы в Google и других крупнейших технологических гигантах.

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

Также: Как использовать ChatGPT для создания диаграмм и таблиц

Когда моделям языка были предоставлены полные вопросы, где программам были предоставлены примеры решений для вопросов, GPT-4 правильно ответил лишь на 26% вопросов, в то время как у людей эта цифра составила 45%. Когда некоторая информация была убрана, способность GPT-4 сильно снизилась – правильно отвечено было только на 19% вопросов. У GPT-3.5 эта цифра была около 12% и 10% соответственно.

Авторы также изучили качество кода GPT как в случае успеха, так и в случае неудачи. В обоих случаях они обнаружили одну и ту же проблему: GPT часто испытывал трудности с базовой практикой программирования, “определением переменных в последовательном порядке”.

Корректность GPT-3, GPT-4 и людей для обучающих и тестовых наборов при полной информации о проблеме, с примерами решений и неполной информации. 

Масштаб также является проблемой для генерации кода ИИ. Наиболее обнадеживающие результаты изучения GPT-4 получены на простых задачах.

Одно исследование, проведенное Дэвидом Ноевером из фирмы по кибербезопасности PeopleTec, проверило, насколько хорошо GPT-4 может находить ошибки в коде на примере программ, аналогичных существующим программам на рынке для тестирования на уязвимости, таким как Snyk, форма “Статического тестирования безопасности приложений” (SAST).

В некоторых случаях GPT-4 нашел больше ошибок, чем Snyk, сообщают авторы. Но он также пропустил множество ошибок. И он был протестирован всего на немногим более 2000 строк кода. Это крошечное количество по сравнению с полноценными приложениями, которые могут содержать сотни тысячи или миллионы строк кода во множестве связанных файлов. Неясно, могут ли успехи на игрушечных задачах быть применимы к такой сложности.

Кроме того: как ChatGPT может переписывать и улучшать ваш существующий код

В исследовании, проведенном в прошлом месяце Жиджи Лю и его коллегами из Университета ШанхайТек, было изучено качество кода с точки зрения правильности, понятности и безопасности. В ходе исследования ChatGPT был протестирован на задачах LeetCode, также как и командой Арефина из Техасского технологического университета, и его кодогенерация была протестирована на так называемой среде общей уязвимости, которая представляет собой набор уязвимостей, поддерживаемый исследовательской фирмой MITRE.

Лу и его команда протестировали ChatGPT на задачах, сформулированных до или после 2021 года, поскольку ChatGPT был обучен только на материале до 2021 года, и они хотели посмотреть, как программа справляется с уже установленными и новыми вызовами.

Результаты поразительны. Для новых проблем, называемых “Aft.”, что означает “после” 2021 года, Лю и его команда обнаружили очень низкие показатели правильности кода ChatGPT. “Способность ChatGPT генерировать функционально правильный код значительно снижается с увеличением сложности проблемы”, пишут они. Только 15,4% кода на языке C было приемлемым, и ни одна задача из самых сложных не была выполнена правильно. Кроме того, “сгенерированный ChatGPT код для сложных и средних задач в большей степени вероятно содержит как компиляционные, так и временные ошибки выполнения”. Средний процент правильных ответов у человеческих программистов составлял 66%.

Также: как использовать ChatGPT для создания приложения

Для старых задач, обозначенных как “Bef.”, процент правильных ответов поднимается до 31%, что все равно является низким показателем.

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

Пример неправильного кода, сгенерированного ChatGPT. Программа должна сортировать ящики по описанию. В строке 12 код решает, что если ящик не является “громоздким” или “тяжелым”, он должен быть отсортирован в категорию “оба” – что является точным противоположным для описания ящика, которое должно быть “ни одно из них”.

Лю и его команда пришли к ряду интересных общих выводов, а также к факторам смягчения. Во-первых, они обнаружили, что ChatGPT испытывает затруднения с новыми задачами: “ChatGPT может иметь ограничения при генерации кода для незнакомых или невидимых задач в обучающем наборе данных, даже если эти задачи легки с точки зрения логики человека”.

Но важно, на каком языке программирования используется технология: она работает лучше с определенными языками программирования, которые являются “строго типизированными” или более “выразительными”.

Также: как на самом деле работает ChatGPT?

“В целом, вероятность того, что ChatGPT будет генерировать функционально правильный код, выше при использовании языков с более высокой выразительной мощностью (например, Python3)”, пишут они.

Еще одним недостатком является то, что ChatGPT может быть запутанным, что делает исправление его ошибок сложным. “Процесс генерации кода ChatGPT может быть небрежным”, пишут они, “и сгенерированный код может не соответствовать некоторым детальным условиям, что затрудняет успешную генерацию или исправление (до функционально правильного состояния)”.

И в тесте на общие уязвимости, проведенном MITRE, “сгенерированный ChatGPT код часто содержит соответствующие уязвимости, что является серьезной проблемой”, пишут они. К счастью, они отмечают, что ChatGPT способен исправить множество этих уязвимостей в последующих запросах, если предоставить более подробную информацию из набора данных MITRE.

Все три исследования свидетельствуют о том, что использование генеративного искусственного интеллекта для программирования находится на очень ранней стадии. Как сказал Рао, это полезно для простых задач ассистента, где программист находится в роли руководителя.

Также: 10 лучших плагинов ChatGPT (и как извлечь максимум из них)

Возможно, прогресс будет достигнут с помощью новых подходов, которые нарушают парадигмы программирования. Например, недавние исследования Google обучают языковые модели обращаться к интернету для решения задач. И работа отдела Google DeepMind обучает языковые модели более глубокому вхождению в инженерию собственных подсказок для улучшения производительности – такой вид саморефлексивного программирования, который кажется многообещающим.

В конечном счете может потребоваться нечто более глубокое, говорит Рао.

“Я не думаю, что это может быть решено с помощью подсказок”, говорит Рао. “Я думаю, что здесь все еще есть некоторые фундаментальные проблемы, которые нам предстоит решить – что-то всё еще отсутствует”.

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