Настройка настройки кода 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 и на вкладке Repositories найдите Connection ID в столбце Connection в таблице. Чтобы скопировать имя ресурса, щелкните меню more_vert для получения дополнительных параметров и выберите Copy resource path .
  • 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) через Cloud Key Management Service . Чтобы узнать больше об использовании 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.

gcloud

Для настройки политики IAM необходимо подготовить файл JSON или YAML политики IAM, который будет содержать список групп 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. В консоли 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
    

Что дальше?