В последние годы искусственный интеллект быстро развивался и применялся во всех сферах жизни, особенно в последние два года появились инструменты разработки ИИ для разработчиков, из которых мы видим безграничные возможности, которые ИИ может предоставить разработчикам. Эта серия статей посвящена Kite, Codota, TabNine, GitHub Copilot, Microsoft IntelliCode, Alibaba Cloud Cozy и AIXcoder, которые являются одними из самых популярных интеллектуальных инструментов кодирования, и за ними последуют более подробные и личные сравнительные обзоры.

В прошлом посте мы рассмотрели TabNine, в этом посте мы рассмотрим недавно выпущенный инструмент под названием GitHub Copilot, доступный на официальном сайте по адресу
https://copilot.github.com/

GitHub Copilot (далее Copilot) — недавно выпущенный плагин для интеллектуальной генерации кода, который в настоящее время поддерживает такие платформы IDE, как VSCode и JetBrains. В отличие от других инструментов завершения кода, которые предоставляют максимум одну строку результатов завершения, Copilot генерирует целые фрагменты кода из контекста кода и описаний языка, что делает его неоспоримым инструментом кодирования для разработчиков. Как оно работает? В то время как TabNine, упомянутый в предыдущей статье этой серии, использует модель глубокого обучения GPT-2, Copilot использует модель GPT-3, на разработку которой OpenAI, как сообщается, потратила десятки миллионов долларов. Модель обладает мощными возможностями генерации кода, но, поскольку модель очень велика и требует достаточной инфраструктуры для ее поддержки, Copilot можно опробовать в небольшом масштабе только по приглашению.

Вспомогательные функции

  • Предоставляется только режим удаленного обслуживания, который требует загрузки кода в удаленное место, поэтому, если вы являетесь корпоративным разработчиком, вы можете обратить внимание на безопасность данных.
  • Возможность создания фрагментов кода на уровне метода из контекста кода, комментариев и описаний языка.

Официальная демонстрация

Как показано на рисунке ниже, нам нужно только ввести описание функции кода и имя метода кода, Copilot автоматически распознает контекст кода и подождет 2–3 секунды, чтобы сгенерировать полный фрагмент метода.

В демо-примере на официальном сайте упоминаются 3 сценария использования.

  1. Создание фрагментов кода на основе комментариев к коду.

2. Автоматическое заполнение фиксированным шаблоном повторяющегося кода.

3. автоматическая генерация модульных тестов, особенно генерация фиктивных данных.

Опыт

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

Давайте рассмотрим несколько примеров Java.

1. Используя тот же пример, Copilot завершает всю строку и автоматически заполняет inputStream параметрами.

2. Copilot также автоматически распознает переменную рабочей книги и ее метод getSheetAt, который появился в приведенной выше статье, без проблем синтаксической ошибки.

3. Хотя в предыдущем примере завершение работает лучше и нет проблемы синтаксической ошибки, Copilot по-прежнему во многих случаях генерирует фрагменты кода с синтаксической ошибкой. Как показано на рисунке ниже, класс StringUtils создается в локальном проекте и существует только один readTestFile в классе, однако Copilot генерирует метод print, поскольку Copilot изучается из сотен миллионов открытого исходного кода и не может изучать информацию о коде локального проекта. со временем, так что по сути то же самое, что и TabNine. Будет проблема синтаксической ошибки, только вероятность ошибки меньше, потому что модель более мощная, но как только будет задействован код локального проекта, вероятность ошибки будет быть очень высоким.

4. Написание модульных тестов с помощью Copilot очень удобно, это может помочь мне сгенерировать много тестовых данных и уменьшить проблемы с моими фиктивными данными.

5. Генерация кода на уровне метода Copilot также имеет много ошибок, таких как генерация кода для чтения файлов XML, результат генерируется для чтения кода Excel, вероятно, потому, что в начале класса импортируется больше API, связанного с Excel.

Если я удалю импорт, он не сгенерирует его, а просто сгенерирует другой комментарий на основе комментария.

Иногда он генерирует код, который застревает в бесконечном повторении, например мертвый цикл, который генерирует Insert на рисунке ниже.

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

Если вы заинтересованы, вы можете установить GitHub Copilot на рынке плагинов IDE, выполнив поиск по запросу GitHub Copilot, и вы можете поделиться своими отзывами в комментариях. В следующем выпуске этой серии вы найдете Microsoft IntelliCode, так что следите за обновлениями!