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

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

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

Я исследовал его с помощью Visual Studio 2022 и кода C#, однако Copilot работает с различными редакторами кода и языками программирования. Что касается установки, он работает как расширение для Visual Studio и Visual Studio Code. На момент написания этой статьи вы должны установить его вместе с Visual Studio 2022 версии 17.4.4 или новее и выполнить некоторые шаги. У GitHub и Microsoft есть несколько статей о том, как настроить его с помощью Visual Studio, однако в конце этой статьи я перечислил ссылки, которые помогут вам настроить GitHub CoPilot с Visual Studio.

Кратко вот шаги.

  • Зарегистрируйтесь в списке ожидания технического предварительного просмотра GitHub Copilot на https://copilot.github.com/. Когда вы получите доступ к предварительной версии, вы получите электронное письмо от GitHub.
  • Установите Visual Studio 2022 версии 17.4.4 или новее с https://visualstudio.microsoft.com/downloads/.
  • В Visual Studio 2022 перейдите в раздел Расширения › Управление расширениями и найдите GitHub Copilot. Скачайте и установите расширение.
  • Перезапустите Visual Studio 2022 и авторизуйте расширение GitHub Copilot с помощью своей учетной записи GitHub.
  • Примите условия телеметрии, чтобы присоединиться к предварительной технической версии GitHub Copilot.

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

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

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

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

Например, вы можете использовать следующие подсказки:

«Создайте курс Startup для этого проекта»

"Рефакторинг Program.cs для использования класса Startup"

"Добавить модульный тест на основе xunit для моего класса StreamController"

«Создать новый класс Sale со свойствами Item и Amount»

Это создает класс Sale со свойствами соответствующих типов.

Как вы можете видеть на изображении слева, вы можете либо создать новый файл, либо вставить в каретку. Создание новых файлов добавляет класс в проект.

Insert at Caret вставит код в то место, где находится курсор в редакторе. Вы можете продолжать улучшать и улучшать один и тот же код.

Затем я попросил «Добавить свойство Active в класс Sale», и он выдал результат, как на изображении выше.

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

Вот некоторые из других задач, которые мне удалось выполнить:

  1. Создано несколько классов контроллеров API и добавлены конструкторы с внедрением зависимостей и добавлены методы Get.
  2. Добавлен тестовый код на основе XUnit для классов контроллеров.
  3. Попросил второго пилота объяснить код, классы фреймворка и создать документацию.
  4. Улучшен код, чтобы сделать его более кратким.
  5. Обернул код вокруг блокировки try-catch.
  6. Попросили объяснить значение блока кода.
  7. Получив блок кода, оберните его вокруг блока try-catch.

Еще одной задачей, которую я попросил Copilot, была проверка кода следующего класса:

Моя подсказка была:

"Проведите проверку кода класса StreamController"

Вот класс:

[ApiController]
    [Route("[controller]")]
    public class StreamController : Controller
    {
        private readonly OpenAIAPI _openAIApi;
        private readonly Conversation _conversation;    

        public StreamController(OpenAIAPI openAIApi)
        {
            _openAIApi = openAIApi;
            _conversation = _openAIApi.Chat.CreateConversation();
        }

        [HttpGet("{inputParam}")]
        public async IAsyncEnumerable<string> Get(string inputParam)
        {

            _conversation.AppendUserInput(inputParam);

            var sb = new StringBuilder();

            await foreach (var res in   _conversation.StreamResponseEnumerableFromChatbotAsync())
            {
                sb.Append(res.ToString());
            }

            yield return sb.ToString();

        }
    }
} 

public StreamController(OpenAIAPI openAIApi)
{
_openAIApi = openAIApi;
_conversation = _openAIApi.Chat.CreateConversation();
}

[HttpGet({inputParam})]
public async IAsyncEnumerable‹string› Get(string inputParam)
{

_conversation.AppendUserInput(inputParam);

var sb = новый StringBuilder();

await foreach (var res в _conversation.StreamResponseEnumerableFromChatbotAsync())
{
sb.Append(res.ToString());
}

доходность возврата sb.ToString();

}
}
}

Вот комментарии обзора кода от Copilot:

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

//Этот метод выполняет Post-вызов API OpenAI и возвращает ответ

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

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

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

Тот факт, что вы можете оставаться в своем редакторе кода и находить все ответы на вопросы, не переключаясь на поиск Google, ChatGPT, Stack Overflow и т. д., значительно экономит время, а также дает дополнительное преимущество в виде генерации кода и добавления в текущую работу. кодовая база. Уже есть большой интерес к Copilot, многие компании сделали это частью своего сегодняшнего программирования.

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

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

Удачного программирования!

Некоторые полезные ресурсы:

(1) GitHub Copilot в Visual Studio 2022 — блог Visual Studio.
(2) Краткое руководство по GitHub Copilot — GitHub Docs.
(3) Начало работы с GitHub Copilot — GitHub Docs.

(4) Предварительный просмотр функции чата CoPilot