In dieser Anleitung wird beschrieben, wie Sie mit Cloud Functions der 2. Generation Cloud Functions mit serverseitiger Remote Config serverseitige Aufrufe an die Vertex AI Gemini API ausführen.
In dieser Anleitung fügen Sie Remote Config einer chatbotähnlichen Funktion hinzu, die ein Gemini Modell verwendet, um Nutzerfragen zu beantworten. Remote Config werden verwaltet, einschließlich einer Eingabeaufforderung, die Sie eingehenden Nutzeranfragen voranstellen. Sie können diese Eingaben bei Bedarf über die Firebase Console aktualisieren.Gemini API Außerdem verwenden Sie die Firebase Local Emulator Suite, um die Funktion zu testen und Fehler zu beheben. Nachdem Sie sich vergewissert haben, dass sie funktioniert, stellen Sie sie in Google Cloud bereit und testen sie dort.
Vorbereitung
In dieser Anleitung wird davon ausgegangen, dass Sie mit der Verwendung von JavaScript zur Entwicklung von Anwendungen vertraut sind.
Firebase-Projekt einrichten
Wenn Sie noch kein Firebase-Projekt haben, gehen Sie so vor :
Melden Sie sich in der Firebase Console an.
Klicken Sie auf Projekt erstellen und verwenden Sie eine der folgenden Optionen:
- Option 1: Erstellen Sie ein neues Firebase-Projekt (und das zugrunde liegende Google Cloud Projekt automatisch), indem Sie im ersten Schritt des Workflows „Projekt erstellen“ einen neuen Projektnamen eingeben.
- Option 2: Fügen Sie einem vorhandenen Google Cloud Projekt Firebase hinzu, indem Sie im ersten Schritt des Workflows „Projekt erstellen“ den Namen Ihres Google Cloud Projekts aus dem Drop-down-Menü auswählen.
Wenn Sie dazu aufgefordert werden, müssen Sie nicht Google Analytics einrichten, um diese Lösung zu verwenden.
Folgen Sie der Anleitung auf dem Bildschirm, um Ihr Projekt zu erstellen.
Wenn Sie bereits ein Firebase-Projekt haben, gehen Sie so vor :
Fahren Sie mit Entwicklungsumgebung konfigurieren fort.
Entwicklungsumgebung konfigurieren
Sie benötigen eine Node.js-Umgebung, um Funktionen zu schreiben, und Sie benötigen die Firebase CLI, um Funktionen in der Cloud Functions -Laufzeitumgebung bereitzustellen.
Installieren Sie Node.js und npm.
Wir empfehlen, npm und Node.js zum Verwenden von Node Version Manager zu installieren.
Installieren Sie die Firebase CLI mit der gewünschten Methode. Wenn Sie die CLI beispielsweise mit npm installieren möchten, führen Sie diesen Befehl aus:
npm install -g firebase-tools@latestMit diesem Befehl wird der global verfügbare Befehl
firebaseinstalliert. Wenn dieser Befehl fehlschlägt, müssen Sie möglicherweise die npm-Berechtigungen ändern.Wenn Sie auf die neueste Version von
firebase-toolsaktualisieren möchten, führen Sie denselben Befehl noch einmal aus.Installieren Sie
firebase-functionsundfirebase-adminund verwenden Sie--save, um sie inpackage.jsonzu speichern:npm install firebase-functions@latest firebase-admin@latest --save
Jetzt können Sie mit der Implementierung dieser Lösung fortfahren.
Implementierung
Führen Sie die folgenden Schritte aus, um Cloud Functions der 2. Generation Cloud Functions mit Remote Config und Vertex AI zu erstellen, zu testen und bereitzustellen:
- Aktivieren Sie die empfohlenen Vertex AI APIs in der Google Cloud Konsole.
- Initialisieren Sie Ihr Projekt und installieren Sie Node-Abhängigkeiten.
- Konfigurieren Sie IAM-Berechtigungen für Ihr Admin SDK Dienstkonto und speichern Sie den Schlüssel.
- Erstellen Sie die Funktion.
- Erstellen Sie eine serverspezifische Remote Config Vorlage.
- Stellen Sie die Funktion bereit und testen Sie sie in der Firebase Local Emulator Suite.
- Stellen Sie die Funktion in Google Cloud bereit.
Schritt 1: Empfohlene Vertex AI APIs in der Google Cloud Console aktivieren
- Öffnen Sie die Google Cloud Konsole und wählen Sie bei Aufforderung Ihr Projekt aus.
- Geben Sie oben in der Console im Feld Suchen den Suchbegriff Vertex AI ein und warten Sie, bis Vertex AI als Ergebnis angezeigt wird.
- Wählen Sie Vertex AI aus. Das Vertex AI Dashboard wird angezeigt.
Klicken Sie auf Alle empfohlenen APIs aktivieren.
Es kann einige Momente dauern, bis die API-Aktivierung abgeschlossen ist. Lassen Sie die Seite aktiv und geöffnet, bis die Aktivierung abgeschlossen ist.
Wenn die Abrechnung nicht aktiviert ist, werden Sie aufgefordert, ein Cloud Billing Konto hinzuzufügen oder zu verknüpfen. Nachdem Sie ein Abrechnungskonto aktiviert haben, kehren Sie zum Vertex AI Dashboard zurück und prüfen Sie, ob alle empfohlenen APIs aktiviert sind.
Schritt 2: Projekt initialisieren und Node-Abhängigkeiten installieren
- Öffnen Sie ein Terminal auf Ihrem Computer und wechseln Sie zu dem Verzeichnis, in dem Sie die Funktion erstellen möchten.
Melden Sie sich in Firebase an:
firebase loginFühren Sie den folgenden Befehl aus, um Cloud Functions for Firebase zu initialisieren:
firebase init functionsWählen Sie Vorhandenes Projekt verwenden aus und geben Sie Ihre Projekt-ID an.
Wenn Sie aufgefordert werden, die zu verwendende Sprache auszuwählen, wählen Sie JavaScript aus und drücken Sie die Eingabetaste.
Wählen Sie für alle anderen Optionen die Standardeinstellungen aus.
Im aktuellen Verzeichnis wird ein
functions-Verzeichnis erstellt. Darin finden Sie eineindex.js-Datei, mit der Sie die Funktion erstellen, einnode_modules-Verzeichnis mit den Abhängigkeiten für die Funktion und einepackage.json-Datei mit den Paketabhängigkeiten.Fügen Sie die Pakete Admin SDK und Vertex AI mit den folgenden Befehlen hinzu. Verwenden Sie
--save, um sicherzustellen, dass sie in Ihrerpackage.jsonDatei gespeichert werden:cd functions npm install firebase-admin@latest @google-cloud/vertexai --save
Die Datei functions/package.json sollte jetzt so aussehen, wobei die neuesten Versionen angegeben sind:
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "20"
},
"main": "index.js",
"dependencies": {
"@google-cloud/vertexai": "^1.1.0",
"firebase-admin": "^12.1.0",
"firebase-functions": "^5.0.0"
},
"devDependencies": {
"firebase-functions-test": "^3.1.0"
},
"private": true
}
Wenn Sie ESLint verwenden, sehen Sie einen Abschnitt, der es enthält. Achten Sie außerdem darauf, dass die Node-Engine-Version mit der installierten Version
von Node.js und der Version übereinstimmt, die Sie letztendlich in Google Cloudausführen. Wenn beispielsweise der Abschnitt engines in package.json für Node-Version 18 konfiguriert ist und Sie Node.js 20 verwenden, aktualisieren Sie die Datei auf Version 20:
"engines": {
"node": "20"
},
Schritt 3: IAM-Berechtigungen für Ihr Admin SDK Dienstkonto konfigurieren und Schlüssel speichern
In dieser Lösung verwenden Sie das Firebase Admin SDK Dienstkonto, um Ihre Funktion auszuführen.
- Öffnen Sie in der Google Cloud Console die
IAM & Verwaltung Seite,
und suchen Sie das Admin SDK Dienstkonto (mit dem Namen
firebase-adminsdk). - Wählen Sie das Konto aus und klicken Sie auf Hauptkonto bearbeiten. Die Seite „Zugriff bearbeiten“ wird angezeigt.
- Klicken Sie auf Weitere Rolle hinzufügen, wählen Sie Remote Config Betrachter aus.
- Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie AI Platform-Entwickler aus.
- Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie Vertex AI Nutzer aus.
- Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie Cloud Run-Aufrufer aus.
- Klicken Sie auf Speichern.
Exportieren Sie als Nächstes die Anmeldedaten für das Admin SDK Dienstkonto und speichern Sie sie
in der GOOGLE_APPLICATION_CREDENTIALS Umgebungsvariable.
- Öffnen Sie in der Google Cloud Konsole die Seite _Anmeldedaten_.
- Klicken Sie auf das Admin SDK-Dienstkonto, um die Details-Seite zu öffnen.
- Klicken Sie auf Schlüssel.
- Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
- Achten Sie darauf, dass JSON als Schlüsseltyp ausgewählt ist, und klicken Sie dann auf Erstellen.
- Laden Sie den Schlüssel an einen sicheren Ort auf Ihrem Computer herunter.
Exportieren Sie den Schlüssel über das Terminal als Umgebungsvariable:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
Schritt 4: Funktion erstellen
In diesem Schritt erstellen Sie eine Funktion, die Nutzereingaben verarbeitet und KI-gestützte Antworten generiert. Sie kombinieren mehrere Code-Snippets, um eine umfassende Funktion zu erstellen, die das Admin SDK und Vertex AI Gemini API initialisiert, Standardparameter mit Remote Config konfiguriert, die neuesten Remote Config-Parameter abruft, Nutzereingaben verarbeitet und eine Antwort an den Nutzer streamt.
- Öffnen Sie in Ihrer Codebasis
functions/index.jsin einem Texteditor oder einer IDE. Löschen Sie den vorhandenen Inhalt und fügen Sie dann das Admin SDK, Remote Config, und das Vertex AI SDK hinzu und initialisieren Sie die App, indem Sie den folgenden Code in die Datei einfügen:
const { onRequest } = require("firebase-functions/https"); const logger = require("firebase-functions/logger"); const { initializeApp } = require("firebase-admin/app"); const { VertexAI } = require('@google-cloud/vertexai'); const { getRemoteConfig } = require("firebase-admin/remote-config"); // Set and check environment variables. const project = process.env.GCLOUD_PROJECT; // Initialize Firebase. const app = initializeApp();Konfigurieren Sie Standardwerte, die von der Funktion verwendet werden, wenn keine Verbindung zu dem Remote Config Server hergestellt werden kann. In dieser Lösung werden
textModel,generationConfig,safetySettings,textPrompt, undlocationals Remote Config Parameter konfiguriert, die mit Remote Config Parametern übereinstimmen, die Sie später in dieser Anleitung konfigurieren. Weitere Informationen zu diesen Parametern finden Sie unter Vertex AI Node.js-Client.Optional können Sie auch einen Parameter konfigurieren, um zu steuern, ob Sie auf die Vertex AI Gemini API zugreifen (in diesem Beispiel ein Parameter namens
vertex_enabled). Diese Einrichtung kann beim Testen der Funktion nützlich sein. In den folgenden Code-Snippets ist dieser Wert auffalsegesetzt, wodurch die Verwendung von Vertex AI übersprungen wird, während Sie die grundlegende Bereitstellung der Funktion testen. Wenn Sie ihn auftruesetzen, wird die Vertex AI Gemini API aufgerufen.// Define default (fallback) parameter values for Remote Config. const defaultConfig = { // Default values for Vertex AI. model_name: "gemini-1.5-flash-002", generation_config: [{ "stopSequences": [], "temperature": 0.7, "maxOutputTokens": 64, "topP": 0.1, "topK": 20 }], prompt: "I'm a developer who wants to learn about Firebase and you are a \ helpful assistant who knows everything there is to know about Firebase!", safety_settings: [{ "category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE" }], location: 'us-central1', // Disable Vertex AI Gemini API access for testing. vertex_enabled: false };Erstellen Sie die Funktion und richten Sie die serverseitige Remote Config ein:
// Export the function. exports.generateWithVertex = onRequest(async (request, response) => { try { // Set up Remote Config. const rc = getRemoteConfig(app); // Get the Remote Config template and assign default values. const template = await rc.getServerTemplate({ defaultConfig: defaultConfig }); // Add the template evaluation to a constant. const config = template.evaluate(); // Obtain values from Remote Config. const textModel = config.getString("model_name") || defaultConfig.model_name; const textPrompt = config.getString("prompt") || defaultConfig.prompt; const generationConfig = config.getString("generation_config") || defaultConfig.generation_config; const safetySettings = config.getString("safety_settings") || defaultConfig.safety_settings; const location = config.getString("location") || defaultConfig.location; const vertexEnabled = config.getBoolean("is_vertex_enabled") || defaultConfig.vertex_enabled;Richten Sie Vertex AI ein und fügen Sie die Chat- und Antwortlogik hinzu:
// Allow user input. const userInput = request.query.prompt || ''; // Instantiate Vertex AI. const vertex_ai = new VertexAI({ project: project, location: location }); const generativeModel = vertex_ai.getGenerativeModel({ model: textModel, safety_settings: safetySettings, generation_config: generationConfig, }); // Combine prompt from Remote Config with optional user input. const chatInput = textPrompt + " " + userInput; if (!chatInput) { return res.status(400).send('Missing text prompt'); } // If vertexEnabled isn't true, do not send queries to Vertex AI. if (vertexEnabled !== true) { response.status(200).send({ message: "Vertex AI call skipped. Vertex is not enabled." }); return; } logger.log("\nRunning with model ", textModel, ", prompt: ", textPrompt, ", generationConfig: ", generationConfig, ", safetySettings: ", safetySettings, " in ", location, "\n"); const result = await generativeModel.generateContentStream(chatInput); response.writeHead(200, { 'Content-Type': 'text/plain' }); for await (const item of result.stream) { const chunk = item.candidates[0].content.parts[0].text; logger.log("Received chunk:", chunk); response.write(chunk); } response.end(); } catch (error) { logger.error(error); response.status(500).send('Internal server error'); } });Speichern und schließen Sie die Datei.
Schritt 5: Serverspezifische Remote Config Vorlage erstellen
Erstellen Sie als Nächstes eine serverseitige Remote Config Vorlage und konfigurieren Sie Parameter und Werte, die in der Funktion verwendet werden sollen. So erstellen Sie eine serverspezifische Remote Config Vorlage:
- Öffnen Sie die Firebase Console und maximieren Sie im Navigationsmenü Ausführen und wählen Sie Remote Config aus.
Wählen Sie oben auf der Seite Remote Config im Drop-down-Menü Client/Server die Option Server aus.
- Wenn Sie Remote Config oder Servervorlagen zum ersten Mal verwenden, klicken Sie auf Konfiguration erstellen. Der Bereich Ersten serverseitigen Parameter erstellen wird angezeigt.
- Wenn Sie Remote Config Servervorlagen bereits verwendet haben, klicken Sie auf Parameter hinzufügen.
Definieren Sie die folgenden Remote Config Parameter:
Parameter name Beschreibung Typ Standardwert model_nameModellname
Aktuelle Listen mit Modellnamen, die Sie in Ihrem Code verwenden können, finden Sie unter Modellversionen und Lebenszyklen oder Verfügbare Modellnamen.String gemini-2.0-flashpromptEingabeaufforderung, die der Anfrage des Nutzers vorangestellt werden soll. String I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!generation_configParameter , die an das Modell gesendet werden sollen. JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]safety_settingsSicherheit seinstellungen für Vertex AI. JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]locationStandort , an dem der Vertex AI Dienst und das Modell ausgeführt werden sollen. String us-central1is_vertex_enabledOptionaler Parameter, der steuert, ob Anfragen an Vertex AI gesendet werden. Boolesch trueWenn Sie alle Parameter hinzugefügt haben, prüfen Sie sie noch einmal und vergewissern Sie sich, dass die Datentypen korrekt sind. Klicken Sie dann auf Änderungen veröffentlichen.
Schritt 6: Funktion bereitstellen und in der Firebase Local Emulator Suite testen
Jetzt können Sie die Funktion lokal mit dem Firebase Local Emulator Suite bereitstellen und testen.
Achten Sie darauf, dass Sie
GOOGLE_APPLICATION_CREDENTIALSwie in Schritt 3: IAM-Berechtigungen für Ihr Admin SDK Dienstkonto konfigurieren und Schlüssel speichern beschrieben als Umgebungsvariable festgelegt haben. Stellen Sie dann die Funktion aus dem übergeordneten Verzeichnis des Verzeichnissesfunctionsim Firebase-Emulator bereit:firebase emulators:start --project PROJECT_ID --only functionsÖffnen Sie die Logseite des Emulators. Dort sollte angezeigt werden, dass die Funktion geladen wurde.
Greifen Sie mit dem folgenden Befehl auf die Funktion zu. Dabei ist PROJECT_ID Ihre Projekt-ID und LOCATION die Region, in der Sie die Funktion bereitgestellt haben (z. B.
us-central1):curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertexWarten Sie auf eine Antwort und kehren Sie dann zur Logseite des Firebase-Emulators oder zur Console zurück und suchen Sie nach Fehlern oder Warnungen.
Senden Sie einige Nutzereingaben. Da
is_vertex_enabledis in der Remote Config Servervorlage konfiguriert ist, sollte das Gemini Modell über die Vertex AI Gemini API aufgerufen werden. Dadurch können Kosten entstehen:curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20catsNehmen Sie in der Firebase Console Änderungen an der Remote Config Servervorlage vor und greifen Sie dann noch einmal auf die Funktion zu, um die Änderungen zu sehen.
Schritt 7: Funktion in Google Cloud bereitstellen
Nachdem Sie die Funktion getestet und überprüft haben, können Sie sie in Google Cloud bereitstellen und die Live-Funktion testen.
Funktion bereitstellen
Stellen Sie die Funktion mit der Firebase CLI bereit:
firebase deploy --only functions
Nicht authentifizierten Zugriff auf die Funktion blockieren
Wenn Funktionen mit Firebase bereitgestellt werden, sind nicht authentifizierte Aufrufe standardmäßig zulässig, sofern die Richtlinie Ihrer Organisation dies nicht einschränkt. Während des Tests und bevor Sie die Funktion mit App Check schützen, empfehlen wir, nicht authentifizierte Zugriffe zu blockieren.
So blockieren Sie nicht authentifizierte Zugriffe auf die Funktion:
Öffnen Sie in der Google Cloud Konsole Cloud Run.
Klicken Sie auf
generateWithVertexund dann auf den Tab Sicherheit.Aktivieren Sie Authentifizierung erforderlich und klicken Sie dann auf Speichern.
Nutzerkonto für die Verwendung der Anmeldedaten des Admin SDK Dienstkontos konfigurieren
Da das Admin SDK Dienstkonto alle erforderlichen Rollen und Berechtigungen hat, um die Funktion auszuführen und mit der Remote Config und der Vertex AI Gemini API zu interagieren, sollten Sie es verwenden, um die Funktion auszuführen. Dazu müssen Sie in der Lage sein, Token für das Konto über Ihr Nutzerkonto zu erstellen.
In den folgenden Schritten wird beschrieben, wie Sie Ihr Nutzerkonto und die Funktion so konfigurieren, dass sie mit den Admin SDK Berechtigungen des Dienstkontos ausgeführt werden.
- Aktivieren Sie in der Google Cloud Konsole die IAM Service Account Credentials API.
- Weisen Sie Ihrem Nutzerkonto die Rolle Dienstkonto-Token-Ersteller zu: Öffnen Sie in der Google Cloud Console IAM & Verwaltung > IAM, wählen Sie Ihr Nutzer konto aus und klicken Sie dann auf Hauptkonto bearbeiten > Weitere Rolle hinzufügen.
Wählen Sie Dienstkonto-Token-Ersteller aus und klicken Sie dann auf Speichern.
Weitere Informationen zur Identitätsübernahme von Dienstkonten finden Sie in der Google Cloud Dokumentation unter Identitätsübernahme von Dienstkonten.
Öffnen Sie in der Google Cloud Console Cloud Functions Seite und klicken Sie in der Liste Funktionen auf die Funktion generateWithVertex.
Wählen Sie Trigger > Bearbeiten aus und maximieren Sie Laufzeit-, Build-, Verbindungs- und Sicherheitseinstellungen.
Ändern Sie auf dem Tab Laufzeit das Laufzeitdienstkonto in das Admin SDK-Konto.
Klicken Sie auf Weiter und dann auf Bereitstellen.
Die gcloud CLI einrichten
Wenn Sie die Funktion sicher über die Befehlszeile ausführen und testen möchten, müssen Sie sich beim Cloud Functions Dienst authentifizieren und ein gültiges Authentifizierungstoken abrufen.
Installieren und konfigurieren Sie die gcloud CLI, um die Tokengenerierung zu aktivieren:
Wenn die gcloud CLI noch nicht auf Ihrem Computer installiert ist, installieren Sie sie wie unter gcloud CLI installieren beschrieben.
Rufen Sie Anmeldedaten für Ihr Google Cloud Konto ab:
gcloud auth loginLegen Sie Ihre Projekt-ID in gcloud fest:
gcloud config set project PROJECT_ID
Funktion testen
Jetzt können Sie die Funktion in Google Cloud testen. Testen Sie mit diesem Befehl die Funktion:
curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json"
Versuchen Sie es noch einmal mit vom Nutzer bereitgestellten Daten:
curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20dogs \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json"
Sie können jetzt Änderungen an der Remote Config Servervorlage vornehmen, diese Änderungen veröffentlichen und verschiedene Optionen testen.
Nächste Schritte
- Firebase empfiehlt, App Check zu sichern Cloud Functions. Weitere Informationen zum Schützen der Funktion mit App Check finden Sie unter Erzwingung App Check für Cloud Functions aktivieren.
- Unter Call the Vertex AI Gemini API with Remote Config and App Checkfinden Sie ein Beispiel für eine aufrufbare Funktion mit serverseitiger Remote Config und App Check.
- Weitere Informationen zu Cloud Functions für Firebase.
- Weitere Informationen zur Verwendung von in ServerumgebungenRemote Config