Настройка настройки кода Gemini Code Assist

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

Прежде чем начать

Выберите, какие частные репозитории будут подключены

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

  • Создайте код, который по стилю и структуре похож на тот, который вы хотите, чтобы написали ваши разработчики.
  • У вас есть частные библиотеки или API, которые вы хотели бы вызывать из текущей кодовой базы.

(Необязательно) Выберите, какие файлы не индексируются.

По умолчанию настройка кода индексирует все поддерживаемые файлы кода в указанных вами репозиториях.

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

Кроме того, вы также можете исключить файлы из индекса, создав файл .aiexclude .

Создать индекс

Настройка кода основана на индексе для анализа и разбора вашего репозитория с целью более быстрой генерации предложений и поиска кода.

gcloud

Чтобы создать индекс, в среде оболочки используйте команду gemini code-repository-indexes create :

gcloud gemini code-repository-indexes create INDEX_NAME \     --project=PROJECT_ID \     --location=REGION 

Терраформировать

resource "google_gemini_code_repository_index" "example" {   location = "REGION"   code_repository_index_id = "INDEX_NAME" } 

Заменить следующее:

  • INDEX_NAME : имя вашего индекса. Важно : запишите имя вашего индекса. Оно понадобится вам на нескольких этапах этого документа.
  • PROJECT_ID : идентификатор вашего проекта Google Cloud.
  • REGION : поддерживаемый регион, как указано в разделе «Перед началом работы» на этой странице, который вы настроили в Developer Connect в своем проекте Google Cloud.

Создание индекса обычно занимает 30 минут, но может занять и час.

Google ограничивает количество индексов репозитория кода одним для каждого проекта и организации.

Управляйте доступом к вашему индексу с помощью групп репозитория

Группа репозиториев — это контейнер для конфигурации индексации, включающий репозитории и их шаблоны ветвления. Группы репозиториев предназначены для детального управления IAM, предоставляя разработчикам доступ к индексированным данным из этих групп при наличии разрешения cloudaicompanion.repositoryGroups.use .

Группы репозиториев содержат репозитории Developer Connect или ссылки из одного проекта и местоположения.

Администраторы выполняют следующие действия:

  • Создать ресурс индекса репозитория кода.
  • В том же проекте и месте настройте новое подключение Developer Connect.
  • Связать репозитории Git с подключением.
  • Получите имена ресурсов ссылок, выберите шаблон ветвления для индексации каждой ссылки и поместите ее в одну или несколько групп репозиториев.

gcloud

Чтобы создать группу репозиториев, в среде оболочки используйте команду gemini code-repository-indexes repository-groups create :

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \     --project=PROJECT_ID \     --location=REGION \     --code-repository-index=INDEX_NAME \     --repositories='[{"resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "BRANCH_NAMES"}]' 

Терраформировать

resource "google_gemini_repository_group" "example" {   location = "REGION"   code_repository_index = "INDEX_NAME"   repository_group_id = "REPOSITORY_GROUP"   repositories {     resource = "REPOSITORY_RESOURCE_NAME"     branch_pattern = "BRANCH_NAMES"   } } 

Заменить следующее:

  • REPOSITORY_GROUP : имя группы репозитория, например, default .
  • PROJECT_ID : идентификатор вашего проекта Google Cloud.
  • REGION : поддерживаемый регион, как указано в разделе «Прежде чем начать» на этой странице, который вы настроили в Developer Connect в своем проекте Google Cloud.
  • INDEX_NAME : имя индекса, созданного на предыдущем шаге создания индекса .
  • REPOSITORY_RESOURCE_NAME : имя репозитория в подключении Developer Connect. Чтобы узнать имя репозитория, перейдите на страницу Developer Connect в консоли Google Cloud и на вкладке «Репозитории» найдите идентификатор подключения в столбце «Подключение » таблицы. Чтобы скопировать имя ресурса, откройте меню more_vert для просмотра дополнительных параметров и выберите «Копировать путь к ресурсу» .
  • BRANCH_NAMES : имена ветвей, которые вы хотите индексировать, например main|dev .

Вы также можете создать группу репозиториев с репозиториями, определенными в файле JSON (или YAML), отформатированном следующим образом:

JSON

[   {       "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "main|dev"   },   {       "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "dev"   } ] 

ЯМЛ

- resource: REPOSITORY_RESOURCE_NAME   branchPattern: main|dev  - resource: REPOSITORY_RESOURCE_NAME   branchPattern: dev 

Чтобы создать группу репозиториев на основе файла JSON или YAML, в среде оболочки используйте команду gemini code-repository-indexes repository-groups create :

JSON

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \     --project=PROJECT_ID \     --location=REGION \     --code-repository-index=INDEX_NAME \     --repositories=FILEPATH.json 

ЯМЛ

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \     --project=PROJECT_ID \     --location=REGION \     --code-repository-index=INDEX_NAME \     --repositories=FILEPATH.yaml 

При желании вы можете шифровать и контролировать свои данные с помощью ключа шифрования, управляемого клиентом (CMEK), через службу управления облачными ключами . Подробнее об использовании CMEK см. в статье Шифрование данных с помощью ключей шифрования, управляемых клиентом .

Предоставить роль IAM группе репозитория в проекте

Вы получаете предложения только из репозиториев, указанных в индексе. Каждый репозиторий принадлежит одной или нескольким группам репозиториев. Для доступа к предложениям необходимо предоставить группе репозиториев IAM-роль пользователя групп репозиториев Cloud AI Companion ( roles/cloudaicompanion.repositoryGroupsUser ), которая содержит необходимое разрешение IAM cloudaicompanion.repositoryGroups.user , одним из следующих способов:

  • Предоставить принципалам разрешение на доступ ко всему индексу.
  • Предоставить принципалам доступ к подмножеству индекса.

Предоставить принципалам разрешение на доступ ко всему индексу

  1. Чтобы привязать политику IAM к проекту, в среде оболочки используйте команду projects add-iam-policy-binding :

    gcloud projects add-iam-policy-binding PROJECT_ID \     --member='PRINCIPAL' \     --role='roles/cloudaicompanion.repositoryGroupsUser' 

    Заменить следующее:

    • PROJECT_ID : идентификатор проекта, в котором расположена группа репозитория.
    • PRINCIPAL : адрес электронной почты принципала, которому необходим доступ, например, user:[email protected] для отдельного лица или group:[email protected] для группы.

    Для получения дополнительной информации см. gcloud projects set-iam-policy .

  2. При появлении запроса на указание условия введите None .

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

Вы можете создать несколько групп репозиториев и назначить роли IAM разным субъектам IAM.

gcloud

Чтобы настроить IAM-политику, необходимо подготовить JSON- или YAML-файл IAM-политики, содержащий список IAM-групп и назначенных ролей. Например:

bindings: - members:   - group:[email protected]   - user:[email protected]   role: roles/cloudaicompanion.repositoryGroupsUser 

Дополнительные сведения и синтаксис см. в разделе Общие сведения о политиках разрешения .

Чтобы установить политику IAM, в среде оболочки используйте команду gemini code-repository-indexes repository-groups set-iam-policy :

gcloud gemini code-repository-indexes repository-groups set-iam-policy GROUP_NAMEPOLICY_FILE \     --project=PROJECT_ID \     --location=REGION \     --code-repository-index=INDEX_NAME 

Заменить следующее:

Терраформировать

data "google_iam_policy" "foo" {   binding {     role = "roles/cloudaicompanion.repositoryGroupsUser"     members = ["[email protected]"]   } }  resource "google_gemini_repository_group_iam_policy" "foo" {   project = "PROJECT_ID"   location = "REGION"   code_repository_index_id = "INDEX_NAME"   repository_group_id = "GROUP_NAME"   policy_data = data.google_iam_policy.foo.policy_data }  data "google_gemini_repository_group_iam_policy" "foo" {   project = "PROJECT_ID"   location = "REGION"   code_repository_index_id = "INDEX_NAME"   repository_group_id = "GROUP_NAME"   depends_on = [     google_gemini_repository_group_iam_policy.foo   ] } 

Вы также можете создать привязку:

resource "google_gemini_repository_group_iam_binding" "foo" {   project = "PROJECT_ID"   location = "REGION"   code_repository_index_id = "INDEX_NAME"   repository_group_id = "GROUP_NAME"   role = "roles/cloudaicompanion.repositoryGroupsUser"   members = ["[email protected]"] } 

Заменить следующее:

Проверить статус индексации

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

  1. Найдите журналы indexing . Подробнее см. в разделе «Язык запросов для журналирования» .

    Консоль

    1. В консоли API Google перейдите в Logs Explorer .

      Перейти к обозревателю журналов

    2. Для просмотра журналов indexing используйте фильтр имен журналов.

    gcloud

    Для поиска журналов индексации в среде оболочки используйте команду logging read :

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing"" 

    Замените PROJECT_ID на идентификатор проекта, в котором расположена группа репозитория.

    Например, чтобы просмотреть ошибки в журналах indexing , выполните следующую команду:

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR" 
  2. Проверьте соответствующие статусы индексации, например следующие:

    • Начало индексации репозитория, например, Indexing repository REPOSITORY_NAME . Total number of repositories: 10, succeeded: 6, failed: 0.
    • Конец индексации индивидуального репозитория — например:
      • Успех: Successfully finished indexing repository REPOSITORY_NAME . Total number of repositories: 10, succeeded: 7, failed: 0.
      • Ошибка: Failed to index repository REPOSITORY_NAME . Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Конец индексации репозитория — например:
      • Успех: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Ошибка: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 1. Repositories that were not successfully fetched will be retried in the next run.

    В статусах индекса REPOSITORY_NAME — это репозиторий, который вы хотите просмотреть.

  3. Просмотрите сопутствующие ошибки индексации, например следующие:

    • Не удалось загрузить репозиторий.
    • Не удалось составить список файлов репозитория.
    • Не удалось получить информацию о репозитории из индекса.
    • Не удалось извлечь файлы из индекса.
    • Внутренняя ошибка.

Использовать настройку кода

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

Дополнительную информацию об использовании настройки кода и передовых методах см. в разделе Использование настройки кода .

Отключить настройку кода

  1. Чтобы вывести список всех групп репозиториев для текущего индекса, в среде оболочки используйте команду gemini code-repository-indexes repository-groups list :

    gcloud gemini code-repository-indexes repository-groups list --location=REGION \     --project=PROJECT_ID \     --code-repository-index=INDEX_NAME --uri 

    Заменить следующее:

    • REGION : поддерживаемый регион, как указано в разделе «Перед началом работы» на этой странице, который вы настроили в Developer Connect в своем проекте Google Cloud.
    • PROJECT_ID : идентификатор вашего проекта Google Cloud.
    • INDEX_NAME : имя индекса, созданного на предыдущем шаге создания индекса .
  2. Чтобы удалить группу репозиториев из текущего индекса, используйте команду gemini code-repository-indexes repository-groups delete :

    gcloud gemini code-repository-indexes repository-groups delete REPOSITORY_GROUP \     --location=REGION \     --project=PROJECT_ID \     --code-repository-index=INDEX_NAME 
  3. Повторяйте шаг 3 для каждой группы репозиториев, пока не удалите все группы репозиториев из индекса.

  4. Необязательно: чтобы удалить индекс, в среде оболочки используйте команду gemini code-repository-indexes delete :

    gcloud gemini code-repository-indexes delete INDEX_NAME \     --location=REGION \     --project=PROJECT_ID 

Что дальше?