In diesem Leitfaden wird beschrieben, wie Sie mit Cloud Functions der 2. Generationserverseitige Remote Config verwenden, um serverseitige Aufrufe an die Vertex AI Gemini API zu senden.
In dieser Anleitung fügen Sie Remote Config einer chatbotähnlichen Funktion hinzu, die ein Gemini-Modell verwendet, um Nutzerfragen zu beantworten. Remote Config verwaltet Gemini API-Eingaben, einschließlich eines Prompts, den Sie eingehenden Nutzeranfragen voranstellen, und Sie können diese Eingaben bei Bedarf über die Firebase-Konsole aktualisieren. Sie verwenden Firebase Local Emulator Suite auch, um die Funktion zu testen und zu debuggen. Nachdem Sie überprüft haben, dass sie funktioniert, stellen Sie sie bereit und testen sie auf Google Cloud.
Vorbereitung
In dieser Anleitung wird davon ausgegangen, dass Sie mit der Entwicklung von Anwendungen mit JavaScript vertraut sind.
Firebase-Projekt einrichten
Wenn Sie noch kein Firebase-Projekt haben:
Melden Sie sich in der Firebase-Konsole 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 Drop-down-Menü im ersten Schritt des Workflows „Projekt erstellen“ den Namen Ihres Google Cloud-Projekts auswählen.
Wenn Sie dazu aufgefordert werden, müssen Sie Google Analytics nicht 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:
Fahren Sie mit Entwicklungsumgebung konfigurieren fort.
Entwicklungsumgebung konfigurieren
Sie benötigen eine Node.js-Umgebung, um Funktionen zu schreiben, und die Firebase-Befehlszeile, um Funktionen in der Cloud Functions-Laufzeitumgebung bereitzustellen.
Installieren Sie Node.js und npm.
Wir empfehlen, Node Version Manager zu verwenden, um Node.js und npm zu installieren.
Installieren Sie die Firebase-Befehlszeile mit Ihrer bevorzugten Methode. Wenn Sie die CLI beispielsweise mit npm installieren möchten, führen Sie diesen Befehl aus:
npm install -g firebase-tools@latest
Mit diesem Befehl wird der global verfügbare
firebase
-Befehl installiert. Wenn dieser Befehl fehlschlägt, müssen Sie möglicherweise die npm-Berechtigungen ändern.Wenn Sie auf die neueste Version von
firebase-tools
aktualisieren möchten, führen Sie denselben Befehl noch einmal aus.Installieren Sie
firebase-functions
undfirebase-admin
und verwenden Sie--save
, um sie auf Ihrempackage.json
zu speichern:npm install firebase-functions@latest firebase-admin@latest --save
Sie können jetzt mit der Implementierung dieser Lösung fortfahren.
Implementierung
So erstellen, testen und stellen Sie Ihre Cloud Functions der 2. Generation mit Remote Config und Vertex AI bereit:
- Aktivieren Sie die empfohlenen APIs für Vertex AI in der Google Cloud-Konsole.
- Projekt initialisieren und Node-Abhängigkeiten installieren
- IAM-Berechtigungen für Ihr Admin SDK-Dienstkonto konfigurieren und Schlüssel speichern
- Funktion erstellen
- Erstellen Sie eine serverspezifische Remote Config-Vorlage.
- Stellen Sie Ihre Funktion bereit und testen Sie sie in der Firebase Local Emulator Suite.
- Stellen Sie Ihre Funktion in Google Cloud bereit.
Schritt 1: Empfohlene Vertex AI-APIs in der Google Cloud-Konsole aktivieren
- Öffnen Sie die Google Cloud-Konsole und wählen Sie Ihr Projekt aus, wenn Sie dazu aufgefordert werden.
- Geben Sie oben in der Console im Feld Suchen den Wert 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 einen Moment dauern, bis die API aktiviert 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. Kehren Sie nach der Aktivierung eines Abrechnungskontos 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 login
Führen Sie den folgenden Befehl aus, um Cloud Functions for Firebase zu initialisieren:
firebase init functions
Wählen Sie Vorhandenes Projekt verwenden aus und geben Sie Ihre Projekt-ID an.
Wenn Sie aufgefordert werden, die Sprache auszuwählen, wählen Sie Javascript aus und drücken Sie die Eingabetaste.
Wählen Sie für alle anderen Optionen die Standardwerte aus.
Im aktuellen Verzeichnis wird ein
functions
-Verzeichnis erstellt. Darin finden Sie eineindex.js
-Datei, mit der Sie Ihre Funktion erstellen, einnode_modules
-Verzeichnis, das die Abhängigkeiten für Ihre Funktion enthält, und einepackage.json
-Datei, die die Paketabhängigkeiten enthält.Fügen Sie die Pakete Admin SDK und Vertex AI mit den folgenden Befehlen hinzu. Verwenden Sie
--save
, um sicherzustellen, dass sie in der Dateipackage.json
gespeichert werden:cd functions npm install firebase-admin@latest @google-cloud/vertexai --save
Ihre functions/package.json
-Datei 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, wird ein entsprechender Abschnitt angezeigt. Achten Sie außerdem darauf, dass die Version der Node-Engine mit der installierten Version von Node.js und der Version übereinstimmt, die Sie letztendlich auf Google Cloud ausführen. Wenn beispielsweise der engines
-Abschnitt in Ihrer package.json
als Node-Version 18 konfiguriert ist und Sie Node.js 20 verwenden, aktualisieren Sie die Datei, um Version 20 zu verwenden:
"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-Dienstkonto Admin SDK, um Ihre Funktion auszuführen.
- Rufen Sie in der Google Cloud-Konsole die Seite IAM & Verwaltung auf und suchen Sie nach dem Admin SDK-Dienstkonto (mit dem Namen
firebase-adminsdk
). - Wählen Sie das Konto aus und klicken Sie auf Identität bearbeiten. Die Seite „Zugriff bearbeiten“ wird angezeigt.
- Klicken Sie auf Weitere Rolle hinzufügen und 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 Invoker aus.
- Klicken Sie auf Speichern.
Exportieren Sie als Nächstes die Anmeldedaten für das Admin SDK-Dienstkonto und speichern Sie sie in der Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
.
- Öffnen Sie in der Google Cloud Console die Seite Anmeldedaten.
- Klicken Sie auf das Admin SDK-Dienstkonto, um die Seite Details 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-basierte Antworten generiert. Sie kombinieren mehrere Code-Snippets, um eine umfassende Funktion zu erstellen, die 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
functions/index.js
in einem Texteditor oder einer IDE. Löschen Sie den vorhandenen Inhalt und fügen Sie dann das Admin SDK-, Remote Config- und Vertex AI-SDK hinzu. Initialisieren Sie die App, indem Sie den folgenden Code in die Datei einfügen:
const { onRequest } = require("firebase-functions/v2/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 Ihrer Funktion verwendet werden, wenn keine Verbindung zum Remote Config-Server hergestellt werden kann. Bei dieser Lösung werden
textModel
,generationConfig
,safetySettings
,textPrompt
undlocation
als Remote Config-Parameter konfiguriert, die den Remote Config-Parametern entsprechen, die Sie später in diesem Leitfaden 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 Ihrer Funktion nützlich sein. In den folgenden Code-Snippets ist dieser Wert auffalse
festgelegt. Dadurch wird die Verwendung von Vertex AI übersprungen, während Sie die Bereitstellung der Basisfunktion testen. Wenn Sie den Wert auftrue
setzen, wird 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 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 Ihrer Funktion verwendet werden sollen. So erstellen Sie eine serverspezifische Remote Config-Vorlage:
- Öffnen Sie die Firebase Console, maximieren Sie im Navigationsmenü Run und wählen Sie Remote Config aus.
Wählen Sie oben auf der Seite Remote Config in der Auswahl 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 nicht zum ersten Mal verwenden, klicken Sie auf Parameter hinzufügen.
Definieren Sie die folgenden Remote Config-Parameter:
Parametername Beschreibung Typ Standardwert model_name
Modellname
Aktuelle Listen der Modellnamen, die Sie in Ihrem Code verwenden können, finden Sie unter Modellversionen und Lebenszyklus oder Verfügbare Modellnamen.String gemini-2.0-flash
prompt
Dem Nutzer-Prompt vorangestellter Prompt. 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_config
Parameter, die an das Modell gesendet werden sollen. JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]
safety_settings
Sicherheitseinstellungen für Vertex AI. JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]
location
Standort für das Ausführen des Vertex AI-Dienstes und des Modells. String us-central1
is_vertex_enabled
Optionaler Parameter, der steuert, ob Anfragen an Vertex AI gesendet werden. Boolesch true
Wenn Sie alle Parameter hinzugefügt haben, überprüfen Sie sie und ihre Datentypen noch einmal und klicken Sie dann auf Änderungen veröffentlichen.
Schritt 6: Funktion bereitstellen und in Firebase Local Emulator Suite testen
Jetzt können Sie Ihre Funktion mit dem Firebase Local Emulator Suite lokal bereitstellen und testen.
Achten Sie darauf, dass Sie
GOOGLE_APPLICATION_CREDENTIALS
als Umgebungsvariable festgelegt haben, wie in Schritt 3: IAM-Berechtigungen für Ihr Admin SDK-Dienstkonto konfigurieren und Schlüssel speichern beschrieben. Stellen Sie die Funktion dann aus dem übergeordneten Verzeichnis des Verzeichnissesfunctions
im Firebase-Emulator bereit:firebase emulators:start --project PROJECT_ID --only functions
Öffnen Sie die Seite mit den Emulatorlogs. Daran sollte zu erkennen sein, dass Ihre Funktion geladen wurde.
Rufen Sie Ihre Funktion mit dem folgenden Befehl auf. 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/generateWithVertex
Warten Sie auf eine Antwort und kehren Sie dann zur Seite mit den Firebase Emulator-Logs oder zur Konsole zurück, um nach Fehlern oder Warnungen zu suchen.
Senden Sie einige Nutzereingaben. Da
is_vertex_enabled
in Ihrer Remote Config-Servervorlage konfiguriert ist, sollte dadurch über Vertex AI Gemini API auf das Modell Gemini zugegriffen werden. Dies kann zu Gebühren führen:curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20cats
Nehmen Sie Änderungen an Ihrer Remote Config-Servervorlage in der Firebase-Konsole vor und rufen Sie dann Ihre Funktion noch einmal auf, um die Änderungen zu sehen.
Schritt 7: Funktion in Google Cloud bereitstellen
Nachdem Sie Ihre Funktion getestet und überprüft haben, können Sie sie in Google Cloud bereitstellen und die Live-Funktion testen.
Funktion bereitstellen
Stellen Sie Ihre 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 vor der Sicherung mit App Check empfehlen wir, nicht authentifizierten Zugriff zu blockieren.
So blockieren Sie nicht authentifizierte Zugriffe auf die Funktion:
Öffnen Sie Cloud Run in der Google Cloud Console.
Klicken Sie auf
generateWithVertex
und dann auf den Tab Sicherheit.Aktivieren Sie Authentifizierung erforderlich und klicken Sie auf Speichern.
Nutzerkonto für die Verwendung der Admin SDK-Dienstkontoanmeldedaten konfigurieren
Da das Dienstkonto Admin SDK alle erforderlichen Rollen und Berechtigungen zum Ausführen der Funktion und zur Interaktion mit Remote Config und Vertex AI Gemini API hat, sollten Sie es zum Ausführen der Funktion verwenden. Dazu müssen Sie über Ihr Nutzerkonto Tokens für das Konto erstellen können.
In den folgenden Schritten wird beschrieben, wie Sie Ihr Nutzerkonto und die Funktion so konfigurieren, dass sie mit den Berechtigungen des Dienstkontos Admin SDK ausgeführt werden.
- Aktivieren Sie in der Google Cloud Console die IAM Service Account Credentials API.
- Weisen Sie Ihrem Nutzerkonto die Rolle Ersteller von Dienstkonto-Tokens zu: Öffnen Sie in der Google Cloud-Konsole IAM & Verwaltung > IAM, wählen Sie Ihr Nutzerkonto aus und klicken Sie dann auf Hauptkonto bearbeiten > Weitere Rolle hinzufügen.
Wählen Sie Ersteller von Dienstkonto-Tokens aus und klicken Sie auf Speichern.
Ausführlichere Informationen zum Identitätswechsel für Dienstkonten finden Sie in der Google Cloud-Dokumentation unter Identitätswechsel für Dienstkonten.
Öffnen Sie die Google Cloud-Konsole 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, Verbindungen 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 Ihre 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.
So aktivieren Sie die Tokenerstellung:
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 login
Legen Sie Ihre Projekt-ID in gcloud fest:
gcloud config set project PROJECT_ID
Funktion testen
Jetzt können Sie Ihre Funktion in Google Cloud testen. Führen Sie den folgenden Befehl aus, um die Funktion zu testen:
curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json"
Erneuter Versuch 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 Ihrer Remote Config-Servervorlage vornehmen, diese Änderungen veröffentlichen und verschiedene Optionen testen.
Nächste Schritte
- Firebase empfiehlt, App Check zu verwenden, um Cloud Functions zu schützen. Weitere Informationen zum Sichern Ihrer Funktion mit App Check finden Sie unter App Check-Durchsetzung für Cloud Functions aktivieren.
- Remote Config und App Check auf der Serverseite mit einer Beispiel-Funktion zum Aufrufen unter Vertex AI Gemini API mit Remote Config und App Check aufrufen testen.
- Weitere Informationen zu Cloud Functions für Firebase
- Weitere Informationen zur Verwendung von Remote Config in Serverumgebungen