Cloud Functions für Firebase hat eine onCallGenkit-Methode, mit der Sie
eine aufrufbare Funktion mit einer Genkit
-Aktion (einem Flow) erstellen können. Diese Funktionen können mit genkit/beta/client oder den
Cloud Functions-Client-SDKs,
die automatisch Authentifizierungsinformationen hinzufügen.
Hinweis
- Sie sollten mit dem Konzept der Flows in Genkit und ihrer Erstellung vertraut sein. Die Anleitung auf dieser Seite setzt voraus, dass Sie bereits einige Flows definiert haben, die Sie bereitstellen möchten.
- Es ist hilfreich, aber nicht erforderlich, wenn Sie Cloud Functions für Firebase bereits verwendet haben.
Firebase-Projekt einrichten
Erstellen Sie in der Firebase Console ein neues Firebase-Projekt oder wählen Sie ein vorhandenes aus.
Führen Sie ein Upgrade des Projekts auf den Blaze-Tarif durch. Dieser ist für die Produktionsbereitstellung von Cloud Functions erforderlich.
Installieren Sie die Firebase CLI.
Melden Sie sich mit der Firebase CLI an:
firebase loginfirebase login --reauth # alternative, if necessaryfirebase login --no-localhost # if running in a remote shellErstellen Sie ein neues Projektverzeichnis:
export PROJECT_ROOT=~/tmp/genkit-firebase-project1mkdir -p $PROJECT_ROOTInitialisieren Sie ein Firebase-Projekt im Verzeichnis:
cd $PROJECT_ROOTfirebase init functions
Auf dieser Seite wird davon ausgegangen, dass Sie Ihre Funktionen in JavaScript schreiben.
Flow in onCallGenkit einbinden
Nachdem Sie ein Firebase-Projekt mit Cloud Functions eingerichtet haben, können Sie Flow-Definitionen in das Verzeichnis functions des Projekts kopieren oder dort schreiben. Hier ist ein Beispiel-Flow, um dies zu veranschaulichen:
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, }); const jokeTeller = ai.defineFlow({ name: "jokeTeller", inputSchema: z.string().nullable(), outputSchema: z.string(), streamSchema: z.string(), }, async (jokeType = "knock-knock", {sendChunk}) => { const prompt = `Tell me a ${jokeType} joke.`; // Call the `generateStream()` method to // receive the `stream` async iterable. const {stream, response: aiResponse} = ai.generateStream(prompt); // Send new words of the generative AI response // to the client as they are generated. for await (const chunk of stream) { sendChunk(chunk.text); } // Return the full generative AI response // to clients that may not support streaming. return (await aiResponse).text; }, );
Wenn Sie einen solchen Flow bereitstellen möchten, binden Sie ihn in onCallGenkit ein, das in firebase-functions/https verfügbar ist. Diese Hilfsmethode bietet alle Funktionen aufrufbarer Funktionen und unterstützt automatisch sowohl Streaming- als auch JSON-Antworten.
const {onCallGenkit} = require("firebase-functions/https");
exports.tellJoke = onCallGenkit({ // Bind the Gemini API key secret parameter to the function. secrets: [apiKey], }, // Pass in the genkit flow. jokeTeller, );
API-Anmeldedaten für bereitgestellte Flows verfügbar machen
Nach der Bereitstellung müssen sich Ihre Flows bei allen Remote-Diensten authentifizieren können, von denen sie abhängig sind. Die meisten Flows benötigen mindestens Anmeldedaten für den Zugriff auf den verwendeten Model API-Dienst.
Führen Sie für dieses Beispiel je nach ausgewähltem Modellanbieter einen der folgenden Schritte aus:
Gemini (Google AI)
Prüfen Sie, ob Google AI in Ihrer Region verfügbar ist.
Generieren Sie einen API-Schlüssel für die Gemini API mit Google AI Studio.
Speichern Sie Ihren API-Schlüssel in Cloud Secret Manager:
firebase functions:secrets:set GOOGLE_GENAI_API_KEYDieser Schritt ist wichtig, um zu verhindern, dass Ihr API-Schlüssel versehentlich weitergegeben wird. Er gewährt Zugriff auf einen potenziell kostenpflichtigen Dienst.
Weitere Informationen zum Verwalten von Secrets finden Sie unter Vertrauliche Konfigurationsinformationen speichern und darauf zugreifen.
Bearbeiten Sie
src/index.jsund fügen Sie nach den vorhandenen Importen Folgendes hinzu:const {defineSecret} = require("firebase-functions/params");
// Store the Gemini API key in Cloud Secret Manager. const apiKey = defineSecret("GOOGLE_GENAI_API_KEY");
Deklarieren Sie dann in der Definition der aufrufbaren Funktion, dass die Funktion Zugriff auf diesen Secret-Wert benötigt:
// Bind the Gemini API key secret parameter to the function. secrets: [apiKey],
Wenn Sie diese Funktion jetzt bereitstellen, wird Ihr API-Schlüssel in Cloud Secret Manager gespeichert und ist in der Cloud Functions-Umgebung verfügbar.
Gemini (Vertex AI)
Aktivieren Sie in der Cloud Console die Vertex AI API für Ihr Firebase-Projekt.
Prüfen Sie auf der IAM Seite, ob dem Standardmäßigen Compute-Dienstkonto die Rolle Vertex AI-Nutzer zugewiesen ist.
Das einzige Secret, das Sie für diese Anleitung einrichten müssen, ist das für den Modellanbieter. Im Allgemeinen müssen Sie jedoch für jeden Dienst, den Ihr Flow verwendet, etwas Ähnliches tun.
Optional: App Check-Erzwingung hinzufügen
Firebase App Check verwendet die native
Attestierung, um zu prüfen, ob Ihre API nur von Ihrer Anwendung aufgerufen wird.
onCallGenkit unterstützt die App Check-Erzwingung deklarativ.
export const generatePoem = onCallGenkit({
enforceAppCheck: true,
// Optional. Makes App Check tokens only usable once. This adds extra security
// at the expense of slowing down your app to generate a token for every API
// call
consumeAppCheckToken: true,
}, generatePoemFlow);
CORS (Cross-Origin Resource Sharing) konfigurieren
Mit der Option cors können Sie steuern, welche Ursprünge auf Ihre Funktion zugreifen können.
Standardmäßig ist CORS für aufrufbare Funktionen so konfiguriert, dass Anfragen von allen Ursprüngen zugelassen werden. Wenn Sie einige, aber nicht alle Cross-Origin-Anfragen zulassen möchten, übergeben Sie eine Liste mit bestimmten Domains oder regulären Ausdrücken, die zulässig sein sollen. Beispiel:
export const tellJoke = onCallGenkit({
cors: 'mydomain.com',
}, jokeTeller);
Vollständiges Beispiel
Nachdem Sie alle oben beschriebenen Änderungen vorgenommen haben, sieht Ihr bereitstellbarer Flow etwa so aus wie im folgenden Beispiel:
const {onCallGenkit} = require("firebase-functions/https"); const {defineSecret} = require("firebase-functions/params"); // Dependencies for Genkit. const {gemini15Flash, googleAI} = require("@genkit-ai/googleai"); const {genkit, z} = require("genkit"); // Store the Gemini API key in Cloud Secret Manager. const apiKey = defineSecret("GOOGLE_GENAI_API_KEY"); const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, }); const jokeTeller = ai.defineFlow({ name: "jokeTeller", inputSchema: z.string().nullable(), outputSchema: z.string(), streamSchema: z.string(), }, async (jokeType = "knock-knock", {sendChunk}) => { const prompt = `Tell me a ${jokeType} joke.`; // Call the `generateStream()` method to // receive the `stream` async iterable. const {stream, response: aiResponse} = ai.generateStream(prompt); // Send new words of the generative AI response // to the client as they are generated. for await (const chunk of stream) { sendChunk(chunk.text); } // Return the full generative AI response // to clients that may not support streaming. return (await aiResponse).text; }, ); exports.tellJoke = onCallGenkit({ // Bind the Gemini API key secret parameter to the function. secrets: [apiKey], }, // Pass in the genkit flow. jokeTeller, );
Flows in Firebase bereitstellen
Nachdem Sie Flows mit onCallGenkit definiert haben, können Sie sie wie andere Funktionen bereitstellen:
cd $PROJECT_ROOTfirebase deploy --only functions