Node.js Genkit-Webanwendung für generative KI automatisch aus der Versionsverwaltung in Cloud Run bereitstellen

1. Übersicht

Das erste Mal eine Webanwendung bereitzustellen, kann beängstigend sein. Selbst nach der ersten Bereitstellung kann es sein, dass Sie die Bereitstellung neuer Versionen Ihrer Anwendung vermeiden, wenn der Prozess zu viel Arbeit macht. Mit Continuous Deployment können Sie Änderungen an Ihrer Anwendung ganz einfach automatisch bereitstellen.

In diesem Lab schreiben Sie eine Webanwendung und konfigurieren Cloud Run so, dass Ihre Anwendung automatisch bereitgestellt wird, wenn eine Änderung am Quellcode Ihrer Anwendung vorgenommen wird. Anschließend ändern Sie die Anwendung und stellen sie noch einmal bereit.

Lerninhalte

  • Webanwendung mit dem Cloud Shell-Editor schreiben
  • Anwendungscode in GitHub speichern
  • Anwendung automatisch in Cloud Run bereitstellen
  • Mit Genkit generative KI in Ihre Anwendung einbinden
  • LLM-Prompts mit der dotprompt-Bibliothek verwalten

2. Vorbereitung

  1. Wenn Sie noch kein Google-Konto haben, müssen Sie ein Google-Konto erstellen.
    • Sie verwenden ein privates Konto anstelle eines Arbeits- oder Schulkontos. Für geschäftliche und schulische Konten gelten möglicherweise Einschränkungen, die Sie daran hindern, die für dieses Lab erforderlichen APIs zu aktivieren.
  2. Wenn Sie noch kein GitHub-Konto haben, müssen Sie ein GitHub-Konto erstellen.

3. Projekt einrichten

  1. Melden Sie sich in der Google Cloud Console an.
  2. Aktivieren Sie die Abrechnung in der Cloud Console.
    • Die Kosten für die Durchführung dieses Labs sollten unter 1 $liegen.
    • Sie können die Schritte am Ende dieses Labs ausführen, um Ressourcen zu löschen und weitere Kosten zu vermeiden.
    • Neue Nutzer können das kostenlose Testabo mit einem Guthaben von 300$ nutzen.
    • Nehmen Sie an einer Veranstaltung zu generativer KI für Entwickler teil? Möglicherweise erhalten Sie ein Guthaben in Höhe von 1$.
  3. Erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes.

4. Cloud Shell-Editor öffnen

  1. Rufen Sie den Cloud Shell-Editor auf.
  2. Wenn das Terminal nicht unten auf dem Bildschirm angezeigt wird, öffnen Sie es:
    • Klicke auf das Dreistrich-Menü Dreistrich-Menüsymbol.
    • Klicken Sie auf Terminal.
    • Klicken Sie auf Neues TerminalNeues Terminal im Cloud Shell-Editor öffnen.
  3. Legen Sie das Projekt im Terminal mit diesem Befehl fest:
    • Format:
      gcloud config set project [PROJECT_ID]
      
    • Beispiel:
      gcloud config set project lab-project-id-example
      
    • Wenn Sie sich Ihre Projekt-ID nicht merken können:
      • Sie können alle Ihre Projekt-IDs mit folgendem Befehl auflisten:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      Projekt-ID im Cloud Shell-Editor-Terminal festlegen
  4. Wenn Sie dazu aufgefordert werden, klicken Sie auf Autorisieren, um fortzufahren. Klicken Sie, um Cloud Shell zu autorisieren.
  5. Es sollte folgende Meldung angezeigt werden:
    Updated property [core/project].
    
    Wenn Sie eine WARNING sehen und gefragt werden, ob Sie Do you want to continue (Y/N)? eingeben möchten, haben Sie wahrscheinlich die Projekt-ID falsch eingegeben. Drücken Sie N, drücken Sie Enter und versuchen Sie noch einmal, den Befehl gcloud config set project auszuführen.

5. APIs aktivieren

Aktivieren Sie im Terminal die APIs:

gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  aiplatform.googleapis.com

Die Verarbeitung dieses Befehls kann einige Minuten dauern. Sie sollten aber schließlich eine Meldung ähnlich der folgenden erhalten:

Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.

6. Git konfigurieren

  1. Legen Sie die E-Mail-Adresse Ihres globalen Git-Nutzers fest:
    git config --global user.email "you@example.com"
    
  2. Legen Sie Ihren globalen Git-Nutzernamen fest:
    git config --global user.name "Your Name"
    
  3. Legen Sie den globalen Git-Standardzweig auf main:
    git config --global init.defaultBranch main
    
    fest:

7. Code schreiben

So schreiben Sie eine Anwendung in Node.js:

  1. Rufen Sie das Basisverzeichnis auf:
    cd ~
    
  2. Erstellen Sie das Verzeichnis codelab-genai:
    mkdir codelab-genai
    
  3. Rufen Sie das Verzeichnis codelab-genai auf:
    cd codelab-genai
    
  4. Erstellen Sie eine index.js-Datei:
    touch index.js
    
  5. Erstellen Sie die Datei package.json:
    npm init es6 -y
    
  6. express als Abhängigkeit hinzufügen
    npm install express
    
  7. .gitignore-Datei hinzufügen, um das Committen von node_modules
    echo node_modules/ >> .gitignore
    
    zu verhindern
  8. Öffnen Sie die Datei index.js im Cloud Shell-Editor:
    cloudshell edit index.js
    
    Im oberen Bereich des Bildschirms sollte jetzt eine leere Datei angezeigt werden. Hier können Sie die Datei index.js bearbeiten. Der Code wird oben auf dem Bildschirm angezeigt.
  9. Kopieren Sie den folgenden Code und fügen Sie ihn in die geöffnete Datei index.js ein:
    import express from 'express';
    
    const app = express();
    app.get('/', async (req, res) => {
        res.send('Hello world!');
    });
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
        console.log(`codelab-genai: listening on port ${port}`);
    });
    
    Nach einigen Sekunden wird der Code automatisch im Cloud Shell-Editor gespeichert. Dieser Code antwortet auf HTTP-Anfragen mit der Begrüßung „Hello World“.

Der erste Code für Ihre Anwendung ist fertig und kann in der Versionskontrolle gespeichert werden.

8. Repository erstellen

  1. Kehren Sie unten auf dem Bildschirm zum Cloud Shell-Terminal zurück.
  2. Prüfen Sie, ob Sie sich noch im richtigen Verzeichnis befinden:
    cd ~/codelab-genai
    
  3. Git-Repository initialisieren
    git init -b main
    
  4. In der GitHub-Befehlszeile anmelden
    gh auth login
    
    Drücken Sie die Taste Enter, um die Standardoptionen zu akzeptieren, und folgen Sie der Anleitung im GitHub-Befehlszeilentool. Dazu gehören:
    1. In welchem Konto möchtest du dich anmelden? GitHub.com
    2. Welches Protokoll verwenden Sie bevorzugt für Git-Vorgänge auf diesem Host? HTTPS
    3. Möchten Sie Git mit Ihren GitHub-Anmeldedaten authentifizieren? Y (Überspringen, wenn diese Option nicht angezeigt wird.)
    4. Wie möchten Sie die GitHub-Befehlszeile authentifizieren? Login with a web browser
    5. Einmalcode kopieren
    6. Öffnen Sie https://github.com/login/device.
    7. Einmaligen Code einfügen
    8. Klicken Sie auf GitHub autorisieren.
    9. Anmeldung abschließen
  5. Prüfen, ob Sie angemeldet sind:
    gh api user -q ".login"
    
    Wenn Sie sich erfolgreich angemeldet haben, sollte hier Ihr GitHub-Nutzername angezeigt werden.
  6. GITHUB_USERNAME-Variable erstellen
    GITHUB_USERNAME=$(gh api user -q ".login")
    
  7. Prüfen Sie, ob Sie die Umgebungsvariable erstellt haben:
    echo ${GITHUB_USERNAME}
    
    Wenn Sie die Variable erfolgreich erstellt haben, sollte Ihr GitHub-Nutzername ausgegeben werden.
  8. Erstellen Sie ein leeres GitHub-Repository mit dem Namen codelab-genai:
    gh repo create codelab-genai --private
    
    Wenn Sie die Fehlermeldung
    GraphQL: Name already exists on this account (createRepository)
    
    erhalten, haben Sie bereits ein Repository mit dem Namen codelab-genai. Sie haben zwei Möglichkeiten, diese Anleitung fortzusetzen:
  9. Fügen Sie das codelab-genai-Repository als Remote-Repository origin hinzu:
    git remote add origin https://github.com/${GITHUB_USERNAME}/codelab-genai
    

9. Code teilen

  1. Prüfen Sie, ob Sie sich im richtigen Verzeichnis befinden:
    cd ~/codelab-genai
    
  2. Fügen Sie diesem Commit alle Dateien im aktuellen Verzeichnis hinzu:
    git add .
    
  3. Erstellen Sie den ersten Commit:
    git commit -m "add http server"
    
  4. Übertragen Sie das Commit per Push an den Branch main des Repositorys origin:
    git push -u origin main
    

Sie können diesen Befehl ausführen und die resultierende URL aufrufen, um den Anwendungscode auf GitHub aufzurufen:

echo -e "\n\nTo see your code, visit this URL:\n \
    https://github.com/${GITHUB_USERNAME}/codelab-genai/blob/main/index.js \n\n"

10. Automatische Bereitstellungen einrichten

  1. Lassen Sie den Tab „Cloud Shell-Editor“ geöffnet. Wir kommen später noch einmal auf diesen Tab zurück.
  2. Rufen Sie in einem neuen Tab die Cloud Run-Seite auf.
  3. Wählen Sie in der Console das richtige Google Cloud-Projekt aus Drop-down-Menü „Projekt“ in der Google Cloud Console.
  4. Klicken Sie auf REPO VERBINDEN.
  5. Klicken Sie auf MIT CLOUD BUILD EINRICHTEN.
    1. Wählen Sie GitHub als Repository-Anbieter aus.
      • Wenn Sie nicht im Browser in Ihrem GitHub-Konto angemeldet sind, melden Sie sich mit Ihren Anmeldedaten an.
    2. Klicken Sie auf Authentifizieren und dann auf Weiter.
    3. Nach der Anmeldung wird auf der Cloud Run-Seite die Meldung Die GitHub-App ist in keinem Ihrer Repositories installiert angezeigt.
    4. Klicken Sie auf die Schaltfläche GOOGLE CLOUD BUILD INSTALLIEREN.
      • Wählen Sie auf der Seite „Installationseinrichtung“ die Option Nur ausgewählte Repositories und dann das Repository codelab-genai aus, das Sie über die Befehlszeile erstellt haben.
      • Klicke auf Installieren.
      • Hinweis: Wenn Sie viele GitHub-Repositories haben, kann das Laden einige Minuten dauern.
    5. Wählen Sie your-user-name/codelab-genai als Repository
        aus.
      • Wenn das Repository nicht vorhanden ist, klicken Sie auf den Link Verbundene Repositories verwalten.
    6. Behalten Sie für Branch den Wert ^main$ bei.
    7. Klicken Sie auf Go, Node.js, Python, Java, .NET Core, Ruby oder PHP über Buildpacks von Google Cloud
        .
      • Lassen Sie die anderen Felder (Build context directory, Entrypoint und Function target) unverändert.
    8. Klicken Sie auf Speichern.
  6. Scrollen Sie nach unten zu Authentifizierung.
  7. Klicken Sie auf Nicht authentifizierte Aufrufe zulassen.
  8. Klicke auf ERSTELLEN.

Sobald der Build abgeschlossen ist (was einige Minuten dauern kann), führen Sie diesen Befehl aus und rufen Sie die resultierende URL auf, um die laufende Anwendung aufzurufen:

echo -e "\n\nOnce the build finishes, visit your live application:\n \
    "$( \
        gcloud run services list | \
        grep codelab-genai | \
        awk '/URL/{print $2}' | \
        head -1 \
    )" \n\n"

11. Code ändern

Zum Cloud Shell-Editor zurückkehren

Wenn der Cloud Shell-Editor noch geöffnet ist, können Sie diese Schritte überspringen.

  1. Rufen Sie den Cloud Shell-Editor auf.
  2. Wenn das Terminal nicht unten auf dem Bildschirm angezeigt wird, öffnen Sie es:
    • Klicke auf das Dreistrich-Menü Dreistrich-Menüsymbol.
    • Klicken Sie auf Terminal.
    • Klicken Sie auf Neues TerminalNeues Terminal im Cloud Shell-Editor öffnen.
  3. Legen Sie das Projekt im Terminal mit diesem Befehl fest:
    • Format:
      gcloud config set project [PROJECT_ID]
      
    • Beispiel:
      gcloud config set project lab-project-id-example
      
    • Wenn Sie sich Ihre Projekt-ID nicht merken können:
      • Sie können alle Ihre Projekt-IDs mit folgendem Befehl auflisten:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      Projekt-ID im Cloud Shell-Editor-Terminal festlegen
  4. Wenn Sie dazu aufgefordert werden, klicken Sie auf Autorisieren, um fortzufahren. Klicken Sie, um Cloud Shell zu autorisieren.
  5. Es sollte folgende Meldung angezeigt werden:
    Updated property [core/project].
    
    Wenn Sie eine WARNING sehen und gefragt werden, ob Sie Do you want to continue (Y/N)? eingeben möchten, haben Sie wahrscheinlich die Projekt-ID falsch eingegeben. Drücken Sie N, Enter und versuchen Sie noch einmal, den Befehl gcloud config set project auszuführen.

Vertex AI Ihrer Anwendung hinzufügen

  1. Kehren Sie unten auf dem Bildschirm zum Cloud Shell-Terminal zurück.
  2. Prüfen Sie, ob Sie sich noch im richtigen Verzeichnis befinden:
    cd ~/codelab-genai
    
  3. Installieren Sie das Node.js Genkit SDK:
    npm install @genkit-ai/ai
    
  4. Installieren Sie das Node.js Genkit SDK für Vertex AI:
    npm install @genkit-ai/vertexai
    
  5. Installieren Sie das Node.js Google Auth SDK:
    npm install google-auth-library
    
  6. index.js im Cloud Shell-Editor wieder öffnen
    cloudshell edit ~/codelab-genai/index.js
    
  7. Ersetzen Sie den Code in Ihrer index.js-Datei durch Folgendes:
    import express from 'express';
    const app = express();
    
    import { generate } from '@genkit-ai/ai';
    import { gemini15Flash, vertexAI } from '@genkit-ai/vertexai';
    
    import { GoogleAuth } from 'google-auth-library';
    const auth = new GoogleAuth();
    
    app.get('/', async (req, res) => {
        const project = await auth.getProjectId();
    
        const animal = req.query.animal || 'dog';
        const prompt = `Give me 10 fun facts about ${animal}. Return this as html without backticks.`
        const result = await generate({
            plugins: [
                vertexAI({ projectId: project, location: 'us-central1' }),
            ],
            model: gemini15Flash,
            prompt,
        });
        const html = result.text;
        res.send(html);
    });
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
        console.log(`codelab-genai: listening on port ${port}`);
    });
    

12. Noch einmal bereitstellen

  1. Prüfen Sie, ob Sie sich in Cloud Shell noch im richtigen Verzeichnis befinden:
    cd ~/codelab-genai
    
  2. Führen Sie die folgenden Befehle aus, um eine neue Version Ihrer Anwendung in Ihr lokales Git-Repository zu committen:
    git add .
    git commit -m "add latest changes"
    
  3. Übertragen Sie die Änderungen auf GitHub:
    git push
    
  4. Führen Sie nach Abschluss des Builds diesen Befehl aus und rufen Sie die bereitgestellte Anwendung auf:
    echo -e "\n\nOnce the build finishes, visit your live application:\n \
        "$( \
            gcloud run services list | \
            grep codelab-genai | \
            awk '/URL/{print $2}' | \
            head -1 \
        )" \n\n"
    

Es kann einige Minuten dauern, bis der Build abgeschlossen ist und Sie Ihre Änderungen sehen können.

Den Verlauf aller Versionen finden Sie hier: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions

13. Optional: Nutzung von Vertex AI prüfen

Wie bei anderen Google Cloud-Diensten können Sie auch Vertex AI-Vorgänge prüfen. Anhand von Audit-Logs können Sie herausfinden, wer was wo und wann getan hat. Administrator-Audit-Logs für Vertex AI sind standardmäßig aktiviert. Wenn Sie Anfragen zum Generieren von Inhalten prüfen möchten, müssen Sie Audit-Logs zum Datenzugriff aktivieren:

  1. Rufen Sie in der Google Cloud Console die Seite Audit-Logs auf:

    Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift IAM und Verwaltung ist.
  2. Achten Sie darauf, dass Sie Ihre Cloud Run-Anwendung in dem vorhandenen Google Cloud-Projekt erstellen.
  3. Wählen Sie in der Tabelle Konfiguration für Audit-Logs zum Datenzugriff in der Spalte „Dienst“ die Option Vertex AI API aus.
  4. Wählen Sie auf dem Tab Logtypen die Audit-Logtypen für den Datenzugriff Admin read und Data read aus.
  5. Klicken Sie auf Speichern.

Nach der Aktivierung können Sie Audit-Logs für jede Aufrufe der Anwendung sehen. So rufen Sie die Audit-Logs mit Aufrufdetails auf:

  1. Kehren Sie zur bereitgestellten Anwendung zurück und aktualisieren Sie die Seite, um das Protokoll auszulösen.
  2. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf:

  3. Geben Sie im Abfragefenster Folgendes ein:
    LOG_ID("cloudaudit.googleapis.com%2Fdata_access")
    protoPayload.serviceName="aiplatform.googleapis.com"
    
  4. Klicken Sie auf Abfrage ausführen.

In Audit-Protokollen wird die Verwendung der Vertex AI API erfasst, Sie können jedoch keine arbeitslastbezogenen Daten wie Prompts oder Antwortdetails beobachten.

14. (Optional) Beobachtbarkeit Ihrer KI-Arbeitslast erhöhen

Audit-Logs enthalten keine arbeitslastbezogenen Informationen. Um die Beobachtbarkeit Ihrer Arbeitslasten zu verbessern, müssen Sie diese Informationen explizit protokollieren. Sie können dazu Ihr bevorzugtes Logging-Framework verwenden. In den folgenden Schritten wird gezeigt, wie Sie dies mit dem nativen Node.js-Protokollierungsmechanismus tun.

  1. index.js im Cloud Shell-Editor wieder öffnen
    cloudshell edit ~/codelab-genai/index.js
    
  2. Füge nach dem Aufruf von await generativeModel.generateContent(prompt) (Zeile 19) die folgende Zeile hinzu:
        console.log(JSON.stringify({
            severity: 'DEBUG',
            message: 'Content is generated',
            prompt: prompt,
            response: resp.response,
        }));
    
    Mit diesem Code werden Informationen zu generierten Inhalten im strukturierten Logging-Format in stdout geschrieben. Ein Logging-Agent in Cloud Run erfasst die Ausgabe, die auf stdout gedruckt wird, und schreibt sie in diesem Format in Cloud Logging.
  3. Öffnen Sie Cloud Shell noch einmal und geben Sie den folgenden Befehl ein, um sicherzustellen, dass Sie sich im richtigen Verzeichnis befinden:
    cd ~/codelab-genai
    
  4. Führen Sie einen Commit durch:
    git commit -am "observe generated content"
    
  5. Übertragen Sie die Änderungen per Push auf GitHub, um die Neubereitstellung der geänderten Version auszulösen:
    git push
    

Nach der Bereitstellung der neuen Version können Sie die Debug-Informationen zu Aufrufen von Vertex AI beobachten.

So rufen Sie Ihre Anwendungsprotokolle auf:

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf:

  2. Geben Sie im Abfragefenster Folgendes ein:
    LOG_ID("run.googleapis.com%2Fstdout")
    severity=DEBUG
    
  3. Klicken Sie auf Abfrage ausführen.

Das Ergebnis der Abfrage enthält Protokolle mit Prompt und Vertex AI-Antwort, einschließlich „Sicherheitsbewertungen“, die zum Überwachen von Sicherheitspraktiken verwendet werden können.

15. (Optional) Bereinigen

Für Cloud Run fallen keine Kosten an, wenn der Dienst nicht verwendet wird. Allerdings können für das Speichern des Container-Images in Artifact Registry Gebühren berechnet werden. Sie können Ihr Cloud-Projekt löschen, um wiederkehrende Gebühren zu vermeiden. Wenn Sie Ihr Cloud-Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.

Sie können das Projekt löschen:

gcloud projects delete $GOOGLE_CLOUD_PROJECT

Sie können auch unnötige Ressourcen von Ihrem CloudShell-Laufwerk löschen. Sie haben folgende Möglichkeiten:

  1. Löschen Sie das Codelab-Projektverzeichnis:
    rm -rf ~/codelab-genai
    
  2. Warnung! Diese Aktion kann nicht rückgängig gemacht werden. Wenn Sie alles in Cloud Shell löschen möchten, um Speicherplatz freizugeben, können Sie Ihr ganzes Basisverzeichnis löschen. Achten Sie darauf, dass alles, was Sie behalten möchten, an einem anderen Ort gespeichert ist.
    sudo rm -rf $HOME
    

16. Glückwunsch

In diesem Lab haben Sie eine Webanwendung geschrieben und Cloud Run so konfiguriert, dass Ihre Anwendung automatisch bereitgestellt wird, wenn eine Änderung am Quellcode Ihrer Anwendung vorgenommen wurde. Anschließend haben Sie Ihre Anwendung geändert und noch einmal bereitgestellt.

Wenn Ihnen dieses Lab gefallen hat, können Sie es in einer anderen Programmiersprache oder einem anderen Framework noch einmal ausprobieren:

Wenn Sie an einer UX-Forschungsstudie teilnehmen möchten, um die Produkte, mit denen Sie heute gearbeitet haben, zu verbessern, registrieren Sie sich hier.

Hier sind einige Möglichkeiten, wie Sie Ihr Wissen vertiefen können: