Codeüberprüfung mit GenAI automatisieren

1. Übersicht

In diesem Lab richten Sie die CICD-Pipeline ein und integrieren Gemini, um Code-Review-Schritte zu automatisieren.

9dde56ad139b9553.png

Lerninhalte

In diesem Lab lernen Sie Folgendes:

  • Automatisierungsschritte für die GenAI-Codeüberprüfung in GitHub, GitLab und CircleCI hinzufügen
  • LangChain ReAct-Agents und Toolkits verwenden, um Aufgaben wie das Kommentieren von GitLab-Problemen und das Öffnen von JIRA-Tickets zu automatisieren

Vorbereitung

  • Für dieses Lab wird davon ausgegangen, dass Sie mit der Cloud Console und mit Cloud Shell-Umgebungen vertraut sind.

2. Einrichtung und Anforderungen

Cloud-Projekt einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.

Umgebung einrichten

Öffnen Sie den Gemini-Chat.

bc3c899ac8bcf488.png

Oder geben Sie „Gemini fragen“ in die Suchleiste ein.

e1e9ad314691368a.png

Aktivieren Sie die Cloud AI Companion API:

66cb6e561e384bbf.png

Klicken Sie auf „Start chatting“ und folgen Sie einer der Beispielanfragen oder geben Sie einen eigenen Prompt ein, um die Funktion auszuprobieren.

5482c153eef23126.png

Probiere folgende Prompts aus:

  • Erkläre Cloud Run in fünf wichtigen Punkten.
  • Du bist Google Cloud Run Product Manager. Erkläre einem Studenten Cloud Run in fünf kurzen Stichpunkten.
  • Du bist Google Cloud Run Product Manager. Erkläre einem zertifizierten Kubernetes-Entwickler Cloud Run in fünf kurzen Stichpunkten.
  • Du bist Google Cloud Run Product Manager. Erkläre einem Senior Developer in fünf kurzen Stichpunkten, wann du Cloud Run und wann GKE verwenden würdest.

Weitere Informationen zum Schreiben besserer Prompts finden Sie im Leitfaden für Prompts.

Verwendung Ihrer Daten durch Gemini for Google Cloud

Datenschutzverpflichtung von Google

Google war einer der ersten Anbieter in der Branche, der eine KI-/ML-Datenschutzverpflichtung veröffentlicht hat. Diese legt fest, dass Kunden die höchste Sicherheit und Kontrolle über ihre Daten haben sollten, die in der Cloud gespeichert werden.

Daten, die Sie senden und empfangen

Die Fragen, die Sie Gemini stellen, einschließlich aller eingegebenen Informationen oder des Codes, den Sie zur Analyse oder Vervollständigung an Gemini senden, werden als Prompts bezeichnet. Die Antworten oder Codevorschläge, die Sie von Gemini erhalten, werden als Antworten bezeichnet. Gemini verwendet Ihre Prompts und seine Antworten nicht als Daten zum Trainieren seiner Modelle.

Verschlüsselung von Prompts

Wenn Sie Prompts an Gemini senden, werden Ihre Daten während der Übertragung verschlüsselt und als Eingabe für das zugrunde liegende Modell in Gemini verwendet.

Von Gemini generierte Programmdaten

Gemini wurde mit eigenem Google Cloud-Code sowie mit ausgewähltem Drittanbieter-Code trainiert. Sie sind für die Sicherheit, das Testen und die Funktionsfähigkeit Ihres Codes verantwortlich, einschließlich aller Vervollständigungen, Generierungen oder Analysen von Code, die Gemini Ihnen bereitstellt.

Weitere Informationen

3. Optionen zum Testen von Prompts

Wenn Sie vorhandene devai-CLI-Prompts ändern oder erweitern möchten, haben Sie dazu mehrere Möglichkeiten.

Vertex AI Studio ist Teil der Vertex AI-Plattform von Google Cloud und wurde speziell entwickelt, um die Entwicklung und Verwendung generativer KI-Modelle zu vereinfachen und zu beschleunigen.

Google AI Studio ist ein webbasiertes Tool zum Erstellen von Prototypen und Experimentieren mit Prompt-Engineering und der Gemini API. Registrieren Sie sich für Gemini 1.5 Pro mit einem Kontextfenster von 1 Million Tokens oder erfahren Sie mehr.

Die Google Gemini Web-App (gemini.google.com) ist ein webbasiertes Tool, mit dem Sie die Leistungsfähigkeit der Gemini-KI-Modelle von Google erkunden und nutzen können.

4. Dienstkonto erstellen

Aktivieren Sie Cloud Shell, indem Sie rechts neben der Suchleiste auf das Symbol klicken.

3e0c761ca41f315e.png

Aktivieren Sie im geöffneten Terminal die erforderlichen Dienste, um Vertex AI APIs und Gemini Chat zu verwenden.

gcloud services enable \
    aiplatform.googleapis.com \
    cloudaicompanion.googleapis.com \
    cloudresourcemanager.googleapis.com \
    secretmanager.googleapis.com

Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf „Autorisieren“, um fortzufahren.

6356559df3eccdda.png

Führen Sie die folgenden Befehle aus, um ein neues Dienstkonto und neue Schlüssel zu erstellen.

Mit diesem Dienstkonto führen Sie API-Aufrufe an die Vertex AI Gemini API aus CICD-Pipelines aus.

PROJECT_ID=$(gcloud config get-value project)
SERVICE_ACCOUNT_NAME='vertex-client'
DISPLAY_NAME='Vertex Client'
KEY_FILE_NAME='vertex-client-key'

gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --display-name "$DISPLAY_NAME"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/aiplatform.admin" --condition None

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" --condition None

gcloud iam service-accounts keys create $KEY_FILE_NAME.json --iam-account=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

5. GitHub-Repository in Ihr persönliches GitHub-Repository forken

Rufen Sie https://github.com/GoogleCloudPlatform/genai-for-developers/fork auf und wählen Sie Ihre GitHub-Nutzer-ID als Inhaber aus.

Entfernen Sie das Häkchen, um nicht nur den „main“-Branch zu kopieren.

Klicken Sie auf "Create fork".

6. GitHub Actions-Workflows aktivieren

Öffnen Sie das geforkte GitHub-Repository im Browser und wechseln Sie zum Tab „Actions“, um Workflows zu aktivieren.

1cd04db9b37af7cf.png

7. Repository-Secrets hinzufügen

Erstellen Sie im verzweigten GitHub-Repository unter „Settings / Secrets and variables / Actions“ ein Repository-Secret.

Fügen Sie das Repository-Secret mit dem Namen „GOOGLE_API_CREDENTIALS“ hinzu.

94cbe2778bef25eb.png

Wechseln Sie zum Google Cloud Shell-Fenster oder -Tab und führen Sie den folgenden Befehl im Cloud Shell-Terminal aus.

cat ~/vertex-client-key.json

Kopieren Sie den Dateiinhalt und fügen Sie ihn als Wert für das Secret ein.

915579a97f8f2ced.png

Fügen Sie das Secret PROJECT_ID mit Ihrer Qwiklabs-Projekt-ID als Wert hinzu. 4fa92833ce615a36.png

8. GitHub Actions-Workflow ausführen

Rufen Sie Ihr GitHub-Repository im Browser auf und führen Sie den Workflow aus.

Der Workflow ist so konfiguriert, dass er bei einem Code-Push oder einer manuellen Ausführung ausgeführt wird.

Wählen Sie unter „Alle Arbeitsabläufe“ die Option „GenAI For Developers“ aus und klicken Sie im Zweig „main“ auf „Run workflow“.

da11273b4b54f7b6.png

Ergebnisse ansehen:

cf49aa41980aacc5.png

Ergebnisse des Befehls zur Testabdeckung:

devai review testcoverage -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

3b21bd4639524763.png

Ergebnisse des Befehls zur Codeüberprüfung:

devai review code -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

4876dbc2e0042943.png

Ergebnisse des Befehls zur Leistungsüberprüfung:

devai review performance -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

98dd2472b2e819bf.png

Ergebnisse des Befehls für die Sicherheitsüberprüfung:

devai review security -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

7d180a763db92d56.png

Ergebnisse des Befehls „Blockers review“:

devai review blockers -c ${{ github.workspace }}/sample-app/pom.xml

726175e874aefcf.png

9. Repository klonen

Kehren Sie zum Cloud Shell-Terminal zurück und klonen Sie das Repository.

Erstellen Sie einen Ordner für das GitHub-Repository.

mkdir github
cd github

Ersetzen Sie YOUR-GITHUB-USERID durch Ihre GitHub-Nutzer-ID, bevor Sie die Befehle ausführen.

Legen Sie den Git-Nutzernamen und die E-Mail-Adresse im Terminal fest.

Aktualisieren Sie die Werte, bevor Sie die Befehle ausführen.

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
git clone https://github.com/YOUR-GITHUB-USERID/genai-for-developers.git 

Wechseln Sie den Ordner und öffnen Sie die Workflow-Datei im Cloud Shell-Editor.

cd genai-for-developers

cloudshell edit .github/workflows/devai-review.yml 

Warten Sie, bis die Konfigurationsdatei in der IDE angezeigt wird.

9e81e5a79d421eac.png

10. Gemini Code Assist aktivieren

Klicken Sie rechts unten auf das Symbol Gemini 7c891e32c055c0e4.png.

Klicken Sie auf „Login to Google Cloud“ und „Select a Google Cloud Project“.

f5318f22c91ecaa8.png

6b7203ffdd8485fa.png

fb8d42a6bc8a260f.png

Wählen Sie im Pop-up-Fenster Ihr Qwiklabs-Projekt aus.

f661047956a6d6f9.png

11. Code mit Gemini Code Assist erklären

Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle in der Datei devai-review.yml und wählen Sie Gemini Code Assist > Explain aus.

41fb7da002bdf43.png

Erklärung zur Überprüfung:

7724d52e54918c00.png

12. DEVAI CLI lokal ausführen

Kehren Sie zum Cloud Shell-Editor zurück und öffnen Sie ein neues Terminal.

149218baaf30865f.png

Kehren Sie zum Cloud Shell-Terminal zurück und führen Sie die folgenden Befehle aus, um devai lokal zu installieren.

pip3 install devai-cli

Die Befehlszeile wurde installiert, befindet sich aber nicht im PATH.

WARNING: The script devai is installed in '/home/student_00_478dfeb8df15/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

Führen Sie den folgenden Befehl aus, um die Umgebungsvariable PATH zu aktualisieren. Ersetzen Sie dies durch den Namen des Home-Ordners des Nutzers. Beispiel: student_00_478dfeb8df15

export PATH=$PATH:/home/YOUR-USER-HOME-FOLDER/.local/bin

Führen Sie den devai-Befehlszeilenbefehl aus, um eine Codeüberprüfung lokal durchzuführen. Prüfen Sie die CLI-Ausgabe.

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

cd ~/github/genai-for-developers

devai review code -c ./sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Öffnen Sie das Überprüfungsskript mit dem folgenden Befehl:

cloudshell edit devai-cli/src/devai/commands/review.py

Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle in der Datei review.py und wählen Sie Gemini Code Assist > Explain aus.

Erklärung ansehen

30e3baf4c272c8ab.png

13. DevAI CLI-Entwicklung

In diesem Abschnitt nehmen Sie Änderungen an der devai-Befehlszeile vor.

Richten Sie zuerst eine virtuelle Python-Umgebung ein, installieren Sie die Anforderungen und führen Sie den Beispielbefehl aus.

cd ~/github/genai-for-developers/devai-cli
python3 -m venv venv
. venv/bin/activate
pip3 install -r src/requirements.txt
pip3 install --editable ./src
devai echo

Führen Sie den Befehl zum Überprüfen der Testabdeckung aus, um zu prüfen, ob alles ordnungsgemäß funktioniert:

devai review testcoverage -c ~/github/genai-for-developers/sample-app/src

Ergebnisse mit der Markdown-Vorschau im Cloud Shell-Editor ansehen

Erstellen Sie eine neue Datei und fügen Sie die Antwort von Gemini ein.

Verwenden Sie dann die Befehlspalette und wählen Sie „Markdown: Open Preview“ aus.

ec6fedf4b6d3fb73.png

9999e7fbb20cf251.png

76858be03d73abd0.png

14. devai-CLI-Befehle

Befehl für die Codeüberprüfung

devai review code -c ~/github/genai-for-developers/sample-app/src/main/java

Befehl für die Leistungsanalyse

devai review performance -c ~/github/genai-for-developers/sample-app/src/main/java

Befehl für Sicherheitsüberprüfung

devai review security -c ~/github/genai-for-developers/sample-app/src/main/java

Befehl zur Überprüfung der Testabdeckung

devai review testcoverage -c ~/github/genai-for-developers/sample-app/src

Befehle zur Überprüfung von Blockern

devai review blockers -c ~/github/genai-for-developers/sample-app/pom.xml
devai review blockers -c ~/github/genai-for-developers/sample-app/setup.md

Überprüfung und Zusammenfassung von Bildern/Diagrammen:

Eingabediagramm[~/github/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

Befehl zum Überprüfen:

devai review image \
  -f ~/github/genai-for-developers/images/extension-diagram.png \
  -p "Review and summarize this diagram"

Ausgabe:

The diagram outlines a process for conducting local code reviews using a VS Code extension or CLI, leveraging Google Cloud's Vertex AI (Gemini Pro) for generating review prompts. 

**Process Flow:**

1. **Code Style Check:** Developers initiate the process by checking their code for adherence to pre-defined style guidelines.
2. **Prompt Generation:** The VS Code extension/CLI sends the code to Vertex AI (Gemini Pro) on Google Cloud. 
3. **Vertex AI Review:** Vertex AI analyzes the code and generates relevant review prompts.
4. **Local Review:** The prompts are sent back to the developer's IDE for their consideration.
5. **Optional Actions:** Developers can optionally: 
    - Create new JIRA issues directly from the IDE based on the review prompts.
    - Generate new issues in a GitLab repository.

**Key Components:**

* **VS Code Extension/CLI:** Tools facilitating the interaction with Vertex AI and potential integrations with JIRA and GitLab.
* **Vertex AI (Gemini Pro):** Google Cloud's generative AI service responsible for understanding the code and generating meaningful review prompts.
* **Google Cloud Secret Manager:** Securely stores API keys and access tokens required to authenticate and interact with Google Cloud services.
* **JIRA/GitLab (Optional):** Issue tracking and project management tools that can be integrated for a streamlined workflow.

**Benefits:**

* **Automated Review Assistance:** Leveraging AI to generate review prompts saves time and improves the consistency and quality of code reviews. 
* **Local Development:** The process empowers developers to conduct reviews locally within their familiar IDE.
* **Integration Options:** The flexibility to integrate with project management tools like JIRA and GitLab streamlines workflow and issue tracking.

Analyse der Bilddifferenz:

devai review imgdiff \
  -c ~/github/genai-for-developers/images/devai-api.png \
  -t ~/github/genai-for-developers/images/devai-api-slack.png

Ausgabe:

The following UI elements are missing in the "AFTER UPGRADE STATE" image compared to the "BEFORE UPGRADE STATE" image:

1. **Slack:** The entire Slack element, including the icon, "Team channel" label, and the arrow indicating interaction, is absent in the AFTER UPGRADE image. 
2. **Storage Bucket:** The "Storage Bucket" element with its icon and "PDFs" label is missing in the AFTER UPGRADE image. 
3. **"GenAI Agents" label in Vertex AI block:** The BEFORE UPGRADE image has "Vertex AI Agents" and "GenAI Agent" labels within the Vertex AI block, while the AFTER UPGRADE image only has "Vertex AI."
4. **"Open JIRA Issue" and "Team Project" labels:** In the BEFORE UPGRADE image, these labels are connected to the JIRA block with an arrow. These are missing in the AFTER UPGRADE image.

**Decision Explanation:**

The analysis is based on a direct visual comparison of the two provided images, noting the presence and absence of specific UI elements and their associated labels. The elements listed above are present in the BEFORE UPGRADE image but absent in the AFTER UPGRADE image.

Befehl zum Generieren der Dokumentation:

devai document readme -c ~/github/genai-for-developers/sample-app/src/main/

Ausgabe:

# Bank of Anthos - Balance Reader Service

## Table of Contents
- [Description](#description)
- [Features](#features)
- [Technologies Used](#technologies-used)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
- [Health Checks](#health-checks)
- [Metrics and Tracing](#metrics-and-tracing)
- [Contributing](#contributing)
- [License](#license)

## Description

The Balance Reader service is a component of the Bank of Anthos sample application. It provides a REST endpoint for retrieving the current balance of a user account. This service demonstrates key concepts for building microservices with Spring Boot and deploying them to a Kubernetes cluster.

## Features

- Securely retrieves account balances using JWT authentication.
- Leverages a local cache for fast balance retrieval.
- Asynchronously processes transactions from a central ledger.
- Provides health check endpoints for Kubernetes liveness and readiness probes.
- Exposes metrics to Stackdriver for monitoring and observability.
- Supports distributed tracing with Zipkin.

## Technologies Used

- Java
- Spring Boot
- Spring Data JPA
- Hibernate
- Google Cloud SQL (PostgreSQL)
- JWT (JSON Web Token)
- Guava Cache
- Micrometer
- Stackdriver
- Zipkin

## Installation

1. **Prerequisites:**
   - Java 17 or later
   - Maven 3.5 or later
   - Docker (for containerization)
   - Kubernetes cluster (for deployment)
   - Google Cloud account (for Stackdriver and other GCP services)

Sehen Sie sich die verfügbaren devai-CLI-Befehle im Cloud Shell-Editor an:

cloudshell edit ~/github/genai-for-developers/devai-cli/README.md

Oder sehen Sie sich die Datei README.md im GitHub-Repository an.

15. Alle Umgebungsvariablen in einer Datei im Blick behalten

Erstellen Sie eine neue Datei, um alle Umgebungsvariablen (z.B. API-Schlüssel, API-Tokens usw.) zu erfassen, die Sie erstellen werden.

Sie werden sie im Laufe des Labs mehrmals für verschiedene Systeme verwenden. Daher ist es einfacher, sie an einem Ort zu referenzieren.

16. LangSmith-Konfiguration für LLM-Tracing

Erstellen Sie ein LangSmith-Konto und generieren Sie im Bereich „Settings“ (Einstellungen) einen Service-API-Schlüssel. https://docs.smith.langchain.com/

Legen Sie die Umgebungsvariablen fest, die für die LangSmith-Integration erforderlich sind. Ersetzen Sie den Service-API-Schlüssel, bevor Sie die Befehle ausführen.

export LANGCHAIN_API_KEY=langsmith-service-api-key

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"

Um die Offenlegung vertraulicher Informationen im Terminal zu vermeiden, empfiehlt es sich, read -s zu verwenden. So können Umgebungsvariablen sicher festgelegt werden, ohne dass der Wert im Befehlsverlauf der Konsole angezeigt wird. Nachdem Sie das getan haben, müssen Sie den Wert einfügen und die Eingabetaste drücken.

17. JIRA-Befehl konfigurieren

Erstellen Sie ein JIRA-Konto, falls Sie noch keins haben.

Erstellen Sie ein JIRA-API-Token für Ihr Projekt. https://id.atlassian.com/manage-profile/security/api-tokens

Legen Sie diese Umgebungsvariablen fest, die für die JIRA-Integration erforderlich sind. Ersetzen Sie die Werte, bevor Sie die Befehle ausführen.

export JIRA_API_TOKEN=your-token-value
export JIRA_USERNAME="email that you used to register with JIRA"
export JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
export JIRA_PROJECT_KEY="JIRA project key"
export JIRA_CLOUD=true

review.py-Datei öffnen:

cloudshell edit ~/github/genai-for-developers/devai-cli/src/devai/commands/review.py

review.py-Datei prüfen:

    source=source.format(format_files_as_string(context))

    code_chat_model = GenerativeModel(model_name)
    code_chat = code_chat_model.start_chat()
    code_chat.send_message(qry)
    response = code_chat.send_message(source)
    ...
    else:
        click.echo(response.text) 

Suchen Sie die Zeile unter dieser und entfernen Sie die Kommentarzeichen:

# Uncomment after configuring JIRA and GitLab env variables - see README.md for details

JIRA-Befehl am Anfang der Datei importieren

# from devai.commands.jira import create_jira_issue

Methode zum Erstellen eines JIRA-Vorgangs in der Methode code

#create_jira_issue("Code Review Results", response.text)

Führen Sie den Befehl für die Codeüberprüfung noch einmal aus und prüfen Sie die Ausgabe des KI-Agenten:

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

devai review code -c ~/github/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Beispielausgabe:

(venv) student_00_19a997c157f8@cloudshell:~/genai-for-developers/devai-cli (qwiklabs-gcp-02-71a9948ae110)$ devai review code -c ../sample-app/src/main/java/anthos/samples/bankofanthos/balancereader
/home/student_00_19a997c157f8/genai-for-developers/devai-cli/venv/lib/python3.9/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: The function `initialize_agent` was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Use new agent constructor methods like create_react_agent, create_json_agent, create_structured_chat_agent, etc. instead.
  warn_deprecated(
Response from Model: ```java
// Class: TransactionRepository
// Method: findBalance

// Efficiency
- Consider using a native SQL query to improve performance for complex database operations.
- Use prepared statements to avoid SQL injection vulnerabilities.

// Best Practices
- Return a Optional<Long> instead of null to handle the case when no balance is found for the given account.

/home/student_00_19a997c157f8/genai-for-developers/devai-cli/venv/lib/python3.9/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: The function __call__ was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Verwenden Sie stattdessen „invoke“. warn_deprecated(

Neue AgentExecutor-Kette wird eingegeben… Gedanke: Die Beschreibung wird in der Frage angegeben, daher gibt es nichts zu überlegen. Aktion:

{
  "action": "create_issue",
  "action_input": {
    "description": "Class: TransactionRepository\nMethod: findBalance\n\nEfficiency\n- Consider using a native SQL query to improve performance for complex database operations.\n- Use prepared statements to avoid SQL injection vulnerabilities.\n\nBest Practices\n- Return a Optional<Long> instead of null to handle the case when no balance is found for the given account."
  }
}

Neues Problem mit dem Schlüssel CYMEATS-117 erstellt

Beobachtung: Neues Problem mit dem Schlüssel CYMEATS-117 erstellt. Gedanke:Final Answer: CYMEATS-117

Fertige Kette.

Open your JIRA project in the browser and review the created issue.

Sample JIRA issue view.

<img src="img/9a93a958c30f0b51.png" alt="9a93a958c30f0b51.png"  width="624.00" />

Open  [LangSmith portal](https://smith.langchain.com/) and review LLM trace for JIRA issue creation call.

Sample LangSmith LLM trace.

<img src="img/6222ee1653a5ea54.png" alt="6222ee1653a5ea54.png"  width="624.00" />


## Import GitHub repo to GitLab repo



Go to  [https://gitlab.com/projects/new](https://gitlab.com/projects/new) and select "`Import project`" / "`Repository by URL`" option:

Git repository url:

https://github.com/GoogleCloudPlatform/genai-for-developers.git

Or

Your personal GitHub project that you created earlier in this lab.

Under Project URL - select your GitLab userid

Set Visibility to `Public`.

Click - "`Create Project`" to start the import process.

If you see an error about invalid GitHub Repository URL,  [create a new GitHub token](https://github.com/settings/tokens)(fine-grained) with Public repositories read-only access, and retry import again providing your GitHub userid and token.


## Clone GitLab repo and setup SSH key



Return to Google Cloud Shell terminal and set up a new SSH key. 

Update your email before running the commands. Hit enter multiple times to accept defaults.

ssh-keygen -t ed25519 -C "your-email-address"

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

Add a public key to your GitLab account.

Open  [https://gitlab.com/-/profile/keys](https://gitlab.com/-/profile/keys) and click "Add new key".

For the key value copy/paste the output of the last command.

Go back to the terminal and clone the repository. 

cd ~ mkdir gitlab cd gitlab

Replace with your GitLab userid and repository url that was just created.

```console
git clone git@gitlab.com:YOUR_GITLAB_USERID/genai-for-developers.git

Wechseln Sie das Verzeichnis und öffnen Sie die Datei .gitlab-ci.yml.

cd genai-for-developers

cloudshell edit .gitlab-ci.yml

Aktivieren Sie Gemini im Cloud Shell Editor, falls noch nicht geschehen.

4a7f4640f66037f.png

Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle in der Datei .gitlab-ci.yml und wählen Sie „Gemini Code Assist > Explain this"“ aus.

154838a0100389a9.png

18. GitLab-Befehlskonfiguration

Öffnen Sie GitLab und erstellen Sie unter „Settings / Access Tokens“ im GitLab-Repository, das in den vorherigen Schritten erstellt wurde, ein Projektzugriffstoken.

Kopieren Sie den Wert des Zugriffstokens und speichern Sie ihn für die nächsten Schritte.

Verwenden Sie die folgenden Details:

  • Token name: devai-cli-qwiklabs
  • Rolle: Maintainer
  • Bereich: api

1865de233277f11c.png

Legen Sie die für die GitLab-Integration erforderlichen Umgebungsvariablen fest.

Für diesen Befehl müssen Sie Ihr GitLab-Zugriffstoken aktualisieren.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-access-token

Bei diesem Befehl müssen Sie Ihre GitLab-Nutzer-ID und den Repository-Namen aktualisieren.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Legen Sie die restlichen Umgebungsvariablen fest:

export GITLAB_URL="https://gitlab.com"
export GITLAB_BRANCH="devai"
export GITLAB_BASE_BRANCH="main"

Öffnen Sie die GitLab und erstellen Sie in Ihrem Projekt ein neues GitLab-Issue mit dem Titel „CICD AI Insights“.

63a13948f6864074.png

Eine weitere Option ist die Verwendung des folgenden curl-Befehls. Sie benötigen eine GitLab-Projekt-ID. Diese finden Sie im Bereich „Settings / General“.

export GITLAB_PROJECT_ID=56390153 # replace

curl --request POST \
  --header "PRIVATE-TOKEN: $GITLAB_PERSONAL_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"title":"CICD AI Insights"}' \
  https://gitlab.com/api/v4/projects/$GITLAB_PROJECT_ID/issues

Kehren Sie zu Cloud Shell zurück und öffnen Sie die Datei review.py:

cloudshell edit ~/gitlab/genai-for-developers/devai-cli/src/devai/commands/review.py

Suchen Sie den Code unten und entfernen Sie die Kommentarzeichen.

Zeile zum Importieren des GitLab-Befehls

# from devai.commands.gitlab import create_gitlab_issue_comment

Methode zum Kommentieren eines GitLab-Problems

# create_gitlab_issue_comment(response.text)

19. Entwicklung der DevAI CLI

Da Sie zum GitLab-Repository bzw. -Verzeichnis gewechselt sind. Sie müssen die Einrichtungsanleitung unten noch einmal durchgehen.

Richten Sie im Terminal Ihre virtuelle Python-Umgebung ein, installieren Sie die Anforderungen und führen Sie den Beispielbefehl aus.

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

cd ~/gitlab/genai-for-developers/devai-cli
python3 -m venv venv
. venv/bin/activate
pip3 install -r src/requirements.txt
pip3 install --editable ./src
devai echo

Sie können den Speicherort der CLI bestätigen. Sie sollte sich jetzt im GitLab-Ordner befinden.

 which devai

Führen Sie den Befehl für die Codeüberprüfung noch einmal im Terminal aus:

devai review code -c ~/gitlab/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Beispielausgabe – einige Abschnitte wurden gekürzt:

(venv) student_00_19a997c157f8@cloudshell:~/genai-for-developers/devai-cli (qwiklabs-gcp-02-71a9948ae110)$ devai review code -c ../sample-app/src/main/java/anthos/samples/bankofanthos/balancereader
.
.
Response from Model: **Class: Transaction**

**Method: toString**

**Maintainability:**

* The formatting of the string representation could be more clear and concise. Consider using a dedicated method for formatting the amount, e.g., `formatAmount()`.
.
.

> Entering new AgentExecutor chain...
Thought: I need to first get the issue ID using the Get Issues tool, then I can comment on the issue using the Comment on Issue tool.
Action: Get Issues
Action Input: 
Observation: Found 1 issues:
[{'title': 'CICD AI Insights', 'number': 1}]
Thought:Thought: I found the issue ID, so now I can add the comment to the issue.
Action: Comment on Issue
Action Input: 1


Action: Get Issue
Action Input: 1
Observation: {"title": "CICD AI Insights", "body": "", "comments": "[{'body': '**Transaction.java**\\n\\n\\n**Class:** Transaction\\n\\n\\n* **Security:** Consider using a custom date format like \\\\\"yyyy-MM-dd HH:mm:ss.SSS\\\\\" to handle timestamps more robustly.\\n\\n\\n**JWTVerifierGenerator.java**\\n\\n\\n* .
.
Thought:Now I can use the Comment on Issue tool to add the comment to the issue.

Action: Comment on Issue
Action Input: 
1

**Class: Transaction**

**Method: toString**

**Maintainability:**
.
.
.
Observation: Commented on issue 1
Thought:I have now completed the necessary actions and added the comment to the issue 'CICD AI Insights'.

Final Answer: Comment added to issue 'CICD AI Insights'

> Finished chain.

Öffnen Sie die GitLab und sehen Sie sich das aktualisierte Problem an.

9da39bf6070d9447.png

LLM-Trace in LangSmith ansehen

Beispiel für einen LLM-Trace.

f32eed34f3a3b040.png

20. Änderungen per Push-Befehl an ein GitLab-Repository übertragen

Kehren Sie zum Cloud Shell-Editor zurück.

Wechseln Sie zum Tab „Source Control“.

Stellen Sie die Änderungen, die Sie zum Aktualisieren der Datei review.py vorgenommen haben, bereit, übernehmen Sie sie per Commit und übertragen Sie sie per Push.

b838a11f362454ce.png

21. GitLab CICD-Konfiguration

Als Nächstes aktivieren Sie die GitLab CICD-Pipeline, damit eine Codeüberprüfung ausgeführt wird, wenn Änderungen per Push an das Repository übertragen werden.

Öffnen Sie die GitLab-Website und rufen Sie den Bereich „Settings / CICD"“ auf.

Maximieren Sie den Bereich Variables und klicken Sie auf Add variable.

Entfernen Sie die Häkchen aus allen Kästchen, wenn Sie die Variablen hinzufügen. Beispiel:

68b3ed732b6a8fe9.png

Fügen Sie anhand Ihrer Notizen, in denen Sie alle Umgebungsvariablen speichern, Umgebungsvariablen für JIRA, GitLab und LangSmith hinzu.

PROJECT_ID=qwiklabs-project-id
LOCATION=us-central1
GOOGLE_CLOUD_CREDENTIALS - cat ~/vertex-client-key.json

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY=your-service-api-key

JIRA_API_TOKEN=your-token
JIRA_USERNAME="email that you used to register with JIRA"
JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
JIRA_PROJECT_KEY="JIRA project key"
JIRA_CLOUD=true

GITLAB_PERSONAL_ACCESS_TOKEN=your-gitlab-token
GITLAB_URL="https://gitlab.com"
GITLAB_REPOSITORY="USERID/REPOSITORY"
GITLAB_BRANCH="devai"
GITLAB_BASE_BRANCH="main"

Verwenden Sie für den Variablenwert GOOGLE_CLOUD_CREDENTIALS den Dienstkontoschlüssel, der im Abschnitt oben erstellt wurde.

cat ~/vertex-client-key.json

Ansicht „CI/CD-Variablen“:

2f4594ce72be4834.png

22. GitLab CI/CD-Pipeline ausführen

Öffnen Sie „Build / Pipelines“ in der GitLab-Benutzeroberfläche und klicken Sie auf „Run Pipeline“.

a7518e37dde42366.png

23. GitLab-Pipeline-Ausgabe prüfen

Öffnen Sie „Build / Jobs“ in der GitLab-Benutzeroberfläche und prüfen Sie die Pipeline-Ausgabe.

985e4b322fb73b1c.png

Öffnen Sie die GitLab und sehen Sie sich die aktualisierten Kommentare zum Problem „CICD Insights“ an.

Ausführung von GitLab-Workflows deaktivieren

Kehren Sie zum Cloud Shell-Editor zurück. Entfernen Sie die Kommentarzeichen aus den Zeilen, um die Ausführung von GitLab-Workflows bei Code-Push-Ereignissen zu deaktivieren. Sie können den Workflow weiterhin bei Bedarf über die Benutzeroberfläche ausführen.

# workflow:
#   rules:
#     - if: $CI_PIPELINE_SOURCE == "web"

Öffnen Sie .gitlab-ci.yml im Stammverzeichnis des Projekts und entfernen Sie die Kommentarzeichen in den Zeilen:

cloudshell edit ~/gitlab/genai-for-developers/.gitlab-ci.yml

Wechseln Sie zum Tab „Source Control“, führen Sie einen Commit durch und übertragen Sie die Änderung.

a9d52beb8c642982.png

24. CircleCI-Integration

Was ist CircleCI?

CircleCI ist eine cloudbasierte CI/CD-Plattform, mit der Teams ihre Softwareentwicklungs- und Bereitstellungsprozesse automatisieren können. Es lässt sich in Versionskontrollsysteme wie GitHub, Bitbucket und GitLab einbinden, sodass Teams Codeänderungen in Echtzeit validieren können, indem sie automatisierte Tests und Builds ausführen. Für die kontinuierliche Bereitstellung kann CircleCI die Bereitstellung von Software in verschiedenen Cloud-Umgebungen wie AWS, Google Cloud und Azure automatisieren.

Einrichtung

Öffnen Sie die CircleCI und erstellen Sie ein neues Projekt. Wählen Sie für Ihr Repository „GitLab“ / „Cloud“ aus.

Gewähren Sie CircleCI Zugriff auf Ihr GitLab-Konto.

Wählen Sie unter „Schnellste Option“ den main-Zweig aus. CircleCI erkennt möglicherweise eine vorhandene Konfigurationsdatei und überspringt diesen Schritt.

4e9b7cef458d5fba.png

Klicken Sie nach der Erstellung des Projekts auf den Bereich „Project Settings“ / „Environment Variables“.

1499b5f96ac0fe5e.png

Fügen Sie alle Umgebungsvariablen hinzu, die Sie bisher verwendet haben.

f15b7a3e02c649e8.png

Hier ist eine Beispielliste mit Umgebungsvariablen, die hinzugefügt werden können.

PROJECT_ID=qwiklabs-project-id
LOCATION=us-central1
GOOGLE_CLOUD_CREDENTIALS - cat ~/vertex-client-key.json

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY=your-service-api-key

JIRA_API_TOKEN=your-token
JIRA_USERNAME="email that you used to register with JIRA"
JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
JIRA_PROJECT_KEY="JIRA project key"
JIRA_CLOUD=true

GITLAB_PERSONAL_ACCESS_TOKEN=your-gitlab-token
GITLAB_URL="https://gitlab.com"
GITLAB_REPOSITORY="USERID/REPOSITORY"
GITLAB_BRANCH="devai"
GITLAB_BASE_BRANCH="main"

25. JIRA- und GitLab-Methoden aktivieren

Öffnen Sie den Google Cloud Shell-Editor und nehmen Sie eine Änderung an der Datei review.py vor.

Suchen Sie die folgenden Zeilen und entfernen Sie die Kommentarzeichen.

# from devai.commands.jira import create_jira_issue
create_jira_issue("Performance Review Results", response.text)
create_gitlab_issue_comment(response.text)
.
.
.
create_jira_issue("Security Review Results", response.text)
create_gitlab_issue_comment(response.text)

Wechseln Sie zum Tab „Source Control“, führen Sie einen Commit durch und übertragen Sie die Änderung.

Öffnen Sie die GitLab-Website und rufen Sie „Build“ / „Pipelines“ auf.

d196ad631be17b88.png

Folgen Sie dem Link zu CircleCI, um den Workflow zu prüfen.

d4ff287694b82445.png

Sehen Sie sich die Kommentare zum GitLab-Problem in Ihrem Repository an.

e77ee826488d5299.png

9a51daa2960994e3.png

Sehen Sie sich die neuen Vorgänge an, die in Ihrem JIRA-Projekt erstellt wurden.

1e6305a32aaef6a2.png

26. Glückwunsch!

Sie haben das Lab abgeschlossen.

Behandelte Themen:

  • Schritte zur Automatisierung von GenAI-Code-Reviews in GitHub, GitLab und CircleCI hinzufügen.
  • LangChain ReAct-Agents zum Automatisieren von Aufgaben wie dem Kommentieren von GitLab-Problemen und dem Öffnen von JIRA-Tickets.

Nächste Schritte:

  • Weitere praktische Übungen folgen.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

© 2024 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.