Новые инструменты, помогающие разработчикам писать программы, генерируют похожие ошибки
Автор: Уилл Найт
Искусственный интеллект теперь умеет писать код. Но, как оказалось, в этом вопросе он может быть столь же несовершенен как человек.
В июне прошлого года GitHub, дочерняя компания Microsoft, предоставляющая инструменты для размещения и совместной работы над кодом, выпустила бета-версию программы, использующей искусственный интеллект для помощи программистам. Начинаете вводить команду, запрос к базе данных или запрос к API — и программа под названием Copilot угадает ваше намерение и напишет все остальное.
Алекс Нака, специалист по анализу данных в биотехнологической компании, который подписался на тестирование Copilot, говорит, что программа может быть очень полезной и изменила его методы работы. «Она позволяет мне тратить меньше времени на переход к браузеру для поиска документации по API или примеров на Stack Overflow», — говорит он. «Мне кажется, что моя работа сменилась с генерации кода на его разбор».
Но Нака обнаружил, что ошибки могут вкрадываться в его код разными путями. «Бывали случаи, когда я пропускал какую-то тонкую ошибку, когда принимал одно из предложений программы», — говорит он. «И отследить это бывает очень сложно, возможно потому, что компьютер делает ошибки иного рода – не такие как мои».
Риски того, что ИИ сгенерирует ошибочный код, могут быть удивительно высокими. Исследователи из Нью-Йоркского университета недавно проанализировали код, созданный Copilot, и обнаружили, что для определенных задач, где безопасность имеет решающее значение, код содержит дефекты безопасности примерно в 40 процентах случаев.
Эта цифра «немного выше, чем я ожидал» — отмечает Брендан Долан-Гавитт, профессор Нью-Йоркского университета, участвовавший в анализе. «Но Copilot обучался не для того, чтобы писать хороший код, а для того, чтобы создавать текст, который будет соответствовать заданной подсказке».
Несмотря на недостатки, Copilot и подобные ему инструменты с искусственным интеллектом могут стать предвестниками больших перемен в том, как разработчики программного обеспечения пишут код. Растет интерес к использованию ИИ для автоматизации рутинной работы. Но Copilot также подчеркивает некоторые подводные камни современных методов ИИ.
Анализируя код, доступный для плагина Copilot, Долан-Гавитт обнаружил, что он включает в себя список запрещенных фраз. Очевидно, они были введены для того, чтобы система не выдавала оскорбительные сообщения или не копировала известный код, написанный кем-то другим.
Оге де Моор, вице-президент по исследованиям GitHub и один из разработчиков Copilot, говорит, что безопасность была проблемой с самого начала. Он говорит, что процент дефектного кода, приведенный исследователями из Нью-Йоркского университета, относится только к подмножеству кода, где вероятность дефектов безопасности выше.
Де Моор изобрел CodeQL, инструмент, используемый исследователями из Нью-Йоркского университета, который автоматически выявляет ошибки в коде. По его словам, GitHub рекомендует разработчикам использовать Copilot вместе с CodeQL, чтобы обеспечить безопасность своей работы.
Программа GitHub построена на основе модели искусственного интеллекта, разработанной OpenAI, известной компанией, занимающейся передовыми разработками в области машинного обучения. Эта модель, названная Codex, состоит из большой искусственной нейронной сети, обученной предсказывать следующие символы в тексте и компьютерном коде. Алгоритм переработал миллиарды строк кода, хранящихся на GitHub — не все из них идеальны, — чтобы научиться писать собственный код.
OpenAI создал свой собственный инструмент кодинга ИИ на основе Codex, который может выполнять некоторые потрясающие трюки с кодом. Он может превратить введенную инструкцию, например, «Создать массив случайных переменных от 1 до 100 и вернуть наибольшую из них», в рабочий код на нескольких языках программирования.
Другая версия той же программы OpenAI, названная GPT-3, может генерировать связный текст на заданную тему, но она также может воспроизводить оскорбительные или предвзятые высказывания, почерпнутые из темных уголков Интернета.
Copilot и Codex заставили некоторых разработчиков задуматься о том, что ИИ может лишить их работы. На самом деле, как показывает опыт Нака, разработчикам требуются развитые навыки для использования программы, поскольку они часто должны проверять или корректировать ее предложения.
Хаммонд Пирс, постдокторант Нью-Йоркского университета, занимающийся анализом кода Copilot, говорит, что программа иногда выдает проблемный код, потому что не до конца понимает, что пытается сделать тот или иной фрагмент. «Уязвимости часто возникают из-за неясности контекста, который должен знать разработчик» — говорит он.
Некоторые разработчики беспокоятся, что ИИ уже перенимает плохие привычки. «Мы как индустрия упорно работали над тем, чтобы уйти от решений «скопировать-вставить», а теперь Copilot создал суперверсию этого подхода» — говорит Максим Хайло, разработчик программного обеспечения, который экспериментировал с использованием ИИ для генерации кода, но не пробовал Copilot.
Хайло говорит, что хакеры могут испортить такую программу, как Copilot. «Если бы я был злодеем, я бы создал уязвимые проекты кода на GitHub, искусственно повысил бы их популярность, покупая звезды GitHub на черном рынке, и надеялся, что они станут частью следующего раунда обучения».
И GitHub, и OpenAI утверждают, что, напротив, их инструменты для кодинга ИИ, скорее всего, станут менее подверженными ошибкам. В OpenAI подчёркивают, что проверяют проекты и код как вручную, так и с помощью автоматизированных инструментов.
Де Мур из GitHub говорит, что недавние обновления Copilot должны были снизить частоту уязвимостей в системе безопасности. Но он добавляет, что его команда изучает другие способы улучшения результатов работы Copilot. Один из них — удаление неудачных примеров, на которых учится базовая модель ИИ. Другой способ может заключаться в использовании обучения с подкреплением — метода ИИ, который дал впечатляющие результаты в играх и других областях — для автоматического обнаружения плохих результатов, включая ранее незаметные примеры.
Оригинал: Wired