Что такое GitHub Copilot? Программист AI Pair для всех

Что такое GitHub Copilot Изучение

Программисты тратят много времени на написание кода. Такие инструменты, как редакторы кода, могут помочь нам вместе с предложениями синтаксиса, фрагментами, предложениями по отладке и т.д. Но что, если бы у нас был инструмент, использующий искусственный интеллект (ИИ), чтобы помочь нам писать гораздо более существенные части кода? В этом вся суть GitHub Copilot.

Недавно я просматривал Твиттер, когда увидел этот твит из официальной учетной записи GitHub:

Меня поразила идея, что ИИ помогает мне писать код (или даже выполнять всю тяжелую работу), поэтому я пошел дальше и зашел на страницу GitHub Copilot.

Пропустив весь контент, я перешел к нижней части страницы в поисках способа проверить это. Я обнаружил баннер, который был призывом к действию, чтобы подписаться на техническую предварительную версию GitHub Copilot.

После нескольких дней (или недель) ожидания мне был предоставлен доступ к технической предварительной версии, и теперь я могу позволить ИИ кодировать для себя… или могу?

Прочтите больше, чтобы узнать, что такое второй пилот GitHub, мой опыт работы с ним, и как это повлияет на вас… или почему, возможно, нет.

Что такое Copilot?

Проще говоря, GitHub Copilot — это инструмент искусственного интеллекта, который предлагает вам варианты кода на основе комментариев и контекста редактируемого файла.

Copilot — это результат сотрудничества между GitHub и OpenAI, которое активно поддерживается Microsoft. Он работает на новой системе искусственного интеллекта Codex, основанной на модели GPT-3.

Читайте также:  Как обрабатывать ошибки асинхронного кода в Node.js?

GPT-3 — это третье поколение генеративного предварительно обученного преобразователя — языковой модели, способной генерировать последовательности текста из простых подсказок. Кодекс является производным от этой модели, которая поддерживает не только текст, но и генерацию кода на некоторых из самых популярных языков.

Copilot был обучен с использованием миллиардов строк кода из общедоступных репозиториев на GitHub, поэтому ваш код, вероятно, каким-то образом улучшил этот инструмент AI (подробности мы рассмотрим позже).

Хотя он поддерживает большинство языков программирования, в настоящее время он лучше всего работает с Python, JavaScript, TypeScript, Ruby и Go.

Давайте посмотрим, как работает GitHub Copilot и на что он способен в настоящее время.

GitHub Copilot в действии

Copilot невероятно прост в установке. Если у вас есть доступ к технической предварительной версии, просто загрузите расширение VS Code, выполнив поиск на вкладке » Расширение » и активировав его.

Затем вам потребуется войти в свою учетную запись GitHub

Затем вам потребуется войти в свою учетную запись GitHub, чтобы подтвердить, что у вас есть доступ к технической предварительной версии.

На данный момент единственный способ использовать Copilot — это VS Code, и он может оставаться неизменным в течение некоторого времени, согласно странице Copilot.

В большинстве следующих примеров будет использоваться Python, поскольку это один из языков, с которым этот инструмент ИИ действительно хорош.

Как работают предложения кода

GitHub Copilot генерирует для вас несколько предложений в зависимости от контекста файла, который вы редактируете. В основном он дает вам предложения на основе комментариев, которые вы сделали в файле, и кода, который вы написали ранее.

Как только Copilot предложит код, он попросит вас его использовать. Давайте протестируем Copilot, создав функцию, которая вычисляет среднее значение набора данных. Единственное, что я предоставлю Copilot, — это комментарий и имя функции.

Как видите, текст серого цвета предлагается Copilot

Как видите, текст серого цвета предлагается Copilot, и я могу принять его, нажав Tab. Но если мне не нравится первое предложение, я могу просмотреть больше предложений с помощью Ctrl+ ]или увидеть кучу решений на боковой панели с помощью Ctrl+ Return.

Но давайте поставим другую задачу

Впечатляет, не правда ли? Но давайте поставим другую задачу. Теперь Copilot должен создать mainфункцию, которая позволяет пользователю вводить некоторые числа, разделенные пробелами. Он должен разделить эти числа и передать результирующий список compute_averageфункции перед печатью результата.

Наконец, я попрошу Copilot вызвать основную функцию

Наконец, я попрошу Copilot вызвать основную функцию, используя точку входа выполнения __name__ == ’__main__’.

Вот так GitHub Copilot написал функциональный скрипт Python

Вот так GitHub Copilot написал функциональный скрипт Python, основанный только на командах, которые я ему дал. Конечно, код не идеален. Например, compute_averageфункция может быть уменьшена до sum(dataset) / len(dataset), но общий результат довольно хороший.

Тестирование Copilot с помощью простых задач

Начнем с функции, которую должен знать каждый разработчик: FizzBuzz. Я напишу формулировку проблемы, назову функцию и позволю Copilot выполнить работу

А как насчет функции високосного года

А как насчет функции високосного года? В этом случае я предоставлю только простую строку документации.

В этом случае я предоставлю только простую строку документации

Теперь простая проверка палиндрома.

Еще одна интересная особенность Copilot заключается в том

Еще одна интересная особенность Copilot заключается в том, что он также может предоставлять предложения в комментариях и строках документации. В приведенном выше примере он завершил определение палиндрома!

Наконец, простой генератор паролей. Я дал подробное описание и модули, которые хотел использовать. На удивление, я получил именно то, что хотел.

В заключение этого раздела Copilot очень хорошо предлагает

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

Теперь давайте проверим, как этот программатор пары ИИ работает в более сложных средах.

Комплексное использование Copilot

Во-первых, давайте воспользуемся Copilot для решения общих проблем алгоритмов. Например, реализация итеративного бинарного поиска.

Не волнуйтесь, если вы не понимаете код; сначала я тоже

Не волнуйтесь, если вы не понимаете код; сначала я тоже. Вот один из недостатков использования такого инструмента. Вы можете реализовать код, предоставленный Copilot, не понимая его смысла.

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

Помимо этого, вышеприведенное решение превосходно (вероятно, извлечено из репозитория DSA GitHub). Это читаемый код, который мне удалось понять после нескольких моментов анализа.

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

Мы протестировали Copilot с простыми задачами и алгоритмами. Было бы неплохо использовать его в реальных решениях.

Проект Django

Django — один из наиболее часто используемых фреймворков Python. Давайте посмотрим, как Copilot взаимодействует с Django в приложении для блога.

Я создал Postкласс модели и указал поля, которые мне нужны. ( Модель в Django — это представление кода Python таблицы базы данных. ) Это то, что мне предложил Copilot.

Довольно неплохо, но сразу после того, как я принял предложение

Довольно неплохо, но сразу после того, как я принял предложение, я получил еще одно. Copilot хотел создать Commentмодель! Вот что я получаю.

Copilot создал рабочую и хорошо задокументированную модель

Copilot создал рабочую и хорошо задокументированную модель, и я даже не просил ее об этом.

И снова Copilot предложил другую возможную модель — Tagмодель — и единственное, что мне нужно было напечатать, это class:

class Tag(models.Model):
    """Tag model
    name: CharField
    """

    name = models.CharField(max_length=100)
    post = models.ManyToManyField(Post)

    def __str__(self):
        return self.name

Я был ошеломлен, поэтому моей следующей задачей было позволить Copilot протестировать созданные им модели. Я запустил test.pyфайл в своем приложении для блога и дал Copilot несколько небольших подсказок (например, импорт моделей, создание имени класса Test).

Наконец-то я нашел слабое место

Наконец-то я нашел слабое место! Copilot не смог написать полный набор тестов для созданного кода. Но, тем не менее, Django является сторонним пакетом, и я был удивлен, что Copilot удалось создать три модели самостоятельно.

Завершая это приключение Django с Copilot, я должен сказать, что код не был идеальным. Можно было кое-что улучшить, например, help_textопределения и использование некоторых важных аргументов модели verbose_name, но в целом Copilot превзошел мои ожидания.

Беседа с Copilot

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

Вау, похоже, Copilot очень любит Python, и я тоже

Вау, похоже, Copilot очень любит Python, и я тоже. С нетерпением жду разговора.

Помимо возможностей предложения кода, Copilot

Помимо возможностей предложения кода, Copilot, похоже, также обладает хорошими навыками ведения переговоров.

Если серьезно относиться к возможному использованию этого, Copilot может помочь вам написать надлежащую документацию или копирайтинг, если вы работаете с форматами текстовых файлов, такими как Markdown, RST или LaTeX.

Например, это может помочь вам написать статьи (например, эту) или даже книгу.

Например, это может помочь вам написать статьи

Мои мысли о Copilot

Copilot — чрезвычайно интересный в использовании инструмент. На первый взгляд, писать на нем код действительно приятно, и я потратил часы на его тестирование.

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

Однако это не идеально, и ниже приведен список вещей, которые могут быть проблемой при создании проекта программирования.

Медленное завершение кода

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

Особенно с построчными предложениями я смог напечатать свои решения до того, как Copilot смог даже похвастаться (учитывая, что моя средняя скорость набора составляет 48 слов в минуту, что не так уж впечатляет по сравнению с другими разработчиками).

Это понятно, потому что он получает предложения из Интернета, что может вызвать некоторую задержку. Конечно, это зависит от скорости вашего интернета.

Кроме того, Copilot часто предлагает более обширное завершение, как показано в приведенных выше тестах, что гораздо более требовательно к ресурсам (на сервере, на котором находится Copilot), чем предложение простого метода функции.

Прерывание потока

На этих ранних стадиях это не тот инструмент, который вы бы использовали при создании серьезного проекта.

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

Я много раз сталкивался с этим, так как может раздражать просмотр каждого фрагмента кода, который он мне предлагает. К счастью, Нат Фридман (генеральный директор GitHub) рассмотрел эту проблему в Твиттере, и Copilot может иметь пользовательский интерфейс, чтобы указать, создает ли он предложение кода или нет.

Предлагается сломанный код

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

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

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

Со временем это может вызвать зависимость

Copilot — действительно мощный инструмент, но со временем вы можете стать от него зависимым.

Это как иметь клиент Stack Overflow прямо в вашем редакторе — тот, который пытается понять ваш код и дает вам десять лучших возможных решений.

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

Copilot предлагает код, который вы, возможно, не понимаете

Как было показано ранее с некоторыми примерами кода, Copilot предлагает большой объем кода, и не всегда легко понять, что он делает.

Может возникнуть соблазн просто позволить Copilot выполнять тяжелую работу, что может повлиять на новичков (и опытных разработчиков) в процессе обучения. В большинстве случаев самое важное в кодировании — это устранение ошибок, а завершение кода, предоставляемое Copilot, может повлиять на развитие этого навыка.

Чтобы этого избежать, важно просмотреть код, предложенный Copilot, и понять, что он делает.

Copilot — это совершенно новый инструмент, в котором много ошибок. Я создал несколько сообщений на странице обсуждения GitHub Copilot (доступной для пользователей технической предварительной версии), и я уже получил отзывы от сообщества.

Я уверен, что этот инструмент решит большинство из этих проблем до того, как он будет выпущен.

Споры вокруг обучения второго пилота

Известно, что Copilot обучается на базе публичных репозиториев GitHub, и это вызвало определенную реакцию сообщества. Некоторые люди злятся, потому что для обучения Copilot используется бесплатный код с открытым исходным кодом.

Как вы, возможно, знаете, большинство лицензий с открытым исходным кодом (GNU, BSD, APACHE и т. Д.) Позволяют вам использовать, изменять и распространять программное обеспечение с единственным условием использования той же лицензии. Однако Copilot задумывался как коммерческий продукт.

Согласно Creative Commons, использование общедоступных данных для обучения моделей ИИ по умолчанию не нарушает авторских прав — по крайней мере, для лицензий CC. Нат Фридман также затронул эту тему в своей ветке Twitter:

Copilot (как они заявляют на своей странице ) — это просто синтезатор кода, поэтому действительно странно получить буквальное предложение, извлеченное из обучающего набора.

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

Не забывайте, что TabNine — еще одно завершение кода AI — также было обучено с открытым исходным кодом от GitHub, так что это уже происходило пару раз.

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

Собирается ли Copilot заменить разработчиков?

На данный момент Copilot — это именно то, чем он себя называет: помощник AI для разработчиков. Я не думаю, что он заменит разработчиков, по крайней мере, в краткосрочной или среднесрочной перспективе.

Он не может понять реальную проблему, спланировать решение, построить его и продемонстрировать миру — задачи, с которыми хорошо справляются разработчики (и люди в целом).

Возможно, в будущем такой инструмент, как GitHub Copilot, изменит правила игры в индустрии программирования — не за счет кражи рабочих мест, а за счет повышения продуктивности разработчиков. Мы улучшали опыт разработчиков (редакторы кода, инструменты отладки и т. Д.) С прошлого века, и теперь, с развитием технологии искусственного интеллекта, мы можем ожидать создания гораздо большего числа инструментов, использующих ее.

Помните, что до того, как люди высадились на Луну, «Компьютеры» были тем, что мы называли людьми, чрезвычайно опытными в решении математических операций вручную. Компьютеры, какими мы их знаем сегодня, уничтожили бесчисленное количество рабочих мест, но также создали новые и в конечном итоге создали одну из крупнейших отраслей промышленности в мире.

Альтернативы Copilot

На данный момент Copilot — уникальная технология. Но если единственное, что вам нужно, это хорошая система завершения ИИ, есть и другие варианты на выбор.

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

С другой стороны, если вы новичок в программировании, я настоятельно рекомендую вам использовать эти альтернативы, поскольку они помогают вам без реализации логики кода для вас. Когда вы наберетесь опыта, вы сможете выбрать Copilot в качестве программиста пары ИИ.

Intellisense

Если вы являетесь пользователем VS Code, вы, вероятно, используете Intellisense с первого дня. Это система автозавершения кода по умолчанию в VS Code, и вы можете установить поддержку для каждого языка программирования, который вы используете. Единственное, что вам нужно сделать, это открыть вкладку » Расширение » и найти язык, для которого вы хотите установить поддержку.

Kite

Kite — это служба автозавершения кода на базе искусственного интеллекта, которую можно установить практически в любой популярный редактор кода. Он предлагает бесплатный план, которого в большинстве случаев более чем достаточно, и полнофункциональную вкладку второго пилота (в отличие от GitHub Copilot), которая позволяет просматривать документацию Python, не запуская браузер.

К сожалению, основной целью Kite является Python, поэтому перед принятием решения стоит взглянуть на TabNine.

TabNine

TabNine, ранее называвшаяся Codota, — еще один инструмент завершения ИИ, используемый миллионами разработчиков. В настоящее время он работает с более чем 30 языками и может быть установлен в 15 IDE.

Интересно, что TabNine также был обучен с открытым кодом, доступным на GitHub, и он использует GPT-2 (предыдущая версия GPT-3) для генерации автозавершения кода. Если у вас нет доступа к техническому превью Copilot, TabNine может быть хорошей альтернативой.

Следует отметить, что эти системы автозаполнения должны работать на вашем компьютере (по крайней мере, их бесплатные версии), что означает, что они потребляют гораздо больше ресурсов в вашей системе, чем GitHub Copilot. Помните, что Copilot приносит все предложения кода с удаленного сервера.

Заключение

Довольно впечатляюще видеть, как инструмент на основе ИИ генерирует код. GitHub намерен не заменять программистов, а помочь им повысить свою продуктивность во время кодирования, особенно с повторяющимися задачами кодирования, такими как написание хороших строк документации в функциях или классах.

После некоторого использования Copilot я заметил некоторые проблемы, но в целом он дает хорошие (но не идеальные) предложения по коду. Я тестировал решения некоторых популярных проблем с кодом и очень доволен результатами. Принимая это во внимание, я думаю, что Copilot не следует использовать новичкам по причинам, которые я объяснил выше.

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

Возможно, утверждение «парное программирование ИИ» еще не реализовано, но я уверен, что это произойдет в будущем.

Оцените статью
bestprogrammer.ru
Добавить комментарий