Введение в использование Copilot

Видео-рекомендации

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

Возможности Copilot Labs

ВозможностьОписаниеПримечанияПример
ExplainГенерация объяснений фрагментов кодаЕсть расширенные опции для настройки подсказок, более ясные объяснения ваших потребностейpicture 1
Show example codeГенерация примеров кодаЕсть расширенные опции для настройкиpicture 2
Language TranslationГенерация перевода кодаЭтот перевод основан на языке программирования, например, C++ -> Pythonpicture 3
ReadableПовышение читаемости кодаНе просто форматирование, а реальное улучшение читаемостиpicture 4
Add TypesВывод типовАвтоматическое преобразование типов переменных в явные типыpicture 5
Fix bugИсправление баговИсправление некоторых распространенных баговpicture 6
DebugУпрощение отладки кодаДобавление печати логов или добавление временных переменных для точек остановаpicture 7
CleanОчистка кодаОчистка ненужных частей кода, комментариев/печати/устаревшего кода и т.д.picture 8
List stepsПеречисление шагов кодаНекоторые коды строго зависят от порядка выполнения, необходимо четко прокомментировать порядок выполненияpicture 9
Make robustСделать код более надежнымРассмотрение границ/многопоточности/повторного входа и т.д.picture 10
ChunkРазделение кода на частиОбычно желательно, чтобы функция содержала <=50 строк, вложенность <=4, расходимость <=7, цикломатическая сложность <=20picture 11
DocumentГенерация документации кодаГенерация кода через комментарии, а также генерация комментариев и документации через кодpicture 12
CustomПользовательские операцииСказать copilot, как работать с вашим кодомpicture 13

Что такое Copilot

На официальном сайте кратко и ясно сказано: Ваш ИИ-партнер по программированию — ваш напарник по программированию

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

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

Понимание

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

picture 14

Copilot собирает информацию для понимания контекста. Информация включает в себя:

  • Редактируемый код
  • Связанные файлы
  • Файлы, открытые в IDE
  • Адрес библиотеки
  • Путь к файлу

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

Рекомендации

Рекомендации целого фрагментаРекомендации inline
picture 15picture 16

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

Помимо подходящих внешних входных данных, Copilot также поддерживает рекомендации на основе существующих фрагментов кода. Copilot Labs -> Show example code может помочь сгенерировать пример кода для указанной функции. Достаточно выделить код и нажать Show example code.

Ctrl+Enter всегда может дать много вдохновения. Я создал три файла: пустой main.cpp, пустой calculator.h и в calculator.cpp реализовал “сложение” и “вычитание”. Copilot дал следующие рекомендации:

  1. Добавить реализацию “умножения” и “деления”
  2. Вызвать “сложение, вычитание, умножение и деление” в main
  3. Создание и использование статической библиотеки calculator
  4. Результат выполнения main функции, и результат верен
  5. Предлагаемое содержание заголовочного файла calculator.h
  6. Команда компиляции g++
  7. Тесты gtest
  8. Содержание CMakeLists.txt, включая тесты
  9. objdump -d main > main.s для просмотра ассемблерного кода и отображения ассемблерного кода
  10. ar для просмотра содержимого статической библиотеки и отображения содержимого статической библиотеки

При настройках по умолчанию, каждый раз при нажатии Ctrl+Enter отображаемое содержимое сильно различается, и невозможно просмотреть содержимое, сгенерированное в прошлый раз. Если требуется более стабильное содержимое, можно настроить значение temperature [0, 1]. Чем меньше значение, тем стабильнее генерируемое содержимое; чем больше значение, тем менее предсказуемое содержимое. Приведенные выше рекомендации далеко превосходят обычные рекомендации, которые используются в повседневной практике. Возможно, это связано с тем, что проект действительно слишком прост, как только файлы компиляции и заголовочные файлы будут полными, рекомендаций будет не так много, но они все равно часто оказывают хорошее вдохновляющее действие.

Используйте горячие клавиши для рекомендаций Copilot

ДействиеГорячая клавишаНазвание команды
Принять рекомендации inlineTabeditor.action.inlineSuggest.commit
Игнорировать рекомендацииEsceditor.action.inlineSuggest.hide
Показать следующую рекомендацию inlineAlt+]editor.action.inlineSuggest.showNext
Показать предыдущую рекомендацию inlineAlt+[editor.action.inlineSuggest.showPrevious
Вызвать рекомендацию inlineAlt+\editor.action.inlineSuggest.trigger
Показать больше рекомендаций на отдельной панелиCtrl+Entergithub.copilot.generate

Отладка

Обычно используют два способа отладки: печать и точки останова.

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

Copilot Labs имеет следующие предустановленные функции:

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

Ревью

Ревью взаимно, мы и copilot должны часто проводить взаимное ревью, не стоит слепо доверять быстро сгенерированному коду.

Copilot Labs имеет следующие предустановленные функции:

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

Рефакторинг

Copilot Labs имеет следующие предустановленные функции:

  • Readable, повышает читаемость, реальное повышение читаемости, а не просто форматирование, но необходимо тщательно проверять изменения Copilot.
  • Clean, делает код более компактным, удаляет избыточный код.
  • Chunk, делает код более понятным, разделяет код на части, разделяет большую функцию на несколько маленьких функций.

Документация

Copilot Labs имеет следующие предустановленные функции:

  • Document, генерация документации, например, комментарии к функциям и другая документация.

Расширение границ Copilot с помощью Custom

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

Вы можете использовать Custom для ввода

  • Удалить комментарии кода
    picture 17

  • Добавить возможности умножения и деления
    picture 18

  • Переписать на go
    picture 19

  • Добавить вычисления тригонометрических функций
    picture 20

  • Добавить вычисления производных, здесь китайский не очень подходит, используйте support calculate differential, в холодном режиме нет надежного ответа, в горячем режиме есть несколько нелепых ответов.

В повседневной работе вы можете в любое время предъявлять свои требования Copilot, через Custom возможности, Copilot может помочь вам выполнить многие желаемые операции.

Несколько примеров:

ПодсказкиОписание
generate the cmake fileСгенерировать файл cmake
generate 10 test cases for tan()Сгенерировать 10 тестовых случаев
format like google styleОтформатировать код
рассмотреть граничные случаиРассмотреть граничные случаи
подтвердить освобождение памятиПодтвердить освобождение памяти

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

Получение более профессиональных рекомендаций

Чем яснее подсказки для Copilot, тем точнее его рекомендации. Профессиональные подсказки могут получить более профессиональные рекомендации. Многие неподходящие коды не влияют ни на компиляцию кода, ни на выполнение бизнес-логики, но влияют на читаемость, сопровождаемость, расширяемость, повторное использование. Эти характеристики также очень важны. Если вы хотите получить более профессиональные рекомендации, нам лучше знать английские названия лучших практик.

  • Прежде всего, используйте понятный английский, можно изучать английский, просматривая открытые проекты.
  • Соглашения об именовании, именование - это самое основное определение понятий, хорошее именование может избежать неоднозначности, избежать того, что читатель погружается в детали бизнеса, тем самым повышая читаемость кода, это также является одной из лучших практик.
    • Обычно достаточно разумного имени переменной, и Copilot может дать целый фрагмент надежных рекомендаций.
  • Список шаблонов проектирования, шаблон проектирования - это шаблон для решения проблем, рациональный выбор основных принципов проектирования SOLID для различных проблем, экономия времени на проектирование, повышение качества кода.
    • Достаточно написать название требуемого шаблона, и Copilot сгенерирует полный фрагмент кода.
  • Список алгоритмов, хороший алгоритм - это высокомудрое решение целого класса проблем, разработчики должны самостоятельно абстрагировать конкретные проблемы, абстрагировать данные и вводить их в алгоритм.
    • Код алгоритмов обычно универсален, достаточно написать название алгоритма, и Copilot сгенерирует фрагмент кода алгоритма, и Copilot всегда может изящно применить структуру данных из контекста к алгоритму.

Рекомендации в виде обычного текста

enzh
GitHub Copilot использует OpenAI Codex для предложения кода и целых функций в реальном времени прямо из вашего редактора.GitHub Copilot использует OpenAI Codex для предложения кода и целых функций в реальном времени прямо из вашего редактора.
Обученный на миллиардах строк кода, GitHub Copilot превращает подсказки естественного языка в предложения кода на десятках языков.Обученный на миллиардах строк кода, GitHub Copilot превращает подсказки естественного языка в предложения кода на десятках языков.
Не летайте в одиночку. Разработчики по всему миру используют GitHub Copilot для более быстрого кодирования, сосредоточения на бизнес-логике, а не на шаблонном коде, и делать самое важное: создавать отличное программное обеспечение.Не летайте в одиночку. Разработчики по всему миру используют GitHub Copilot для более быстрого кодирования, сосредоточения на бизнес-логике, а не на шаблонном коде, и делать самое важное: создавать отличное программное обеспечение.
Сосредоточьтесь на решении более крупных проблем. Тратьте меньше времени на создание шаблонного и повторяющегося кода, и больше времени на то, что важно: создание отличного программного обеспечения. Напишите комментарий, описывающий логику, которую вы хотите, и GitHub Copilot немедленно предложит код для реализации решения.Сосредоточьтесь на решении более крупных проблем. Тратьте меньше времени на создание шаблонного и повторяющегося кода, и больше времени на то, что важно: создание отличного программного обеспечения. Напишите комментарий, описывающий логику, которую вы хотите, и GitHub Copilot немедленно предложит код для реализации решения.
Получайте предложения на основе ИИ, только для вас. GitHub Copilot делится рекомендациями на основе контекста и стиля проекта. Быстро перебирайте строки кода, полные предложения функций и решайте, какие из них принять, отклонить или отредактировать.Получайте предложения на основе ИИ, только для вас. GitHub Copilot делится рекомендациями на основе контекста и стиля проекта. Быстро перебирайте строки кода, полные предложения функций и решайте, какие из них принять, отклонить или отредактировать.
Уверенно кодируйте в незнакомой области. Будь то работа с новым языком или фреймворком, или просто обучение программированию, GitHub Copilot может помочь вам найти свой путь. Решайте баг или узнайте, как использовать новый фреймворк, не тратя большую часть времени на изучение документации или поиск в интернете.Уверенно кодируйте в незнакомой области. Будь то работа с новым языком или фреймворком, или просто обучение программированию, GitHub Copilot может помочь вам найти свой путь. Решайте баг или узнайте, как использовать новый фреймворк, не тратя большую часть времени на изучение документации или поиск в интернете.

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

picture 21

Настройки

Настройки клиента

ПараметрОписаниеПримечания
temperatureТемпература выборки0.0 - 1.0, 0.0 генерирует самые распространенные фрагменты кода, 1.0 генерирует самые необычные, более случайные фрагменты кода
lengthМаксимальная длина генерируемых рекомендаций кодаПо умолчанию 500
inlineSuggestCountКоличество генерируемых рекомендаций inlineПо умолчанию 3
listCountКоличество генерируемых рекомендацийПо умолчанию 10
top_pПриоритет отображения рекомендаций с вероятностью NПо умолчанию отображаются все возможные рекомендации

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

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

Безопасность данных

Сбор информации Copilot

  • Коммерческая версия
    • Информация об использовании функций, возможно, содержит личную информацию
    • Сбор фрагментов кода, сразу выбрасываются после предоставления рекомендаций, не сохраняются никакие фрагменты кода
    • Обмен данными, GitHub, Microsoft, OpenAI
  • Личная версия
    • Информация об использовании функций, возможно, содержит личную информацию
    • Сбор фрагментов кода, в зависимости от личных настроек telemetry, сохраняются или выбрасываются после предоставления рекомендаций
    • Фрагменты кода включают, редактируемый код, связанные файлы, файлы, открытые в IDE, адрес библиотеки, путь к файлу
    • Обмен данными, GitHub, Microsoft, OpenAI
    • Защита кода, 1. Шифрование. 2. Часть сотрудников GitHub/OpenAI, связанных с Copilot, может просматривать. 3. При доступе требуется контроль доступа на основе ролей и двухфакторная аутентификация
    • Избежание использования фрагментов кода (сохранение или обучение), 1. Настройки 2. Связаться с командой Copilot
    • Будет ли использоваться приватный код? Нет.
    • Будет ли выводить личную информацию (имя, день рождения и т.д.)? Редко, все еще улучшается.
  • Подробное заявление о конфиденциальности

Часто задаваемые вопросы

  • Данные обучения Copilot, из открытых репозиториев Github.
  • Совершенен ли код, написанный Copilot? Не обязательно.
  • Может ли писать код для новой платформы? Временные возможности ограничены.
  • Как лучше использовать Copilot? Разделить код на маленькие функции, описать функции на естественном языке, а также ввод и вывод, использовать переменные и имена функций с конкретным смыслом.
  • Есть ли ошибки в коде, сгенерированном Copilot? Конечно, невозможно избежать.
  • Можно ли использовать код, сгенерированный Copilot, напрямую? Не обязательно, иногда нужно внести изменения.
  • Можно ли использовать код, сгенерированный Copilot, в коммерческих проектах? Можно.
    • Принадлежит ли код, сгенерированный Copilot, интеллектуальной собственности Copilot? Нет.
    • Копирует ли Copilot код из обучающего набора? Copilot не копирует код, крайне низкая вероятность того, что более 150 строк кода могут соответствовать обучающему набору, следующие две ситуации могут возникнуть
      • Когда контекстуальная информация очень мала
      • Это общее решение проблемы
    • Как избежать повторения открытого кода, установите filter
      picture 22
  • Как правильно использовать код, сгенерированный Copilot? 1. Самостоятельно тестировать/проверять сгенерированный код; 2. Не компилировать или запускать сгенерированный код автоматически до проверки.
  • Одинаково ли проявляет себя Copilot на каждом естественном языке? Лучшее проявление - английский.
  • Будет ли Copilot генерировать оскорбительный контент? Уже есть фильтрация, но не исключено появление.