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

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

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

За пределами завершения кода

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

В этой статье перечислены некоторые ситуации, в которых можно использовать GitHub Copilot. Из неё можно получить некоторое представление о том, как много на данный момент может делать ИИ-помощник.

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

Контекст, контекст, контекст

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

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

Что ещё мы можем сделать, чтобы передать ему дополнительный контекст?

Делюсь с вами советами по предоставлению GitHub Copilot достаточного объёма контекста, что поможет получить от него наиболее релевантный и полезный код:

1. Открыть нужные файлы

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

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

Чтобы дать GitHub Copilot более полную картину вашего проекта, откройте в редакторе несколько файлов. Также можно использовать #editor в интерфейсе чата, чтобы дать GitHub Copilot дополнительный контекст по текущим открытым файлам в Visual Studio Code (VS Code) и Visual Studio.

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

2. Оставить комментарий верхнего уровня

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

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

index.js file with a comment at the top asking Copilot to create a HomePage Component following detailed guidelines: a H1 text with label, a text area with a button, and a server response displaying facts returned
Файл index.js с комментарием в верхней части, который просит Copilot создать компонент HomePage, следуя подробным инструкциям: текст H1 с меткой, текстовая область с кнопкой и ответ сервера, отображающий возвращаемые факты

3. Установить импорты и ссылки

Импорты или ссылки на модули, необходимые для работы, лучше всего установить вручную — особенно если вы работаете с конкретной версией пакета.

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

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

4. Давать переменным и функциям правильные имена

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

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

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

function named "fetchAirports" that gets data from the /airport route and returns json output of airports to demonstrate meaningful names.
Функция с именем «fetchAirports», которая получает данные из маршрута /airport и возвращает json-вывод аэропортов для демонстрации осмысленных названий.

5. Пишите конкретные и хорошо продуманные комментарии к функциям

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

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

Помните: единичные, конкретные и короткие комментарии помогают GitHub Copilot лучше понять контекст.

6. Дать пример кода

Пример кода поможет GitHub Copilot определить, что вам нужно. Это поможет дать модели ещё больше контекста.

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

Подробнее о создании контекста для GitHub Copilot можно узнать из этого видео на YouTube:

Встроенный чат с GitHub Copilot

Встроенный чат

Помимо обеспечения достаточным количеством контекста, в GitHub Copilot есть некоторые встроенные фичи, которыми вы, возможно, не пользуетесь. Например, встроенный чат даёт возможность практически общаться с GitHub Copilot между строками кода. По нажатию на CMD + I (CTRL + I в Windows), вы сможете задавать Copilot вопросы. Это немного удобнее для быстрых исправлений вместо того, чтобы открывать боковую панель GitHub Copilot Chat.

При этом вы получаете замечательную возможность просматривать различия в коде в режиме реального времени. Также становятся доступны специальные команды со слэшем, например, создание документации одним нажатием кнопки!

inline chat in the VS Code editor with the /doc command in focus
Встроенный чат в редакторе VS Code с командой /doc в фокусе

Советы и рекомендации по работе с GitHub Copilot Chat

GitHub Copilot Chat даёт возможность обратиться в редакторе к ИИ-помощнику. Чтобы получить максимум пользы и улучшить свой пользовательский опыт, обязательно используйте встроенные фичи.

8. Удалите нерелевантные запросы

Например, знаете ли вы, что можно удалить ранее заданный вопрос в интерфейсе чата, чтобы исключить его из индексируемой беседы? Особенно если он больше не актуален.

Copilot Chat interface with a mouse click hovered over a conversation and the X button to delete it.
Интерфейс Copilot Chat: наведение мыши на беседу, кнопка X для ее удаления.

Это улучшит ход беседы и даст GitHub Copilot только необходимую информацию, что приведёт вас к наилучшему результату.

9. Перемещаться по беседе

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

10. Использовать агент @workspace

Если вы используете VS Code или Visual Studio, не забывайте, что есть вспомогательные агенты. Например, агент @workspace знает обо всём вашем рабочем пространстве и может отвечать на вопросы, связанные с ним. Таким образом, он может дать ещё больше контекста при попытке получить хороший результат от GitHub Copilot.

11. Выделять релевантный код

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

12. Организовывать беседы с помощью потоков

В GitHub Copilot Chat можно вести несколько диалогов на разные темы одновременно, разделив их на потоки. Удобно начать новую беседу (поток) можно, нажав на значок “+” в интерфейсе чата.

copilot chat interface with a mouse click on the plus button to start a new thread or conversation
Интерфейс Copilot Chat: чтобы начать новую тему или разговор, нужно кликнуть по кнопке "+"

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

Слэш-команды — это потрясающе, и их довольно много. Эти команды помогут вам объяснить или исправить код, создать новый блокнот, написать тесты и многое другое. Это просто ярлыки для общих промптов, которые, по нашим собственным наблюдениям, особенно полезны в повседневной разработке.

Команда

Назначение

Как использовать

/explain

Получить пояснения по коду

Откройте файл с кодом или выделите код, по которому вы хотите получить пояснения, и введите:

/explain what is the fetchPrediction method?

/fix

Получить предложение по устранению проблем в коде

Выделите проблемный код и введите:

/fix propose a fix for the problems in fetchAirports route

/tests

Сгенерировать юнит-тесты для кода

Откройте файл с кодом или выделите код, для которого нужны тесты, и введите: /tests

/help

Получить помощь по использованию Copilot Chat

Введите:

/help what can you do?

/clear

Очистить историю текущего диалога

Введите: /clear

/doc

Добавить комментарий к документации

Выделите код и введите: /doc

Также можно нажать CMD+I в редакторе и ввести /doc/ в строке

/generate

Сгенерировать код для ответа на вопрос

Введите:

/generate code that validates a phone number

/optimize

Проанализировать и улучшить время выполнения выбранного кода

Выделите код и введите:

/optimize fetchPrediction method

/clear

Очистить текущий чат

Введите: /clear

/new

Скаффолдинг кода для новой рабочей среды

Введите: /new create a new django app

/simplify

Упростить выбранный код

Выделите код и введите: /simplify 

/feedback

Оставить обратную связь команде

Введите: /feedback

slash commands in VS Code terminal. commands shown are listed in the table above
Команды, доступные в VS Code

14. Прикрепление файлов

В Visual Studio и VS Code можно прикрепить файлы для чата GitHub Copilot с помощью #file. Это позволяет привязать GitHub Copilot к определённому контексту в кодовой базе и получить лучший результат.

Чтобы сослаться на файл, введите # в поле для комментариев, выберите #file, и вы увидите всплывающее окно, в котором можно выбрать файл. Также можно ввести #имя_файла.py в поле для комментариев. Пример смотрите ниже:

15. Начните с GitHub Copilot Chat для ускорения отладки

Когда мне нужно отладить код, я теперь первым делом обращаюсь к GitHub Copilot Chat. Совсем недавно я реализовывал дерево решений и выполнял k-блочную кросс-валидацию (k-fold cross-validation). Я постоянно получал неверные оценки точности и не мог понять, почему. Я обратился за помощью в GitHub Copilot Chat, и оказалось, что я не использовал свой тренировочный набор данных (X_train, y_train), хотя думал, что использовал:

Сегодня я навёрстываю упущенное в изучении AI/ML. Мне нужно было реализовать DecisionTree и использовать метод cross_val_score для оценки точности модели.

Я не мог понять, почему возвращаются неверные значения для оценки точности, поэтому обратился за помощью в чат pic.twitter.com/xn2ctMjAnr 

- Кедаша изучает AI + ML @itsthatladydevv) March 23, 2024

https://platform.twitter.com/widgets.js

Я разобрался с этим вопросом гораздо быстрее, чем если бы использовал внешние ресурсы. Поэтому я горячо рекомендую использовать GitHub Copilot Chat в своём редакторе, чтобы быстрее получить помощь в отладке, вместо того, чтобы обращаться к внешним ресурсам. Следуйте моему примеру выше: объясните проблему, вставьте проблемный код и попросите помощи. Вы также можете выделить проблемный код в редакторе и использовать команду /fix в интерфейсе чата.

Используйте «magic sparkles»

В VS Code можно быстро получить помощь от GitHub Copilot, использовав функцию «magic sparkles». Например, в разделе комментариев к коммитам, нажав на magic sparkles, вы сможете сгенерировать описание коммита с помощью искусственного интеллекта. Когда будете работать над быстрым способом доступа к встроенному чату GitHub Copilot, вы увидите, что magic sparkles есть в строке редактора — при нажатии на них искусственный интеллект поможет вам заполнить данные.

Узнайте, в чём ваш ИИ-ассистент хорош

Чтобы получить максимальную отдачу от инструмента, помните, что важно учитывать контекст и промпты. Также важно знать, где инструмент проявляет себя лучше всего. GitHub Copilot отлично справляется с такими задачами, как создание шаблонного кода и скаффолдинг, написание юнит-тестов, написание документации, подбор шаблонов, объяснение необычного или запутанного синтаксиса, cron jobs и regex, а также оказывает помощь в вспоминании забытого и отладке.

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

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


В завершение приглашаем всех желающих на открытый урок, посвященный написанию тестов с использованием Selenide на Java. На занятии кратко рассмотрим Selenide и принципы написания UI тестов на нем. Разберем разницу между WebElement и SelenideElement и тонкости использования Selenide при написании UI тестов. Также разберем тест-дизайн для построения эффективных UI тестов и напишем простой UI тест с использованием Selenide.

Записаться на урок бесплатно можно на странице курса «Java QA Engineer. Professional».

Комментарии (3)


  1. fio
    18.05.2024 08:05
    +1

    быстрее достигать прогресса в проекте

    Эх, был бы ещё прогресс в качестве перевода...


    1. Scrobot
      18.05.2024 08:05

      Имхо, да и в целом статья как-то в духе "делайте так, чтобы было хорошо, и не делайте так, чтобы было плохо". Все что описывается в статье открывается при использовании в первые 2 дня. Про работу с чатом было что-то полезное, но ожидал какие-то хаки при работе с самим копилотом. Например, как в него погружать контекст, когда фича оч сложная и затрагивает буквально всю репу. Или, я для себя до сих пор не определил, как эффективно переписывать какие-то участки в довольно больших блоках.


  1. rodion-m
    18.05.2024 08:05
    +3

    Спасибо, что описали нюансы копайлота. Ещё, хочу отметить, что опыт использования в VS Code и IDE от JB может отличаться. Читал отзывы, что в VS Code расширение работает сильно качественнее. Ещё, для желающих получить автокомплишн полностью локально могу подсказать Tabby, CodeGPT и Continue.