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

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

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

  1. Настройте Gemini Code Assist с помощью корпоративной подписки .

  2. Убедитесь, что у вас есть следующие роли управления идентификацией и доступом в проекте, которому принадлежит подписка:

    • Администрирование индексов репозитория кода ( roles/cloudaicompanion.codeRepositoryIndexesAdmin )
    • Gemini для пользователей Google Cloud ( roles/cloudaicompanion.user )
  3. Создайте или настройте учетные записи пользователей. Каждый разработчик в вашей организации, использующий Gemini Code Assist, должен иметь учетную запись пользователя в Google Cloud, имеющую разрешение на доступ к вашему проекту Google Cloud. Для получения дополнительной информации см. раздел «Предоставление ролей в консоли Google Cloud» . Убедитесь, что каждый пользователь имеет следующие роли:

  4. Функция настройки кода использует Developer Connect для доступа и индексирования ваших частных репозиториев. Убедитесь, что регион Developer Connect, в котором находится ваше подключение к репозиторию Developer Connect, также является поддерживаемым регионом для настройки кода. Функция настройки кода не может быть использована, если подключение Developer Connect находится в неподдерживаемом регионе. Список поддерживаемых регионов см. в разделе «Ограничения настройки кода» .

Choose which repositories are indexed

В качестве оптимальной практики следует индексировать репозитории, обладающие следующими характеристиками:

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

Optional: Choose which files are not indexed

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

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

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

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

Выберите один из следующих вариантов:

Консоль

  1. В консоли Google Cloud перейдите на страницу «Настройка кода» .

    Перейдите в раздел «Настройка кода» для Gemini Code Assist.

    Загружается страница настройки кода для Gemini Code Assist .

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

    1. Нажмите «Создать» и настройте параметры индекса:

      • Выберите регион, настроенный в Developer Connect в вашем облачном проекте.
      • Введите название для вашего указателя. Запишите название указателя. Оно понадобится вам на нескольких этапах работы с этим документом.
    2. Нажмите «Создать» .

    Создание индекса обычно занимает 30 минут, но может занять до часа. После завершения индексирования вы получите уведомление в консоли Google Cloud.

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

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

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

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

  4. На странице настройки кода для Gemini Code Assist нажмите «Добавить репозитории» , а затем выберите «Добавить исходные репозитории» .

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

    Если вам необходимо добавить новые репозитории в группу репозиториев, нажмите «Связать репозиторий» и следуйте инструкциям в консоли Google Cloud.

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

  5. Выберите группу репозиториев, в которую вы хотите добавить новые репозитории. В качестве альтернативы, нажмите «Создать новую группу репозиториев» , чтобы создать и настроить новую группу репозиториев.

  6. Чтобы начать индексирование выбранных репозиториев, нажмите кнопку «Индексировать» .

    Время индексирования варьируется в зависимости от размера репозиториев.

CLI

  1. Убедитесь, что вы настроили Developer Connect и подключились к своему репозиторию:
  2. В командной оболочке выполните команду ` gcloud components update , чтобы убедиться, что все установленные компоненты gcloud обновлены до последней версии. Для этого шага вы можете установить и инициализировать gcloud или использовать редактор Cloud Shell .

    gcloud components update
    
  3. Создайте индекс. Настройка кода основана на использовании индекса для анализа и обработки вашего репозитория с целью ускорения генерации подсказок и поиска нужного кода.

    1. Для создания индекса в командной оболочке используйте команду gemini code-repository-indexes create :

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

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

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

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

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

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

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

    Administrators perform the following actions:

    • Создайте ресурс «Индекс репозитория кода».
    • В том же проекте и в том же месте настройте новое подключение к 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"}]'
    

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

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

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

    JSON

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

    YAML

    - 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
    

    YAML

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

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

    You only receive suggestions from repositories in the index. Each repository belongs to one or multiple repository groups. To access suggestions, you must grant the Cloud AI Companion Repository Groups User IAM role ( roles/cloudaicompanion.repositoryGroupsUser )—which contains the required cloudaicompanion.repositoryGroups.user IAM permission—to the repository group by one of the following ways:

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

    Entire index

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

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

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

      • PRINCIPAL : адрес электронной почты субъекта, которому необходим доступ — например, user:test-user@gmail.com для отдельного пользователя или group:admins@example.com для группы.

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

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

    Подмножество индекса

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

    Для настройки политики 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
    

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

    • GROUP_NAME : имя группы репозитория, созданной на предыдущем шаге для управления доступом к индексу с помощью групп репозитория.
    • POLICY_FILE : политика IAM.

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

Терраформирование

  1. Убедитесь, что вы настроили Developer Connect и подключились к своему репозиторию:

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

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

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

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

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

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

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

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

    Administrators perform the following actions:

    • Create Code the Repository Index resource.
    • В том же проекте и в том же месте настройте новое подключение к Developer Connect.
    • Link Git repos in the connection.
    • Получите имена ресурсов ссылок, выберите шаблон ветви для индексации каждой ссылки и поместите ее в одну или несколько групп репозитория.
    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 .
    • REPOSITORY_RESOURCE_NAME : name of the repository inside the Developer Connect connection. To find the name of the repository, go to the Git repositories page in the Google Cloud console, and in the Repositories tab, look for the Connection ID under the Connection column in the table. To copy the resource name, click the more_vert menu for more options, and select Copy resource path .
    • BRANCH_NAMES : названия ветвей, которые вы хотите проиндексировать, например, main|dev .

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

    JSON

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

    YAML

    - 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
    

    YAML

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

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

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

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

    Entire index

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

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

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

      • PRINCIPAL : адрес электронной почты субъекта, которому необходим доступ — например, user:test-user@gmail.com для отдельного пользователя или group:admins@example.com для группы.

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

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

    Subset of the index

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

      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"]
      }
    

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

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

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

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

  1. Найдите журналы indexing . Для получения дополнительной информации см. раздел «Ведение журналов языка запросов» .

    Консоль

    1. В консоли Google Cloud перейдите в раздел «Обозреватель журналов» .

      Go to Logs Explorer

    2. Используйте фильтр по именам журналов, чтобы просмотреть журналы indexing .

    CLI

    Для поиска журналов индексирования в командной оболочке используйте команду 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.
    • End of repository indexing-for example:
      • Успех: 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. Проверьте связанные с индексацией ошибки, например, следующие:

    • Failed to fetch repository.
    • Failed to list repository files.
    • Не удалось получить информацию о репозитории из индекса.
    • Не удалось получить файлы из индекса.
    • Внутренняя ошибка.

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

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

Разработчики, добавленные в группу репозитория, в которой проиндексирован хотя бы один ресурс, получат уведомление в своей IDE о включении настройки кода. Чтобы узнать статус настройки кода, разработчики могут щелкнуть значок spark Gemini в правом нижнем углу и найти один из следующих статусов настройки кода в строке поиска:

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

Чтобы узнать больше об использовании персонализации кода и передовых методах, см. раздел «Использование персонализации кода» .

Turn off code customization

Выберите один из следующих вариантов:

Консоль

  1. В консоли Google Cloud перейдите на страницу продуктов Gemini .

    Go to Gemini Products

    Страница с продукцией Gemini загружается.

  2. В меню навигации нажмите «Настройка кода» .

    Загружается страница настройки кода .

  3. To delete the index, click Delete .

    Отображается предупреждение. Если вы хотите продолжить и удалить индекс, введите имя индекса, а затем нажмите кнопку «Удалить» .

CLI

  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 в вашем облачном проекте. Для успешного выполнения команд необходимо указать поддерживаемый регион .
    • PROJECT_ID : your Google Cloud project ID.
    • 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. Повторяйте описанные выше шаги для каждой группы репозиториев, пока не удалите все группы репозиториев из индекса.

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

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

Что дальше?