Завершения для команд IntelliCode: IntelliSense для вашего кода на основе искусственного интеллекта

Благодаря командным моделям IntelliCode для завершений вы получаете основанные на искусственном интеллекте рекомендации IntelliSense по вашим базам кода на C# и C++. Завершения для команд полезны при работе с вашими собственными типами или предметно-ориентированными библиотеками, которые обычно не используются в открытом коде, так как рекомендации IntelliCode по базовой модели основаны исключительно на шаблонах, извлеченных из репозиториев GitHub с открытым кодом. Если вы работаете над кодом, которого нет в этом наборе репозиториев с открытым кодом, базовые рекомендации вам не пригодятся. Если вы пишете код на C# и C++ в Visual Studio, используйте IntelliCode, чтобы изучать шаблоны из их кода и предоставлять рекомендации, адаптированные к вашему коду.

Модели IntelliCode — это инкапсуляция набора правил, которые позволяют прогнозировать некоторую полезную информацию (например, рекомендации в списке IntelliSense) на основе анализа кода. IntelliCode создает модели команд, используя тот же процесс обучения, что и для базовых моделей IntelliCode, за исключением того, что они обучаются на вашем коде. Чем больший объем кода, определяющего шаблоны использования, вы предоставляете, тем больше вероятность того, что на основе командной модели могут быть получены полезные рекомендации.

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

Принципы применения моделей

IntelliCode предлагает рекомендации на основе нескольких моделей, для получения которой объединяются следующие компоненты:

  • базовая модель используемого вами языка (которая прошла обучение на тысячах общедоступных репозиториев GitHub);
  • любые модели команд, которые вы обучили;
  • любые модели команд, связанные с репозиторием Git, в котором вы работаете.

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

Типы моделей завершений для команд

Модели завершений для команд можно получить двумя способами:

  1. Связанные с репозиторием. Модели привязаны к репозиторию. К ним автоматически получают доступ все пользователи, которые могут клонировать и редактировать репозиторий. База кода должна находиться в системе управления версиями Git и передаваться в удаленный репозиторий с помощью нашей задачи Azure Pipelines или нашего экземпляра GitHub Actions из сборки CI для создания модели, связанной с репозиторием.

  2. Связанные с компьютером. Модели доступны только на том компьютере, на котором они обучаются.

Командные модели, связанные с репозиторием

Командные модели, связанные с репозиторием, доступны пользователям, которые обучают их с помощью Azure Pipelines или GitHub Actions.

  • Дополнительные сведения о том, как настроить и автоматизировать рабочий процесс CI (т. е. файл .yml) для обучения завершениям для команд с помощью GitHub Actions, см. в статье Завершения для команд IntelliCode.
  • Дополнительные сведения о настройке конвейера Azure DevOps для обучения завершениям для команд см. в статье Обучение моделей команд Visual Studio IntelliCode.

Предоставление общего доступа к командным моделям, связанным с репозиторием

Доступ к моделям, связанным с репозиторием, автоматически предоставляется другим пользователям, работающим с той же базой кода, если они включили автоматическое получение моделей для команд в Visual Studio. Чтобы включить автоматическое получение, выберите Сервис>Параметры>IntelliCode>Получать модели команд для завершений.

При клонировании и открытии модели базы кода, с которой проводилось обучение, все модели, связанные с настроенными удаленными репозиториями Git, скачиваются и активируются. Если вы работаете с вилкой базы кода, просто добавьте вышестоящую базу кода в качестве удаленного репозитория, чтобы получить модель.

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

Примечание

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

Удаление модели

Неиспользуемые модели можно удалить из учетной записи.

Удаление связанной с пользователем модели, созданной в Visual Studio

Открыв решение в Visual Studio, просто снимите флажок, подтверждающий обучение модели, на странице Вид>Другие окна>IntelliCode. Модель будет удалена.

Удаление связанной с репозиторием модели, созданной с помощью Azure DevOps или рабочего процесса CI GitHub

Удалите задачу обучения из конвейера. Связанная модель будет удалена в течение 30 дней, если она не была обучена.

Модели, связанные с компьютером

Создание и повторное обучение модели

Чтобы обучить модель, связанную с компьютером:

  1. Откройте проект или решение в Visual Studio.
  2. Откройте страницу IntelliCode, выбрав Вид>Другие окна>IntelliCode.
  3. Просмотрите и примите условия лицензионного соглашения в нижней части страницы, установив флажок. Модель, связанная с компьютером, будет обучена автоматически.

Примечание

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

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

Обучение на основе открытой базы кода

Прежде чем начинать обучение на основе собственного кода, вы можете создать модель завершений с применением открытой базы кода. Это позволяет увидеть, как модель дополнений влияет на работу IntelliSense. Если вас интересует, какие данные собирает IntelliSense, можно просмотреть извлеченные данные. Среди интересных примеров, которые можно использовать для обучения, можно выделить следующие:

  • Azure ConferenceBuddy

    Создайте вилку репозитория в личной учетной записи, клонируйте репозиторий, откройте решение ConferenceBuddy.sln, выполните сборку для проверки ее работоспособности, после чего проведите обучение модели. В экземплярах класса AskWhoTask можно найти несколько эффективных вариантов завершения.

  • Средство чтения RSS Windows

    Создайте вилку репозитория в личной учетной записи, клонируйте репозиторий, откройте решение RssReader.sln, выполните сборку для проверки ее работоспособности, после чего проведите обучение модели. В экземплярах класса MainViewModel можно найти несколько эффективных вариантов завершения.

Модели автоматического обучения для базы кода

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

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

Примечание

В отношении автоматического обучения модели для завершений пользовательского кода IntelliCode в решении Visual Studio отсутствуют требования к системе управления версиями. Тем не менее, если вы хотите поделиться своими пользовательскими завершениями с другими членами команды, для создания связанной с репозиторием модели база кода должна находиться в системе управления версиями GIT и быть передана в удаленный репозиторий.

Включение автоматического обучения моделей для завершений пользовательского кода в Visual Studio

Чтобы включить автоматическое обучение модели для завершений IntelliCode для вашего кода в Visual Studio:

  1. Откройте папку решения или репозитория в Visual Studio.

  2. Чтобы включить автоматическое обучение модели для завершений пользовательского кода, воспользуйтесь строкой информационной панели после успешного завершения сборки, пользовательским интерфейсом IntelliCode (Вид>Другие окна>IntelliCode) или разделом Сервис>Параметры>IntelliCode, установив параметр "Автоматическое обучение командных моделей для завершений IntelliSense". Также вы можете выполнить поиск по запросу автоматическое обучение IntelliCode в поле поиска Visual Studio (CTRL+Q).

  3. Успешно созданная модель будет автоматически скачана в Visual Studio. Чтобы отслеживать ход создания модели, откройте окно вывода и выберите IntelliCode в раскрывающемся списке ИЛИ воспользуйтесь разделом Вид>Другие окна>IntelliCode.

Примечание

Убедитесь в том, что у вас установлена версия не ниже Visual Studio 16.7 (предварительная версия 3). После установки предварительной версии можно включить автоматическое обучение моделей для завершений пользовательского кода с помощью информационной панели после успешного завершения сборки ИЛИ в разделе Сервис>Параметры>IntelliCode.

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

Если вас устраивают полученные завершения пользовательского кода для вашего решения, вы можете настроить автоматическое создание, повторное обучение и совместное использование собственных завершений кода IntelliCode для всей команды разработчиков в рамках конвейера непрерывной интеграции в Azure Pipelines или GitHub Action для завершений для команд.

Данные и конфиденциальность

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

Извлеченные данные передаются в службу IntelliCode по протоколу HTTPS. Затем эта служба проводит обучение на основе вашего кода с применением алгоритмов машинного обучения. Далее полученная модель возвращается на ваш компьютер, где объединяется с базовой моделью.

Когда вы включаете обучение моделей IntelliCode для завершений пользовательского кода вручную или автоматически:

  • Мы анализируем код локально.
  • Мы извлекаем файл сводки с метаданными по вашим типам и их использованию.
  • Мы безопасно отправляем его в службу IntelliCode и обучаем модель завершения, адаптированную к коду.
  • Модель завершения не предоставляется пользователям, имеющим доступ к вашему репозиторию (в случае клонированного репозитория Git).
  • Вы можете в любое время удалить модель или отменить ее обучение непосредственно в пользовательском интерфейсе IntelliCode (Вид>Другие окна>IntelliCode). Чтобы удалить модель для завершений пользовательского кода, снимите соответствующий значок в пользовательском интерфейсе.
  • Вы можете обновить изученные закономерности непосредственно в пользовательском интерфейсе IntelliCode (Вид>Другие окна>IntelliCode).

Ход обучения отображается в разделе IntelliCode в окне вывода Visual Studio или пользовательском интерфейсе IntelliCode (Вид>Другие окна>IntelliCode). После завершения обучения вы сможете просмотреть сводку и новую модель, адаптированную к коду. Затем попробуйте написать код, используя классы и типы, которые относятся к вашему репозиторию. Вы должны увидеть предложения со звездочками для наиболее распространенных случаев.

Просмотр извлеченных данных

Чтобы проверить извлеченные данные, выполните следующие действия:

  1. Откройте извлеченный каталог данных.

    • Для моделей, связанных с репозиторием: %temp%\Intellicode_Extraction_2019-10-23—234524
    • Для моделей, связанных с компьютером: %TEMP%\Visual Studio IntelliCode
  2. Чтобы найти и открыть материалы последнего сеанса обучения, выполните сортировку содержимого папки по дате в порядке убывания. В этом случае последний сеанс обучения будет отображаться первым в папке.

    Совет

    Для каждого сеанса обучения в каталоге %TEMP%\Visual Studio IntelliCode создается одна папка со случайным образом формируемым именем.

В этой папке содержатся все файлы, которые передаются корпорации Майкрософт по завершении извлечения. В подпапке UsageOutput находится JSON-файл, содержащий сведения, которые IntelliCode извлекает из вашего кода для обучения модели. В файле UsageOutput_ErrorStats содержатся ошибки, обнаруженные при попытке выполнить построение извлеченного файла. Корпорация Майкрософт использует эту информацию для отладки проблем.

IntelliCode model-training directory

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

Способы защиты ваших данных

Весь обмен данными со службой IntelliCode осуществляется по протоколу HTTPS. Для обмена данными с этой службой необходимо выполнить вход в Visual Studio.

Модели могут извлекаться следующим образом:

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

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

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

См. также раздел