Codeanpassung mit Gemini Code Assist Enterprise

1. Hinweis

In diesem Codelab erfahren Sie, wie Sie Gemini Code Assist so vorbereiten, dass er Vorschläge zur Codeanpassung macht, die auf Ihre privaten Repositories zugeschnitten sind. Dies kann die Ergebnisse von Code Assist deutlich nützlicher machen, insbesondere für Teams, die bestimmte Konventionen für ähnliche Arbeiten haben, die sich oft wiederholen. Wenn Sie Gemini erlauben, Ihre privaten Codebases für diese Funktion zu indexieren, kann Gemini Ihren privaten Code nicht allgemein trainieren.

Außerdem erfahren Sie, wie Sie vertrauliche oder irrelevante Dateien mit einer .aiexclude-Datei von der Codeanpassung ausschließen.

Vorbereitung

  • Grundlegende Kenntnisse von Gemini Code Assist und Zugriff auf ein Projekt, in dem Gemini Code Assist aktiviert ist
  • Kenntnisse in einer unterstützten Programmiersprache für die Codeanpassung
  • Möglichkeit, Ressourcen in us-central1 oder europe-west1 zu erstellen, da für die Codeanpassung Developer Connect-Verbindungen an diesen Standorten erforderlich sind.
  • Eine aktuelle, authentifizierte Google Cloud CLI

Lerninhalte

  • Codeanpassung in Gemini Code Assist Enterprise verwenden
  • Einer von vielen Anwendungsfällen, in denen die Codeanpassung Ihren Teams Zeit sparen kann

Voraussetzungen

  • Ein Google Cloud-Projekt, das Gemini Code Assist aktiviert hat
  • Ein privates Repository, das für Anpassungsanfragen indexiert werden soll
  • Zeit, den Code für Anpassungsanfragen zu indexieren. Das kann bis zu 24 Stunden dauern.
  • Eine IDE mit installiertem Gemini Code Assist

2. Kontext

Für die Codeanpassung sind zwei Dinge erforderlich:

  1. Zugriff auf ein Google Cloud-Projekt, in dem Gemini aktiviert ist
  2. und ein privates Repository, um die Antworten von Gemini zu informieren.

Gemini aktivieren

Die am besten geeigneten Repositories für die Indexierung von Gemini enthalten Code, der oft in Ihrer gesamten Organisation wiederverwendet wird. Das für dieses Codelab bereitgestellte Beispiel-Repository enthält einen standardmäßigen Spring Boot-Webdienst mit einem Ordner mit Data Transfer Objects, die diese Kriterien erfüllen. Eine ähnliche Klasse würde erstellt, um jedes Entitätsobjekt in einer Datenbank zu beschreiben, während es zur Präsentationsschicht übertragen wird.

3. Optional: Repository-Einrichtung

Wenn Sie lieber ein Beispiel-Repository als eines Ihrer eigenen privaten Repositories verwenden möchten, können Sie die folgenden Schritte in Ihrem bevorzugten Terminal-Editor oder in Cloud Shell ausführen. Erstellen Sie zuerst ein privates Repository, damit wir die Codeanpassung in Aktion sehen können:

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

Fügen Sie der Datei „LedgerDTO“ Folgendes hinzu:

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;
}

Das reicht aus, um zu zeigen, dass die Zugriffsmethoden, die andere Mitbearbeiter dieser Codebasis voraussichtlich verwenden würden, korrekt generiert werden, wenn die Codeanpassung aktiviert ist.

Erstellen Sie ein neues Repository und achten Sie darauf, dass es privat bleibt. Führen Sie die folgenden Schritte aus, um den Auslöser in Ihr neues Repository zu pushen:

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. Dateien ausschließen

Bevor Sie Gemini Zugriff auf Ihre privaten Repositories gewähren, sollten Sie wissen, wie Sie irrelevante oder vertrauliche Dateien ausschließen, die nicht indexiert werden sollen. Dazu wird eine .aiexclude-Datei verwendet, die einer .gitignore-Datei ähnelt, aber einige wichtige Unterschiede aufweist:

  • Eine leere .aiexclude-Datei blockiert alle Dateien in ihrem Verzeichnis und allen Unterverzeichnissen.
    • Dies entspricht einer Datei, die **/* enthält.
  • In .aiexclude-Dateien wird die Negierung nicht unterstützt (das Präfixieren von Mustern mit !).

Überlegen Sie sich daher, welche Dateitypen oder Verzeichnisse Ihr Team ausschließen möchte, und listen Sie sie jeweils auf separaten Zeilen auf:

#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. Developer Connect konfigurieren

Developer Connect ist der Dienst, mit dem Sie Verbindungen und Links zu Ihren privaten Code-Repositories in GitHub oder GitLab herstellen können. Über diesen Mechanismus kann Gemini Code Assist eine sichere Verbindung zu Ihren privaten Repositories herstellen, um den Index zu erstellen, der zur Verbesserung der Antworten verwendet wird.

Diese beiden Konzepte sind hilfreich, um zu verstehen, wie Developer Connect den sicheren Zugriff auf Ihren Code ermöglicht:

Verbindung

  • Stellt die Brücke zwischen Google und der externen Plattform für die Verwaltung von Quellcode dar.

Link

  • Stellt die Verknüpfung mit einem einzelnen Quellcode-Repository dar, das Sie in einer verbundenen Plattform zur Verwaltung von Quellcode auswählen.

Rufen Sie als Erstes die Seite Developer Connect auf, um die API für Ihr Projekt zu aktivieren.

Developer Connect aktivieren

Folgen Sie dann der entsprechenden Anleitung, um eine Verbindung und einen Link für GitHub oder GitLab zu erstellen. Beide Ressourcen werden während des Assistenten erstellt.

Verbindung und Link erstellen

Wiederholen Sie diese Schritte, um einen Link für jedes Repository zu erstellen, das die Codeanpassungsfunktion von Gemini in seinen Antworten berücksichtigen soll. Sie können die vorhandene Verbindung wiederverwenden, wenn mehrere Repositories von derselben Plattform stammen.

6. Index erstellen und mit Index verbinden

Damit Ihre Repositories schnell geparst und analysiert werden können, basiert die Codeanpassung auf einem Index. Notieren Sie sich den verwendeten INDEX_NAME, da Sie ihn in einem nachfolgenden Schritt benötigen.

Führen Sie den folgenden Befehl aus, um einen Index zu erstellen:

gcloud gemini code-repository-indexes create <INDEX_NAME> \
    --project=<YOUR_PROJECT_ID> \
    --location=<REGION>

Wenn Invalid choice: ...-Fehler auftreten, prüfen Sie, ob Ihre Google Cloud CLI auf dem neuesten Stand ist. Führen Sie dazu den folgenden Befehl aus:

gcloud components update

Gewähren Sie als Nächstes Zugriff auf Ihren Index, indem Sie eine Repository-Gruppe erstellen:

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

Ersetzen Sie die folgenden Werte:

  • REPOSITORY_GROUP: der Name der zu erstellenden Repositorygruppe
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • INDEX_NAME: Name des Index, den Sie in einem vorherigen Schritt zum Erstellen eines Index definiert haben.
  • REGION: Eine unterstützte Region aus der Liste in der Dokumentation, die Sie in Developer Connect in Ihrem Google Cloud-Projekt konfiguriert haben.
  • INDEX_CONNECTION: Verbindung des Index, den Sie in einem vorherigen Schritt erstellt haben, um einen Index zu erstellen.
  • REPOSITORY: das Repository, das Sie indexieren möchten. Sie müssen mindestens ein Repository angeben. Bei Bedarf können Sie mehrere Repositories angeben.
  • BRANCH_NAMES: Name der Branches, die indexiert werden sollen, z. B. „main“ oder „dev“.

Je nach Anzahl und Größe der Repositories, die Sie indexieren möchten, kann die Indexierung von Inhalten bis zu 24 Stunden dauern. Die Indexierung erfolgt einmal alle 24 Stunden und berücksichtigt alle Änderungen, die im Repository vorgenommen wurden. So können Sie den Status der Indexerstellung prüfen: Folgen Sie dazu dieser Anleitung.

Indexierungsstatus suchen

Gewähren Sie abschließend dem gewünschten Hauptkonto Zugriff auf die Gruppe:

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

7. Benutzerdefinierten Code generieren

Da Gemini jetzt Zugriff auf den Code in Ihrem privaten Repository hat, sollten in unseren Codevervollständigungsanfragen relevante Snippets angezeigt werden. In unserem Beispiel-Repository können wir zu unserem DTO-Ordner navigieren. Wenn wir eine neue Klasse zur Darstellung eines neuen Objekts erstellen, können Sie die erwarteten Annotationen sehen, während wir tippen:

Generiertes Beispiel

8. Fazit

Herzlichen Glückwunsch zum Abschluss dieses Codelabs. Sie haben gelernt, wie Sie die Funktion Codeanpassung von Gemini Code Assist verwenden. Da Ihre Antworten jetzt auf die spezifischen, privaten Codebases Ihres Teams zugeschnitten werden können, sind die Prompts und der Code-Completion für die Entwickler in Ihrem Team noch wertvoller.

In den folgenden Dokumenten und Materialien finden Sie weitere Informationen und Unterstützung bei Aufgaben wie dem Einrichten von IAM-Rollen: