OpenAI Codex
OpenAI Codex (англ. OpenAI Codex) — искусственный интеллект, разработанный организацией OpenAI в 2021 году на основе языковой модели GPT-3. Система анализирует естественный язык (технология prompt engineering[1]) и генерирует программный код в ответ, позволяя даже непрофессионалам создавать приложения и веб-сайты[2][3].
Codex является наследником модели GPT-3 от OpenAI, адаптированной для задач программирования. В 2021 году OpenAI представила API для Codex в статусе бета-версии[4]. В марте 2023 года OpenAI закрыла доступ к Codex[5], однако под давлением научного сообщества вновь предоставила его в рамках своей исследовательской программы[6].
Технические особенности
В основе Codex лежит крупная нейронная сеть, обученная на текстах, а также на 159 гигабайтах кода на языке Python, собранных из 54 миллионов файлов с ресурса GitHub[7][8]. Кроме помощи при программировании приложений и веб-сайтов, Codex лежит в основе инструмента GitHub Copilot, реализующего автодополнение кода для выбранных IDE, таких как Visual Studio Code и Neovim[4][1]. Обычный сценарий работы с Codex — ввод команды (prompt engineering) в виде комментария на Python, например:
# посчитать скользящее среднее для массива с заданным размером окнаи далее — использование ИИ для генерации подходящего блока кода по сформулированному запросу[9]. По данным OpenAI, Codex может корректно завершить примерно 37 % пользовательских запросов, делая упор на ускорение рутинных этапов программирования, а не на полную его замену. Особенность системы — эффективное сопоставление простых задач с уже существующими решениями, что, по оценке разработчиков, является «наименее увлекательной частью программирования»[10][11]. Джереми Ховард (Jeremy Howard), сооснователь проекта Fast.ai, отметил: «Codex — это способ писать код, почти не вводя его вручную: он не всегда прав, но обычно довольно близок к верному»[12]. По результатам статьи исследователей OpenAI, при 100 прохождениях теста Codex выдал рабочее решение в 70,2 % случаев[13]. Codex может создавать код на более чем дюжине языков программирования, включая Go, JavaScript, Perl, PHP, Ruby, Shell, Swift и TypeScript, хотя наиболее эффективен именно на Python[4]. В обзорах отмечено, что система способна например, создавать браузерные игры на JavaScript и визуализировать научные данные с помощью matplotlib[11]; она также взаимодействует с различными сервисами, включая Mailchimp, Microsoft Word, Spotify и Google Календарь[11][14]. Microsoft проявляет интерес к дальнейшему развитию Codex[14].
В качестве примера: чтобы создать персонажа в стиле Minecraft при помощи библиотеки, неизвестной Codex, требуется описать ИИ интерфейс API в подсказке[1]. В таком случае Codex использует API Simulated Player для Minecraft (библиотеку typescript для управления персонажем через команды: движение, диалог, осмотр инвентаря и т.д.)[1]. Можно указывать специфические команды API для генерации и автодополнения кода[1][15]:
Команда:
/* Команды Minecraft-бота через Simulated Player API. Если комментарий носит разговорный характер, бот отвечает как дружелюбный бот Minecraft. Иначе выполняется как приказ.*/
// СПРАВОЧНИК API:
// moveRelative(leftRight: number, backwardForward: number, speed?: number): void - Заставляет персонажа идти в указанном направлении относительно текущего поворота.
// stopMoving(): void - Останавливает движение, если персонаж идёт.
// lookAtEntity(entity: Entity): void - Поворачивает голову/тело персонажа к указанной сущности.
// jumpUp(): boolean - Прыжок персонажа.
// chat(message: string): void - Отправляет сообщение в игровой чат от лица персонажа.
// listInventory(object: Block | SimulatedPlayer | Player): InventoryComponentContainer - возвращает список всех предметов у игрока или в сундуке.
/* Несколько примеров использования API */
// Идти влево
bot.moveRelative(1, 0, 1);
// Стоп!
bot.stopMoving();
// Двигаться назад полсекунды
bot.moveRelative(0, -1, 1);
await setTimeout(() => bot.stopMoving(), 500);
// Вперёд на немного
Результат:
bot.moveRelative(0, 1, 1);
await setTimeout(() => bot.stopMoving(), 500);
Поведение моделей Codex регулируется рядом гиперпараметров, включая количество токенов и температуру[1]. Гиперпараметр temperature определяет вариативность ответов: при значении 0 ИИ генерирует один и тот же ответ на одинаковый запрос в рамках одной сессии[1]. Параметр stop sequence позволяет ограничить генерацию — достаточно указать в команде или комментарии маркёр окончания, например # для Python или // для JavaScript[1].
Проблемы и ограничения
Демонстрации OpenAI выявили недостатки: неэффективность или странности некоторых сгенерированных участков кода[11], а по признанию технического директора OpenAI Грега Брокмана, Codex «иногда не понимает, что вы хотите», что требует нескольких попыток[14]. Исследователи отмечают трудности с решениями высокоуровневых и многошаговых задач — модель может выдавать ошибочные результаты или действовать неинтуитивно[13].
Кроме того, отмечались вопросы безопасности: например, излишняя самоуверенность у новичков-программистов, унаследованные предвзятости с обучающего корпуса и опасность генерации уязвимого кода[13]. Так как Codex обучался на открытых данных, существует риск «отравления данных» путём загрузки вредоносных фрагментов[11]. Согласно исследованию Нью-Йоркского университета, примерно 40 % кода, сгенерированного GitHub Copilot (на базе Codex), в сценариях с высокими рисками по CWE содержали ошибки или потенциальные уязвимости[16].
Free Software Foundation (FSF) выразила опасения, что сгенерированные Codeх и Copilot фрагменты кода могут нарушать права разработчиков, в частности условия GPL, требующей, чтобы производные работы распространялись на аналогичных условиях[17]. Среди проблем: допустим ли тренировочный анализ открытых файлов, как определить нарушения в сгенерированном коде, могут ли модели машинного обучения считаться изменяемым исходным кодом или лишь агрегатом данных, и подчиняются ли такие модели авторскому праву и кем оно может быть заявлено[17][18]. Внутреннее исследование GitHub выявило, что около 0,1 % сгенерированного кода полностью совпадает с исходными обучающими данными. В частности, Codex воспроизвёл код для алгоритма быстрой обратной квадратной корня с оригинальным комментарием/копирайтом[9]. В ответ OpenAI признала, что неопределённость в области авторских прав на ИИ-модели приводит к дополнительным тратам для разработчиков, поэтому необходимы законодательные разъяснения[9]. Дебаты вокруг прав на Codex сравниваются с делом Authors Guild, Inc. v. Google, Inc., где суд разрешил Google использовать фрагменты текстов оцифрованных книг в целях, признанных добросовестным использованием[9][19].


