Настройка и использование настройки кода Gemini Code Assist

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

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

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

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

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

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

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

Во многих сценариях у вас могут быть определенные файлы или поддеревья, которые вы не хотите индексировать. Например:

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

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

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

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

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

Чтобы создать индекс в среде оболочки, используйте команду 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 в соединении.
  • Получите имена ресурсов ссылок, выберите шаблон ветвления для индексации для каждой ссылки и поместите его в одну или несколько групп репозиториев.

Чтобы создать группу репозиториев в среде оболочки, используйте команду 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), отформатированном следующим образом:

[
  {
      "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 :

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), через службу управления ключами Cloud . Дополнительные сведения об использовании CMEK см. в разделе Шифрование данных с помощью ключей шифрования, управляемых клиентом .

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

Вы получаете предложения только из репозиториев в индексе. Каждый репозиторий принадлежит к одной или нескольким группам репозиториев. Чтобы получить доступ к предложениям, необходимо предоставить IAM-роль пользователя Cloud AI Companion Repository Groups ( 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:test-user@gmail.com для отдельного лица или group:admins@example.com для группы.

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

  2. Когда будет предложено указать условие, введите None .

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

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

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

bindings:
- members:
  - group:my-group@example.com
  - user:test-user@example.com
  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 = ["test-user@example.com"]
  }
}

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 = ["test-user@example.com"]
}

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

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

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

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

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

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

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

    Для поиска журналов индексации в среде оболочки используйте команду 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
    

Что дальше