Configurer la personnalisation du code Gemini Code Assist

Ce document explique comment configurer la personnalisation du code Gemini Code Assist dans la console API, avec la Google Cloud CLI ou avec Terraform en connectant Gemini Code Assist à vos dépôts de code privés. La fonctionnalité de personnalisation du code de Gemini Code Assist vous permet de recevoir des recommandations de code basées sur les bibliothèques internes, les API privées et le style de codage de votre organisation.

Avant de commencer

  1. Configurez Gemini Code Assist avec un abonnement Enterprise.
  2. Vérifiez que vous disposez des rôles Identity and Access Management suivants dans le projet propriétaire de l'abonnement :

    • Administrateur des index de dépôt de code (roles/cloudaicompanion.codeRepositoryIndexesAdmin)
    • Utilisateur Gemini pour Google Cloud (roles/cloudaicompanion.user)
  3. Créez ou configurez des comptes utilisateur. Chaque développeur de votre organisation qui utilise Gemini Code Assist doit disposer d'une identité utilisateur dans Google Cloud et être autorisé à accéder à votre projet Google Cloud. Pour en savoir plus, consultez Attribuer des rôles dans la console Google Cloud. Vérifiez que chaque utilisateur dispose des rôles suivants :

  4. La fonctionnalité de personnalisation du code utilise Developer Connect pour accéder à vos dépôts privés et les indexer. Assurez-vous que la région Developer Connect où se trouve votre connexion au dépôt Developer Connect est également un emplacement compatible avec la personnalisation du code. Vous ne pouvez pas utiliser la fonctionnalité de personnalisation du code si la connexion Developer Connect se trouve dans une région non prise en charge. Pour obtenir la liste des régions compatibles, consultez Limites de la personnalisation du code.

Choisir les dépôts à indexer

Nous vous recommandons d'indexer les dépôts qui présentent les caractéristiques suivantes :

  • Code dont le style ou la structure sont similaires à ceux que vous souhaitez que vos développeurs écrivent.
  • Bibliothèques ou API privées que vous souhaitez appeler à partir de votre codebase actuel.

Facultatif : Choisir les fichiers à ne pas indexer

Par défaut, la personnalisation du code indexe tous les fichiers de code compatibles dans les dépôts que vous avez spécifiés.

Pour éviter d'exposer du code que vous ne souhaitez pas indexer, vous pouvez utiliser des modèles de branche pour contrôler l'accès à votre index et utiliser une branche stable, telle que main.

Vous pouvez également exclure des fichiers de l'index en créant un fichier .aiexclude.

Configurer la personnalisation du code Gemini Code Assist

Sélectionnez l'une des options suivantes :

Console

  1. Dans la console API, accédez à la page Personnalisation du code.

    Accéder à la personnalisation du code pour Gemini Code Assist

    La page Personnalisation du code pour Gemini Code Assist se charge.

  2. Créer un index. La personnalisation du code s'appuie sur un index pour analyser votre dépôt afin de générer des suggestions de code et des recherches plus rapidement.

    1. Cliquez sur Créer et configurez les détails de l'index :

      • Sélectionnez la région configurée dans Developer Connect dans votre projet Cloud.
      • Saisissez un nom pour votre index. Notez le nom de votre index. Vous en aurez besoin à plusieurs étapes de ce document.
    2. Cliquez sur Créer.

    La création d'un index prend généralement 30 minutes, mais peut durer jusqu'à une heure. Une fois l'indexation terminée, vous recevez une notification dans la console Google APIs.

    Google limite le nombre d'index de dépôt de code à un par projet et par organisation.

  3. Contrôlez l'accès à votre index à l'aide de groupes de dépôts.

    Un groupe de dépôts est un conteneur pour la configuration de l'indexation, qui inclut les dépôts et leurs modèles de branche. Les groupes de dépôts sont conçus pour un contrôle IAM précis. Ils permettent aux développeurs d'accéder aux données indexées de ces groupes, où ils disposent de l'autorisation cloudaicompanion.repositoryGroups.use.

    Les groupes de dépôts contiennent des dépôts ou des liens Developer Connect provenant du même projet et du même emplacement.

  4. Sur la page Personnalisation du code pour Gemini Code Assist, cliquez sur Ajouter des dépôts, puis sélectionnez Ajouter des dépôts sources.

    Une liste des dépôts existants dans Developer Connect s'affiche pour la région que vous avez configurée à l'étape précédente afin de créer l'index.

    Si vous devez ajouter des dépôts au groupe de dépôts, cliquez sur Associer un dépôt, puis suivez la procédure dans la console Google APIs.

    Vous pouvez également sélectionner un ou plusieurs dépôts, puis les modifier pour ajouter une branche.

  5. Sélectionnez le groupe de dépôts auquel vous souhaitez ajouter des dépôts. Vous pouvez également cliquer sur Créer un groupe de dépôts pour créer et configurer un groupe de dépôts.

  6. Pour commencer à indexer les dépôts sélectionnés, cliquez sur Indexer.

    Le temps d'indexation varie en fonction de la taille des dépôts.

CLI

  1. Vérifiez que vous avez configuré Developer Connect et que vous êtes connecté à votre dépôt :
  2. Dans un environnement de shell, exécutez la commande gcloud components update pour vérifier que tous les composants installés de gcloud ont été mis à jour vers la dernière version. Pour cette étape, vous pouvez installer et initialiser gcloud, ou utiliser l'éditeur Cloud Shell.

    gcloud components update
    
  3. Créer un index. La personnalisation du code s'appuie sur un index pour analyser votre dépôt afin de générer des suggestions de code et des recherches plus rapidement.

    1. Pour créer l'index, dans un environnement de shell, utilisez la commande gemini code-repository-indexes create :

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

      Remplacez les éléments suivants :

      • INDEX_NAME : nom de votre index. Important : Notez le nom de votre index. Vous en aurez besoin à plusieurs étapes de ce document.
      • PROJECT_ID : ID de votre projet Google Cloud.
      • REGION : région configurée dans Developer Connect de votre projet Cloud.

      La création d'un index prend généralement 30 minutes, mais peut durer jusqu'à une heure.

      Google limite le nombre d'index de dépôt de code à un par projet et par organisation.

  4. Contrôlez l'accès à votre index à l'aide de groupes de dépôts. Un groupe de dépôts est un conteneur pour la configuration de l'indexation, qui inclut les dépôts et leurs modèles de branche. Les groupes de dépôts sont conçus pour un contrôle IAM précis. Ils permettent aux développeurs d'accéder aux données indexées de ces groupes, où ils disposent de l'autorisation cloudaicompanion.repositoryGroups.use.

    Les groupes de dépôts contiennent des dépôts ou des liens Developer Connect provenant du même projet et du même emplacement.

    Les administrateurs peuvent :

    • créer une ressource d'index de dépôt de code ;
    • configurer une connexion Developer Connect dans le même projet et au même emplacement ;
    • associer des dépôts Git dans la connexion ;
    • obtenir les noms de ressources des liens, choisir le modèle de branche à indexer pour chaque lien et le placer dans un ou plusieurs groupes de dépôts.

    Pour créer un groupe de dépôts, dans un environnement de shell, utilisez la commande 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"}]'
    

    Remplacez les éléments suivants :

    • REPOSITORY_GROUP : nom du groupe de dépôts, tel que default.
    • REPOSITORY_RESOURCE_NAME : nom du dépôt dans la connexion Developer Connect. Pour trouver le nom du dépôt, accédez à la page Dépôts Git de la console Google Cloud. Ensuite, dans l'onglet Dépôts, recherchez l'ID de connexion sous la colonne Connexion du tableau. Pour copier le nom de la ressource, cliquez sur le menu more_vert pour afficher plus d'options, puis sélectionnez Copier le chemin d'accès à la ressource.
    • BRANCH_NAMES : nom des branches que vous souhaitez indexer, par exemple main|dev.

    Vous pouvez également créer un groupe de dépôts avec des dépôts définis dans un fichier JSON (ou YAML), au format suivant :

    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
    

    Pour créer un groupe de dépôts à partir d'un fichier JSON ou YAML, dans un environnement de shell, utilisez la commande 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
    

    Si vous préférez, vous pouvez chiffrer et contrôler vos données avec une clé de chiffrement gérée par le client (CMEK) via Cloud Key Management Service. Pour en savoir plus sur l'utilisation d'une CMEK, consultez Chiffrer les données avec des clés de chiffrement gérées par le client.

  5. Attribuez des rôles IAM au groupe de dépôts dans un projet.

    Vous ne recevez que des suggestions provenant de dépôts figurant dans l'index. Chaque dépôt appartient à un ou plusieurs groupes de dépôts. Pour accéder aux suggestions, vous devez attribuer le rôle IAM Utilisateur des groupes de dépôts Cloud AI Companion (roles/cloudaicompanion.repositoryGroupsUser), qui contient l'autorisation IAM cloudaicompanion.repositoryGroups.user requise, au groupe de dépôts de l'une des manières suivantes :

    • Accordez aux comptes principaux l'autorisation d'accéder à l'intégralité de l'index.
    • Accordez aux comptes principaux l'accès à un sous-ensemble de l'index.

    Index complet

    1. Pour associer une stratégie IAM à un projet, dans un environnement de shell, utilisez la commande projects add-iam-policy-binding :

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

      Remplacez les éléments suivants :

      • PRINCIPAL : adresse e-mail du compte principal ayant besoin d'un accès (par exemple, user:test-user@gmail.com pour un utilisateur individuel ou group:admins@example.com pour un groupe).

      Pour en savoir plus, consultez les sections sur gcloud projects set-iam-policy

    2. Lorsque vous êtes invité à spécifier une condition, saisissez None.

    Sous-ensemble de l'index

    Vous pouvez créer plusieurs groupes de dépôts et attribuer des rôles IAM à différents comptes principaux IAM.

    Pour configurer une stratégie IAM, vous devez préparer le fichier JSON ou YAML de la stratégie IAM, qui contiendra une liste de groupes IAM et de rôles attribués. Exemple :

      bindings:
      - members:
        - group:my-group@example.com
        - user:test-user@example.com
        role: roles/cloudaicompanion.repositoryGroupsUser
    

    Pour en savoir plus et connaître la syntaxe, consultez Comprendre les stratégies d'autorisation.

    Pour définir la stratégie IAM, dans un environnement de shell, utilisez la commande 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
    

    Remplacez les éléments suivants :

Terraform

  1. Vérifiez que vous avez configuré Developer Connect et que vous êtes connecté à votre dépôt :

  2. Créer un index. La personnalisation du code s'appuie sur un index pour analyser votre dépôt afin de générer des suggestions de code et des recherches plus rapidement.

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

    Remplacez les éléments suivants :

    • INDEX_NAME : nom de votre index. Important : Notez le nom de votre index. Vous en aurez besoin à plusieurs étapes de ce document.
    • PROJECT_ID : ID de votre projet Google Cloud.
    • REGION : région configurée dans Developer Connect de votre projet Cloud.

    La création d'un index prend généralement 30 minutes, mais peut durer jusqu'à une heure.

    Google limite le nombre d'index de dépôt de code à un par projet et par organisation.

  3. Contrôlez l'accès à votre index à l'aide de groupes de dépôts. Un groupe de dépôts est un conteneur pour la configuration de l'indexation, qui inclut les dépôts et leurs modèles de branche. Les groupes de dépôts sont conçus pour un contrôle IAM précis. Ils permettent aux développeurs d'accéder aux données indexées de ces groupes, où ils disposent de l'autorisation cloudaicompanion.repositoryGroups.use.

    Les groupes de dépôts contiennent des dépôts ou des liens Developer Connect provenant du même projet et du même emplacement.

    Les administrateurs peuvent :

    • créer une ressource d'index de dépôt de code ;
    • configurer une connexion Developer Connect dans le même projet et au même emplacement ;
    • associer des dépôts Git dans la connexion ;
    • obtenir les noms de ressources des liens, choisir le modèle de branche à indexer pour chaque lien et le placer dans un ou plusieurs groupes de dépôts.
    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"
      }
    }
    

    Remplacez les éléments suivants :

    • REPOSITORY_GROUP : nom du groupe de dépôts, tel que default.
    • REPOSITORY_RESOURCE_NAME : nom du dépôt dans la connexion Developer Connect. Pour trouver le nom du dépôt, accédez à la page Dépôts Git dans la console Google Cloud. Ensuite, dans l'onglet Dépôts, recherchez l'ID de connexion sous la colonne Connexion du tableau. Pour copier le nom de la ressource, cliquez sur le menu more_vert pour afficher plus d'options, puis sélectionnez Copier le chemin d'accès à la ressource.
    • BRANCH_NAMES : nom des branches que vous souhaitez indexer, par exemple main|dev.

    Vous pouvez également créer un groupe de dépôts avec des dépôts définis dans un fichier JSON (ou YAML), au format suivant :

    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
    

    Pour créer un groupe de dépôts à partir d'un fichier JSON ou YAML, dans un environnement de shell, utilisez la commande 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
    

    Si vous préférez, vous pouvez chiffrer et contrôler vos données avec une clé de chiffrement gérée par le client (CMEK) via Cloud Key Management Service. Pour en savoir plus sur l'utilisation d'une CMEK, consultez Chiffrer les données avec des clés de chiffrement gérées par le client.

  4. Attribuez des rôles IAM au groupe de dépôts dans un projet.

    Vous ne recevez que des suggestions provenant de dépôts figurant dans l'index. Chaque dépôt appartient à un ou plusieurs groupes de dépôts. Pour accéder aux suggestions, vous devez attribuer le rôle IAM Utilisateur des groupes de dépôts Cloud AI Companion (roles/cloudaicompanion.repositoryGroupsUser), qui contient l'autorisation IAM cloudaicompanion.repositoryGroups.user requise, au groupe de dépôts de l'une des manières suivantes :

    • Accordez aux comptes principaux l'autorisation d'accéder à l'intégralité de l'index.
    • Accordez aux comptes principaux l'accès à un sous-ensemble de l'index.

    Index complet

    1. Pour associer une stratégie IAM à un projet, dans un environnement de shell, utilisez la commande projects add-iam-policy-binding :

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

      Remplacez les éléments suivants :

      • PRINCIPAL : adresse e-mail du compte principal ayant besoin d'un accès (par exemple, user:test-user@gmail.com pour un utilisateur individuel ou group:admins@example.com pour un groupe).

        Pour en savoir plus, consultez les sections sur gcloud projects set-iam-policy

    2. Lorsque vous êtes invité à spécifier une condition, saisissez None.

    Sous-ensemble de l'index

    Vous pouvez créer plusieurs groupes de dépôts et attribuer des rôles IAM à différents comptes principaux 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
        ]
      }
    

    Vous pouvez également créer une liaison :

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

    Remplacez les éléments suivants :

    • GROUP_NAME : nom du groupe de dépôts que vous avez créé lors d'une étape précédente pour contrôler l'accès à votre index à l'aide de groupes de dépôts.

Vérifier l'état de l'indexation

Selon le nombre de dépôts que vous souhaitez indexer et leur taille, l'indexation du contenu peut prendre jusqu'à 24 heures. Pour les dépôts volumineux, l'indexation peut être plus longue. L'indexation a lieu une fois toutes les 24 heures et prend en compte toutes les modifications apportées au dépôt.

  1. Recherchez les journaux indexing. Pour en savoir plus, consultez la page Langage de requête Logging.

    Console

    1. Dans la console Google API, accédez à l'explorateur de journaux.

      Accéder à l'explorateur de journaux

    2. Utilisez le filtre "Noms de journaux" pour afficher les journaux indexing.

    CLI

    Pour rechercher les journaux d'indexation, dans un environnement de shell, utilisez la commande logging read :

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

    Remplacez PROJECT_ID par l'ID du projet dans lequel se trouve le groupe de dépôts.

    Par exemple, pour afficher les erreurs dans les journaux indexing, exécutez la commande suivante :

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. Examinez les états d'indexation associés, dont les suivants :

    • Début de l'indexation du dépôt (par exemple, Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.)
    • Fin de l'indexation d'un dépôt individuel, par exemple :
      • Opération réussie : Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • Échec : Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • Fin de l'indexation du dépôt, par exemple :
      • Opération réussie : Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • Échec : 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.

    Dans les états d'index, REPOSITORY_NAME correspond au dépôt que vous souhaitez examiner.

  3. Examinez les erreurs d'indexation associées, dont les suivantes :

    • Échec de la récupération du dépôt
    • Échec de la création de la liste des fichiers du dépôt
    • Échec de la récupération des informations du dépôt à partir de l'index
    • Échec de la récupération des fichiers à partir de l'index
    • Erreur interne

Utiliser la personnalisation du code

Une fois la personnalisation du code configurée, vous commencerez à voir des suggestions de complétion et de génération de code. Elles peuvent être basées sur du code privé que vous avez indexé, en plus des résultats issus de la visibilité globale du codebase.

Pour en savoir plus sur la personnalisation du code et connaître les bonnes pratiques, consultez Utiliser la personnalisation du code.

Désactiver la personnalisation du code

Sélectionnez l'une des options suivantes :

Console

  1. Dans la console d'API, accédez à la page Produits Gemini.

    Accéder aux produits Gemini

    La page Produits Gemini se charge.

  2. Dans le menu de navigation, cliquez sur Personnalisation du code.

    La page Personnalisation du code se charge.

  3. Pour supprimer l'index, cliquez sur Supprimer l'index.

    Un message d'avertissement s'affiche. Si vous souhaitez continuer et supprimer l'index, saisissez son nom, puis cliquez sur Supprimer.

CLI

  1. Pour lister tous les groupes de dépôts de l'index actuel, dans un environnement de shell, utilisez la commande 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
    

    Remplacez les éléments suivants :

    • REGION : région configurée dans Developer Connect de votre projet Cloud. Notez que les commandes échoueront si vous spécifiez une région non compatible. Pour obtenir la liste des régions disponibles, consultez les limites de la personnalisation du code.
    • PROJECT_ID : ID de votre projet Google Cloud.
    • INDEX_NAME : nom de l'index que vous avez créé lors d'une étape précédente (créer un index).
  2. Pour supprimer un groupe de dépôts de l'index actuel, utilisez la commande 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. Répétez les étapes précédentes pour chaque groupe de dépôts jusqu'à ce que vous ayez supprimé tous les groupes de dépôts de l'index.

  4. Facultatif : Pour supprimer l'index, dans un environnement de shell, utilisez la commande gemini code-repository-indexes delete :

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

Étapes suivantes