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

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

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

  1. Настройте Gemini Code Assist с подпиской Enterprise .
  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 находится в неподдерживаемом регионе. Список поддерживаемых регионов см. в разделе «Ограничения настройки кода» .

Выберите, какие репозитории индексировать

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

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

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

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

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

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

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

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

Консоль

  1. В консоли API перейдите на страницу настройки кода .

    Перейти к настройке кода для Gemini Code Assist

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

CLI

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

    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 : идентификатор вашего проекта Google Cloud.
      • REGION : регион, настроенный в Developer Connect в вашем облачном проекте.

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

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

  4. Управляйте доступом к индексу с помощью групп репозиториев. Группа репозиториев — это контейнер для конфигурации индексирования, которая включает репозитории и их шаблоны ветвления. Группы репозиториев предназначены для детального управления 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"}]'
    

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

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

    ЯМЛ

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

  5. Предоставьте роли 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'
      

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

      • 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 : идентификатор вашего проекта Google Cloud.
    • REGION : регион, настроенный в Developer Connect в вашем облачном проекте.

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

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

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

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

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

    • Создайте код ресурса индекса репозитория.
    • В том же проекте и месте настройте новое подключение Developer Connect.
    • Связать репозитории Git с подключением.
    • Получите имена ресурсов ссылок, выберите шаблон ветвления для индексации каждой ссылки и поместите ее в одну или несколько групп репозиториев.
    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 : имя репозитория в подключении 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"
      }
    ]
    

    ЯМЛ

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

  4. Предоставьте роли 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'
      

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

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

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

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

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

    Вы можете создать несколько групп репозиториев и назначить роли 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. В консоли API Google перейдите в 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.
    • Конец индексации репозитория — например:
      • Успех: 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. В консоли API перейдите на страницу продуктов Gemini .

    Перейти к продуктам Gemini

    Загрузится страница продукции Gemini .

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

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

  3. Чтобы удалить индекс, нажмите Удалить индекс .

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

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

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

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

Что дальше?