1. Avant de commencer
Cet atelier de programmation explique comment préparer Gemini Code Assist pour qu'il fournisse des suggestions de personnalisation du code adaptées à vos dépôts privés. Cela peut rendre les résultats de l'assistance de code beaucoup plus utiles, en particulier pour les équipes qui ont des conventions spécifiques pour des tâches similaires qui sont souvent répétées. Sachez que si vous autorisez Gemini à indexer vos codebases privés pour cette fonctionnalité, il ne pourra pas s'entraîner de manière globale sur votre code privé.
Nous verrons également comment exclure les fichiers sensibles ou non pertinents de la personnalisation du code à l'aide d'un fichier .aiexclude
.
Prérequis
- Avoir des connaissances de base sur Gemini Code Assist et avoir accès à un projet dans lequel il est activé
- Maîtrise d'un langage de programmation compatible pour la personnalisation du code
- Possibilité de créer des ressources dans
us-central1
oueurope-west1
, car la personnalisation du code nécessite des connexions Developer Connect dans ces emplacements. - Une Google Cloud CLI à jour et authentifiée
Objectifs
- Utiliser la personnalisation du code dans Gemini Code Assist Enterprise
- Voici un exemple parmi de nombreux cas d'utilisation où la personnalisation du code peut faire gagner du temps à vos équipes.
Ce dont vous avez besoin
- Projet Google Cloud avec Gemini Code Assist activé
- Un dépôt privé à indexer pour les demandes de personnalisation
- Il est temps d'indexer le code pour les demandes de personnalisation. Cette opération peut prendre jusqu'à 24 heures
- Un IDE sur lequel Gemini Code Assist est installé
2. Contexte
Pour tester la personnalisation du code, deux éléments sont nécessaires:
- Accès à un projet Google Cloud avec Gemini activé
- et un dépôt privé pour alimenter les réponses de Gemini.
Les meilleurs dépôts candidats à l'indexation par Gemini contiennent du code qui est souvent réutilisé dans l'ensemble de votre organisation. L'exemple de dépôt fourni pour cet atelier de programmation contient un service Web Spring Boot standard, avec un dossier d'objets de transfert de données répondant à ces critères, car une classe similaire serait créée pour décrire chaque entité d'une base de données lorsqu'elle est transportée vers la couche présentation.
3. (Facultatif) Configuration du dépôt
Si vous préférez utiliser un exemple de dépôt plutôt que votre propre dépôt privé, vous pouvez suivre les étapes ci-dessous sur l'éditeur de terminal de votre choix ou sur Cloud Shell. Commencez par créer un dépôt privé pour nous aider à voir la personnalisation du code en action:
mkdir customization-starter
cd customization-starter
curl https://start.spring.io/starter.zip -d dependencies=web,lombok \
-d javaVersion=21 \
-d type=maven-project \
-d bootVersion=3.3.4 -o cc-starter.zip
unzip cc-starter.zip
rm cc-starter.zip
pushd src/main/java/com/example/demo
mkdir dtos
touch dtos/LedgerDTO.java
Ajoutez ce qui suit dans le fichier LedgerDTO:
package com.example.demo.dtos;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@Getter
@Setter
@Accessors(chain = true)
public class LedgerEntryDto {
private Long id;
private String accountName;
private double amount;
private String transactionType;
private String description;
private java.util.Date transactionDate;
}
Cela permettra de démontrer que les accesseurs que les autres contributeurs de ce codebase s'attendent à utiliser seront générés avec précision lorsque la personnalisation du code est activée.
Créez un dépôt en veillant à le laisser privé. Suivez les étapes ci-dessous pour transférer le déclencheur vers votre nouveau dépôt:
popd
gh auth login
git init
git add .
git commit -m "code customization starter"
git remote add origin git@github.com:<YOUR_GITHUB_ID>/customization-starter.git
git branch -M main
git push -u origin main
4. Exclure des fichiers
Avant d'accorder à Gemini l'accès à vos dépôts privés, vous devez savoir comment exclure les fichiers non pertinents ou sensibles que votre équipe ne souhaite pas indexer. Pour ce faire, un fichier .aiexclude
est utilisé, qui est semblable à un .gitignore
, mais avec quelques différences importantes:
- Un fichier
.aiexclude
vide bloque tous les fichiers de son répertoire et de ses sous-répertoires.- C'est la même chose qu'un fichier contenant
**/*
.
- C'est la même chose qu'un fichier contenant
- Les fichiers
.aiexclude
ne sont pas compatibles avec la négation (préfixe les modèles avec!
).
Gardez cela à l'esprit, et essayez de réfléchir aux types de fichiers ou de répertoires que votre équipe souhaite exclure, puis de les lister sur des lignes distinctes:
#Block all files with .key extensions
*.key
#Block all files under sensitive/dir
my/sensitive/dir/
#Block all .key files under sensitive/dir
my/sensitive/dir/ /.key
5. Configurer Developer Connect
Developer Connect est le service qui facilite les connexions et les associations à vos dépôts de code privés dans GitHub ou GitLab. Ce mécanisme permet à Gemini Code Assist de se connecter de manière sécurisée à vos dépôts privés afin de créer l'index qui servira à améliorer les réponses.
Ces deux concepts vous aident à comprendre comment Developer Connect fournit un accès sécurisé à votre code:
Connexion
- représente la passerelle entre Google et la plate-forme de gestion de code source tierce.
Lien
- Représente l'association à un dépôt de code source individuel que vous sélectionnez dans une plate-forme de gestion du code source connectée.
Avec ces concepts à l'esprit, commencez par accéder à la page Developer Connect pour activer l'API pour votre projet.
Suivez ensuite la procédure appropriée pour créer une connexion et un lien pour GitHub ou GitLab. Les deux ressources seront créées pendant le processus de l'assistant.
Répétez ces étapes pour créer un lien pour chaque dépôt que vous souhaitez que la fonctionnalité de personnalisation du code de Gemini prenne en compte dans ses réponses. Vous pouvez réutiliser la connexion existante si plusieurs dépôts proviennent de la même plate-forme.
6. Créer et se connecter à un index
Pour analyser et interpréter rapidement vos dépôts, la personnalisation du code repose sur un index. Notez le nom d'index que vous utilisez, car vous en aurez besoin dans l'étape suivante.
Pour créer un indice, exécutez la commande suivante:
gcloud gemini code-repository-indexes create <INDEX_NAME> \
--project=<YOUR_PROJECT_ID> \
--location=<REGION>
Si vous rencontrez des erreurs Invalid choice: ...
, assurez-vous que votre Google Cloud CLI est à jour en exécutant la commande suivante:
gcloud components update
Autorisez ensuite l'accès à votre index en créant un groupe de dépôts:
gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
--project=PROJECT_ID \
--location=REGION \
--code-repository-index=INDEX_NAME \
--repositories='[{"resource": "projects/PROJECT_ID/locations/REGION/connections/INDEX_CONNECTION/gitRepositoryLinks/REPOSITORY", "branch_pattern": "BRANCH_NAMES"}]'
En remplaçant les valeurs suivantes:
- REPOSITORY_GROUP: nom du groupe de dépôts que vous êtes sur le point de créer
- PROJECT_ID: ID de votre projet Google Cloud.
- INDEX_NAME: nom de l'index que vous avez défini à l'étape précédente pour créer un index.
- REGION: région prise en charge de la liste de la documentation que vous avez configurée dans Developer Connect dans votre projet Google Cloud.
- INDEX_CONNECTION: connexion de l'index que vous avez créé à l'étape précédente pour créer un index.
- REPOSITORY: dépôt que vous souhaitez indexer. Vous devez spécifier au moins un dépôt, et vous pouvez en spécifier plusieurs si nécessaire.
- BRANCH_NAMES: nom des branches que vous souhaitez indexer, par exemple "main" ou "dev".
L'indexation des contenus peut prendre jusqu'à 24 heures, selon le nombre de dépôts que vous souhaitez indexer et leur taille. L'indexation a lieu toutes les 24 heures, en reprenant toutes les modifications apportées dans le dépôt. Pour vérifier l'état de la génération de votre index, suivez ces étapes:
Enfin, accordez l'accès au groupe au principal souhaité:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/cloudaicompanion.repositoryGroupsUser'
7. Générer du code personnalisé
Maintenant que Gemini a accès au code de votre dépôt privé, nous pouvons nous attendre à voir des extraits pertinents apparaître dans nos demandes de saisie de code. Dans notre exemple de dépôt, nous pouvons accéder à notre dossier DTO. Lorsque nous créons une classe pour représenter un nouvel objet, les annotations attendues s'affichent à mesure que nous saisissons du texte:
8. Conclusion
Félicitations ! Vous avez terminé cet atelier de programmation. Vous avez appris à utiliser la fonctionnalité de personnalisation du code de Gemini Code Assist. Maintenant que vos réponses peuvent être adaptées aux codebases privés et spécifiques de vos équipes, chaque requête et achèvement de code sera plus intéressant pour les développeurs de vos équipes.
N'hésitez pas à consulter ces autres documents et ressources pour en savoir plus et obtenir de l'aide, par exemple pour configurer des rôles IAM: