Введение в использование Copilot
Categories:
- Возможности Copilot Labs
- Что такое Copilot
- Понимание
- Рекомендации
- Отладка
- Ревью
- Рефакторинг
- Документация
- Расширение границ Copilot с помощью Custom
- Получение более профессиональных рекомендаций
- Рекомендации в виде обычного текста
- Настройки
- Безопасность данных
- Часто задаваемые вопросы
GitHub Copilot - это инструмент автозавершения кода на основе машинного обучения, который помогает вам быстрее писать код и повышает эффективность программирования.
Возможности Copilot Labs
| Возможность | Описание | Примечания | Пример |
|---|---|---|---|
Explain |
Генерация объяснений фрагментов кода | Есть расширенные опции для настройки подсказок, более ясные объяснения ваших потребностей | ![]() |
Show example code |
Генерация примеров кода | Есть расширенные опции для настройки | ![]() |
Language Translation |
Генерация перевода кода | Этот перевод основан на языке программирования, например, C++ -> Python | ![]() |
Readable |
Повышение читаемости кода | Не просто форматирование, а реальное улучшение читаемости | ![]() |
Add Types |
Вывод типов | Автоматическое преобразование типов переменных в явные типы | ![]() |
Fix bug |
Исправление багов | Исправление некоторых распространенных багов | ![]() |
Debug |
Упрощение отладки кода | Добавление печати логов или добавление временных переменных для точек останова | ![]() |
Clean |
Очистка кода | Очистка ненужных частей кода, комментариев/печати/устаревшего кода и т.д. | ![]() |
List steps |
Перечисление шагов кода | Некоторые коды строго зависят от порядка выполнения, необходимо четко прокомментировать порядок выполнения | ![]() |
Make robust |
Сделать код более надежным | Рассмотрение границ/многопоточности/повторного входа и т.д. | ![]() |
Chunk |
Разделение кода на части | Обычно желательно, чтобы функция содержала <=50 строк, вложенность <=4, расходимость <=7, цикломатическая сложность <=20 | ![]() |
Document |
Генерация документации кода | Генерация кода через комментарии, а также генерация комментариев и документации через код | ![]() |
Custom |
Пользовательские операции | Сказать copilot, как работать с вашим кодом | ![]() |
Что такое Copilot
На официальном сайте кратко и ясно сказано: Ваш ИИ-партнер по программированию — ваш напарник по программированию
Парное программирование: это методология гибкой разработки программного обеспечения, при которой два программиста работают за одним компьютером: один вводит код, другой проверяет каждую строку кода. Роли часто меняются, чтобы обеспечить логическую строгость и профилактику проблем.
Copilot участвует в процессе кодирования следующими способами, реализуя роль напарника по программированию.
Понимание
Copilot - это большая языковая модель, она не может понять наш код, и мы не можем понять модель Copilot. Здесь понимание - это взаимопонимание между программистом и группой программистов. Все мы пишем код, опираясь на определенные общие принципы.

Copilot собирает информацию для понимания контекста. Информация включает в себя:
- Редактируемый код
- Связанные файлы
- Файлы, открытые в IDE
- Адрес библиотеки
- Путь к файлу
Copilot не просто понимает через комментарий, он собирает достаточно контекстной информации, чтобы понять, что нужно сделать дальше.
Рекомендации
| Рекомендации целого фрагмента | Рекомендации inline |
|---|---|
![]() |
![]() |
Как известно, наиболее распространенный способ получения рекомендаций - это описание требований в комментарии, а не прямое написание кода, чтобы направить GitHub Copilot на предоставление целых рекомендаций. Однако это может привести к избыточности комментариев. Комментарии не должны быть слишком многочисленными, они не являются основной частью кода. Хороший код понятен без комментариев, опираясь на подходящие имена, разумный дизайн и четкую логику. При использовании рекомендаций inline достаточно указать подходящие имена переменных/функций/классов, и Copilot всегда даст подходящие рекомендации.
Помимо подходящих внешних входных данных, Copilot также поддерживает рекомендации на основе существующих фрагментов кода. Copilot Labs -> Show example code может помочь сгенерировать пример кода для указанной функции. Достаточно выделить код и нажать Show example code.
Ctrl+Enter всегда может дать много вдохновения. Я создал три файла: пустой main.cpp, пустой calculator.h и в calculator.cpp реализовал “сложение” и “вычитание”. Copilot дал следующие рекомендации:
- Добавить реализацию “умножения” и “деления”
- Вызвать “сложение, вычитание, умножение и деление” в main
- Создание и использование статической библиотеки calculator
- Результат выполнения main функции, и результат верен
- Предлагаемое содержание заголовочного файла calculator.h
- Команда компиляции g++
- Тесты gtest
- Содержание CMakeLists.txt, включая тесты
- objdump -d main > main.s для просмотра ассемблерного кода и отображения ассемблерного кода
- ar для просмотра содержимого статической библиотеки и отображения содержимого статической библиотеки
При настройках по умолчанию, каждый раз при нажатии Ctrl+Enter отображаемое содержимое сильно различается, и невозможно просмотреть содержимое, сгенерированное в прошлый раз. Если требуется более стабильное содержимое, можно настроить значение temperature [0, 1]. Чем меньше значение, тем стабильнее генерируемое содержимое; чем больше значение, тем менее предсказуемое содержимое.
Приведенные выше рекомендации далеко превосходят обычные рекомендации, которые используются в повседневной практике. Возможно, это связано с тем, что проект действительно слишком прост, как только файлы компиляции и заголовочные файлы будут полными, рекомендаций будет не так много, но они все равно часто оказывают хорошее вдохновляющее действие.
Используйте горячие клавиши для рекомендаций Copilot
| Действие | Горячая клавиша | Название команды |
|---|---|---|
| Принять рекомендации inline | Tab |
editor.action.inlineSuggest.commit |
| Игнорировать рекомендации | Esc |
editor.action.inlineSuggest.hide |
| Показать следующую рекомендацию inline | Alt+] |
editor.action.inlineSuggest.showNext |
| Показать предыдущую рекомендацию inline | Alt+[ |
editor.action.inlineSuggest.showPrevious |
| Вызвать рекомендацию inline | Alt+\ |
editor.action.inlineSuggest.trigger |
| Показать больше рекомендаций на отдельной панели | Ctrl+Enter |
github.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 для ввода
-
Удалить комментарии кода

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

-
Переписать на go

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

-
Добавить вычисления производных, здесь китайский не очень подходит, используйте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 всегда может изящно применить структуру данных из контекста к алгоритму.
Рекомендации в виде обычного текста
| en | zh |
|---|---|
| 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.

Настройки
Настройки клиента
| Параметр | Описание | Примечания |
|---|---|---|
| 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

- Как правильно использовать код, сгенерированный Copilot? 1. Самостоятельно тестировать/проверять сгенерированный код; 2. Не компилировать или запускать сгенерированный код автоматически до проверки.
- Одинаково ли проявляет себя Copilot на каждом естественном языке? Лучшее проявление - английский.
- Будет ли Copilot генерировать оскорбительный контент? Уже есть фильтрация, но не исключено появление.














