Может ли ИИ кодировать? Только маленькими шагами
Не бросайте свою карьеру программиста. Исследования показали, что генеративный ИИ выполняет лишь посредственную работу по кодированию и совершенно не справляется с трудными задачами.
Первые волнующие дни публичного выпуска ChatGPT OpenAI прошлой зимой принесли с собой доказательства способности программы генерировать компьютерный код, что стало откровением для разработчиков. Поначалу казалось, что ChatGPT настолько хорош в кодировании, что внезапно даже люди с небольшими знаниями в области кодирования смогли использовать его для создания мощного программного обеспечения, настолько мощного, что его можно было даже использовать в качестве вредоносного ПО для угрозы компьютерным сетям.
Многомесячный опыт и формальные исследования по этому вопросу показали, что ChatGPT и другие подобные генеративные ИИ сами по себе не могут разрабатывать программы. Лучшее, что они могут сделать, — это предложить детские шаги, в основном для решения простых задач кодирования, которые могут быть полезны, а могут и не быть полезны программистам-людям.
«Генеративность открыла всем глаза на тот факт, что у меня почти может быть партнер, когда я выполняю задачу, которая, по сути, дает мне предложения, которые помогают мне преодолеть творческие препятствия», — сказал Навин Рао, соучредитель и генеральный директор стартапа в области искусственного интеллекта. MosaicML, которую в августе приобрела компания Databricks.
В то же время, по словам Рао, уровень помощи в области кодирования низок.
«Они дают вам подмостки, некоторые вещи, которые можно повторить, но они не дают вам ничего особенно хорошего», - сказал он. «Если я скажу: идите и решите эту действительно сложную задачу, тогда они не смогут этого сделать, верно? Они даже не пишут особенно хороший код; это как если бы кто-то делал это год или два, что-то вроде уровня кода. ."
Действительно, некоторые исследования показали, что большие языковые модели, такие как GPT-4, значительно уступают моделям программистов-людей по общему уровню качества кода.
В недавнем исследовании, проведенном Саедом Эрфаном Арефином и его коллегами из Техасского технологического университета, GPT-4 и его предшественник GPT-3.5 были протестированы на примере проблем с кодированием на онлайн-платформе LeetCode — задач, которые соискатели задают в Google и других организациях. технологические гиганты.
Программы оценивались по двум основным задачам: «организация данных для эффективного доступа (с использованием соответствующих структур данных)» и «создание рабочих процессов для обработки данных (с использованием эффективных алгоритмов)». Их также оценивали по так называемому «манипулированию строками», которое пересекается с двумя другими.
Когда языковым моделям были даны так называемые полные вопросы, где программы были снабжены примерами решений вопросов, 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 подвергался испытаниям на задачах LeetCode, таких как Arefin и команда из Texas Tech, а также проверялась генерация кода в так называемой Common Weakness Environment — тесте уязвимостей, поддерживаемом исследовательской фирмой MITRE.
Лу и его команда тестировали ChatGPT на задачах, сформулированных либо до, либо после 2021 года, поскольку ChatGPT обучался только на материалах до 2021 года, поэтому они хотели посмотреть, как программа поведет себя, когда ее тестировали как на существующих, так и на новых задачах.
Результаты поразительны. Что касается новых задач, получивших название «Aft.», предназначенных «после» 2021 года, Луи и его команда обнаружили очень низкие показатели правильности кода ChatGPT. «Способность ChatGPT функционально корректировать генерацию кода значительно снижается по мере увеличения сложности проблемы», — пишут они. Только 15,4% программного кода на языке C было приемлемо, и ни один из них не был приемлем для самых сложных задач. И «код, сгенерированный ChatGPT для сложных и средних задач, с большей вероятностью будет содержать ошибки как компиляции, так и времени выполнения». Программисты-люди, прошедшие тест, в среднем ответили правильно на 66%.
Для более старых задач, помеченных как «Bef.», процент правильных ответов возрастает до 31%, что все еще мало.
Команда рассмотрела множество примеров и определила виды неправильных ответов, которые ChatGPT давал в своих строках кода. Например, хотя общий дизайн программы может быть в правильном направлении, данная строка кода будет демонстрировать фундаментальное неправильное использование чего-то такого простого, как вычисление переменной, ошибку, которую трудно представить начинающему программисту.
Пример неправильного кода, созданного ChatGPT. Программа предполагает сортировку ящиков по категориям по описанию. В строке 12 код решает, что если ящик не является ни «громоздким», ни «тяжелым», его следует отсортировать по категории «оба» — с точностью до наоборот для описания ящика, которое не должно быть «ни тем, ни другим».
Лю и его команда пришли к ряду интересных общих выводов, а также смягчающих факторов. Во-первых, они обнаружили, что ChatGPT борется с новыми проблемами: «ChatGPT может иметь ограничения при генерации кода для незнакомых или невидимых проблем в наборе обучающих данных, даже если проблемы просты с точки зрения логики с человеческой точки зрения».
Но имеет значение, какой язык программирования используется: технология лучше работает с некоторыми языками программирования, которые «строго типизированы» или более «выразительны».
«В целом вероятность того, что ChatGPT сгенерирует функционально правильный код, выше при использовании языков с более высокой выразительной силой (например, Python3)», — пишут они.
Еще одним недостатком является то, что ChatGPT может быть запутанным, поэтому его ошибки сложнее исправлять. «Процесс генерации кода ChatGPT может быть небрежным, — пишут они, — и сгенерированный код может не соответствовать некоторым подробно описанным условиям, в результате чего его будет трудно успешно генерировать или исправлять (до функциональной корректности)».
А в тесте Common Vulnerabilities, проведенном MITRE, «код, сгенерированный ChatGPT, часто обнаруживает соответствующие уязвимости, что является серьезной проблемой», пишут они. К счастью, отмечают они, ChatGPT способен исправить многие из этих уязвимостей в последующих запросах, если предоставить более подробную информацию из набора данных MITRE.
Все три исследования показывают, что использование генеративного ИИ для программирования находится на очень ранней стадии. По словам Рао, это полезно в простых помощникских задачах, за которые отвечает программист.
Вполне возможно, что прогресс будет достигнут благодаря новым подходам, которые ломают парадигмы программирования. Например, недавняя работа Google обучает языковые модели обращаться к Интернету за инструментами для решения задач. А работа подразделения Google DeepMind обучает языковые модели более глубоко разрабатывать собственные подсказки для повышения производительности — своего рода саморефлексивное программирование, которое кажется многообещающим.
В конечном итоге может потребоваться нечто более глубокое, говорит Рао.
«Я не думаю, что эту проблему можно решить с помощью подсказок», — говорит Рао. «Я думаю, что на самом деле нам еще предстоит решить некоторые фундаментальные проблемы — чего-то фундаментально не хватает».
Рао добавил: «По сути, мы можем передать в большую нейронную сеть столько данных, что это будет эквивалентно сотне или более жизней человеческого опыта, и тем не менее, человек с гораздо меньшим опытом может лучше решать новые проблемы и не совершать определенные виды основных ошибок. ."


