Ce guide explique comment commencer à utiliser Cloud Functions de 2e génération avec Remote Config côté serveur pour effectuer des appels côté serveur à Vertex AI Gemini API.
Dans ce tutoriel, vous allez ajouter Remote Config à une fonction semblable à un chatbot qui utilise le modèle Gemini pour répondre aux questions des utilisateurs. Remote Config va gérer les entrées Gemini API (y compris une invite que vous ajouterez au début des requêtes utilisateur entrantes), et vous pouvez mettre à jour ces entrées à la demande depuis Console Firebase. Vous utiliserez également Firebase Local Emulator Suite pour tester et déboguer la fonction. Après avoir vérifié qu'elle fonctionne, vous déploierez le tester sur Google Cloud.
Prérequis
Ce guide suppose que vous savez utiliser JavaScript pour développer des applications.
Configurer un projet Firebase
Si vous ne disposez pas encore d'un projet Firebase :
Connectez-vous à la console Firebase.
Cliquez sur Créer un projet, puis utilisez l'une des options suivantes :
- Option 1 : Créez un projet Firebase (et son projet Google Cloud sous-jacent automatiquement) en saisissant un nouveau nom de projet à la première étape du workflow "Créer un projet".
- Option 2 : "Ajouter Firebase" à un projet Google Cloud existant en sélectionnant le nom de votre projet Google Cloud dans le menu déroulant de la la première étape de la procédure le workflow de ML.
Lorsque vous y êtes invité, vous n'avez pas besoin de configurer Google Analytics pour utiliser cette solution.
Suivez les instructions à l'écran pour créer votre projet.
Si vous avez déjà un projet Firebase:
Passez à la section Configurer votre environnement de développement.
Configurer votre environnement de développement
Vous aurez besoin d'un environnement Node.js pour écrire des fonctions. vous aurez besoin de la CLI Firebase pour déployer des fonctions sur Cloud Functions de l'environnement d'exécution.
-
Pour installer Node.js et npm, nous vous recommandons d'utiliser Node Version Manager.
Installez la CLI Firebase à l'aide de la méthode de votre choix. Par exemple, pour installer la CLI à l'aide de npm, exécutez la commande suivante :
npm install -g firebase-tools@latest
Cette commande installe la commande
firebase
, disponible dans le monde entier. Si cette la commande échoue, vous devrez peut-être modifier les autorisations npm.Pour effectuer la mise à jour vers la dernière version de
firebase-tools
, réexécutez la même commande.Installez
firebase-functions
etfirebase-admin
, puis utilisez--save
pour les enregistrer dans votrepackage.json
:npm install firebase-functions@latest firebase-admin@latest --save
Vous êtes maintenant prêt à passer à la mise en œuvre de solution.
Implémentation
Suivez ces étapes pour créer, tester et déployer votre Cloud Functions avec Remote Config et Vertex AI:
- Activez les API recommandées Vertex AI dans la console Google Cloud.
- Initialisez votre projet et installez les dépendances de nœuds.
- Configurez les autorisations IAM pour votre compte de service Admin SDK et enregistrez votre clé.
- Créez la fonction.
- Créez un modèle Remote Config spécifique au serveur.
- Déployez votre fonction et testez-la dans la Firebase Local Emulator Suite.
- Déployez votre fonction sur Google Cloud.
Étape 1 : Activez les API recommandées Vertex AI dans la console Google Cloud
- Ouvrez la console Google Cloud, puis sélectionnez votre projet lorsque vous y êtes invité.
- Dans le champ Rechercher en haut de la console, saisissez Vertex AI, puis attendez que Vertex AI s'affiche dans les résultats.
- Sélectionnez Vertex AI. Le tableau de bord Vertex AI s'affiche.
Cliquez sur Activer toutes les API recommandées.
L'activation de l'API peut prendre quelques instants. Laissez la page active et ouverte jusqu'à la fin de l'activation.
Si la facturation n'est pas activée, vous êtes invité à ajouter ou à associer Cloud Billing compte. Après avoir activé un compte de facturation, revenez à la Vertex AI et vérifier que toutes les API recommandées sont activées.
Étape 2 : Initialiser votre projet et installer les dépendances Node
- Ouvrez un terminal sur votre ordinateur et accédez au répertoire dans lequel planifier la création de votre fonction.
Connectez-vous à Firebase :
firebase login
Exécutez la commande suivante pour initialiser Cloud Functions for Firebase :
firebase init functions
Sélectionnez Utiliser un projet existant et spécifiez l'ID de votre projet.
Lorsque vous êtes invité à sélectionner la langue à utiliser, choisissez JavaScript, puis appuyez sur Entrée.
Pour toutes les autres options, sélectionnez les valeurs par défaut.
Un répertoire
functions
est créé dans le répertoire actuel. Vous y trouverez un fichierindex.js
que vous utiliserez pour créer votre fonction, un répertoirenode_modules
contenant les dépendances de votre fonction et un fichierpackage.json
contenant les dépendances du package.Ajoutez les packages Admin SDK et Vertex AI en exécutant les commandes suivantes, en utilisant
--save
pour vous assurer qu'ils sont enregistrés dans votre fichierpackage.json
:cd functions npm install firebase-admin@latest @google-cloud/vertexai --save
Votre fichier functions/package.json
devrait maintenant se présenter comme suit, avec les dernières versions spécifiées :
{
"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
}
Notez que si vous utilisez ESLint, une strophe l'inclut. En outre, assurez-vous que la version du moteur de nœud correspond à la version installée de Node.js et à la version que vous exécutez sur Google Cloud. Par exemple, si
le strophe engines
de votre package.json
est configuré en tant que version de nœud 18.
vous utilisez Node.js 20, mettez à jour le fichier pour qu'il utilise la version 20:
"engines": {
"node": "20"
},
Étape 3: Configurez les autorisations IAM pour votre compte de service Admin SDK et enregistrez votre clé
Dans cette solution, vous allez utiliser le compte de service Admin SDK Firebase pour exécuter votre fonction.
- Dans la console Google Cloud, ouvrez le
IAM et Administration,
et recherchez le compte de service Admin SDK (nommé
firebase-adminsdk
). - Sélectionnez le compte, puis cliquez sur Modifier le compte principal. La page "Modifier l'accès" s'affiche.
- Cliquez sur Ajouter un autre rôle, puis sélectionnez Lecteur Remote Config.
- Cliquez sur Ajouter un autre rôle, puis sélectionnez Développeur AI Platform.
- Cliquez sur Ajouter un autre rôle, puis sélectionnez Vertex AI utilisateur.
- Cliquez sur Ajouter un autre rôle, puis sélectionnez Demandeur Cloud Run.
- Cliquez sur Enregistrer.
Exportez ensuite les identifiants du compte de service Admin SDK et enregistrez-les.
dans la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS
.
- Dans la console Google Cloud, ouvrez la page Identifiants.
- Cliquez sur le compte de service Admin SDK pour ouvrir la page Détails.
- Cliquez sur Clés.
- Cliquez sur Ajouter une clé > Créer une clé :
- Assurez-vous que le type de clé JSON est sélectionné, puis cliquez sur Créer.
- Téléchargez la clé dans un emplacement sécurisé sur votre ordinateur.
Depuis votre terminal, exportez la clé en tant que variable d'environnement:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
Étape 4 : Créez la fonction
À cette étape, vous allez créer une fonction qui gère l'entrée utilisateur et génère des réponses optimisées par l'IA. Vous combinerez plusieurs extraits de code pour créer une fonction complète qui initialise Admin SDK et Vertex AI Gemini API, configure les paramètres par défaut à l'aide de Remote Config récupère les derniers paramètres Remote Config, traite entrée utilisateur et renvoie une réponse à l'utilisateur.
- Dans votre codebase, ouvrez
functions/index.js
dans un éditeur de texte ou un IDE. Supprimez le contenu existant, puis ajoutez Admin SDK. Remote Config et le SDK Vertex AI, puis initialisez l'application en collant le code suivant dans le fichier:
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();
Configurez les valeurs par défaut que votre fonction utilisera si elle ne parvient pas à se connecter au serveur Remote Config. Cette solution configure
textModel
,generationConfig
,safetySettings
,textPrompt
etlocation
en tant que paramètres Remote Config correspondant aux paramètres Remote Config que vous configurerez plus loin dans ce guide. Pour plus des informations sur ces paramètres, consultez Client Vertex AI Node.js.Vous pouvez également configurer un paramètre pour déterminer si vous accéder à Vertex AI Gemini API (dans cet exemple, un paramètre appelé
vertex_enabled
). Cette configuration peut être utile lorsque vous testez votre fonction. Dans les extraits de code suivants, cette valeur est définie surfalse
, ce qui ignore l'utilisation de Vertex AI lorsque vous testez le déploiement de fonctions de base. Régler surtrue
appelle Vertex AI Gemini API.// Define default (fallback) parameter values for Remote Config. const defaultConfig = { // Default values for Vertex AI. model_name: "gemini-1.5-flash-preview-0514", 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 };
Créez la fonction et configurez Remote Config côté serveur :
// 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;
Configurez Vertex AI et ajoutez la logique de chat et de réponse :
// 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'); } });
Enregistrez et fermez le fichier.
Étape 5 : Créez un modèle Remote Config spécifique au serveur
Ensuite, créez un modèle Remote Config côté serveur et configurez les paramètres et les valeurs à utiliser dans votre fonction. Pour créer un tableau de bord spécifique Modèle Remote Config:
- Ouvrez la console Firebase. Dans le menu de navigation, développez Exécuter, puis sélectionnez Remote Config.
Dans le sélecteur Client/Serveur en haut de la page, sélectionnez Serveur. Remote Config.
- Si vous utilisez Remote Config ou des modèles de serveur pour la première fois, cliquez sur Créer une configuration. Le volet Créer votre premier paramètre côté serveur s'affiche.
- Si ce n'est pas la première fois que vous utilisez les modèles de serveur Remote Config, cliquez sur Ajouter un paramètre.
Définissez les paramètres Remote Config suivants:
Nom du paramètre Description Type Valeur par défaut model_name
Nom du modèle
Pour obtenir les listes à jour des noms de modèles à utiliser dans votre code, voir Modèle versions et cycles de vie ou Disponible les noms de modèles.Chaîne gemini-1.5-pro-preview-0514
prompt
Expression en préfixe à la requête de l'utilisateur. Chaîne 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
Paramètres à envoyer au modèle JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]
safety_settings
Sécurité paramètres pour Vertex AI. JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]
location
Emplacement pour exécuter le service et le modèle Vertex AI Chaîne us-central1
is_vertex_enabled
Paramètre facultatif qui contrôle si les requêtes sont envoyées à Vertex AI. Booléen true
Une fois les paramètres ajoutés, vérifiez-les et que le type de données est correct, puis cliquez sur Publier les modifications.
Étape 6 : Déployer votre fonction et la tester dans Firebase Local Emulator Suite
Vous pouvez maintenant déployer et tester votre fonction en local Firebase Local Emulator Suite
Assurez-vous d'avoir défini
GOOGLE_APPLICATION_CREDENTIALS
comme environnement comme décrit à l'Étape 3: Configurez les autorisations IAM pour votre Admin SDK et enregistrez votre . Ensuite, à partir de répertoire parent de votre répertoirefunctions
, déployez votre fonction sur le Émulateur Firebase:firebase emulators:start --project PROJECT_ID --only functions
Ouvrez la page des journaux de l'émulateur. Cela devrait indiquer que votre fonction a été chargée.
Accédez à votre fonction en exécutant la commande suivante, où PROJECT_ID est l'ID de votre projet ; LOCATION est la région que vous avez déployée. la fonction (par exemple,
us-central1
):curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex
Attendez une réponse, puis revenez à la page des journaux de l'émulateur Firebase ou à votre console, et recherchez d'éventuelles erreurs ou avertissements.
Essayez d'envoyer une entrée utilisateur, en notant que, comme
is_vertex_enabled
est configuré dans votre modèle de serveur Remote Config, il devrait accéder à Gemini via Vertex AI Gemini API et que des frais peuvent s'appliquer :curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20cats
Modifiez votre modèle de serveur Remote Config sur le Firebase, puis accédez de nouveau à votre fonction pour observer les modifications.
Étape 7 : Déployez votre fonction dans Google Cloud
Après avoir testé et vérifié votre fonction, vous êtes prêt à la déployer sur Google Cloud et tester la fonction active.
Déployer la fonction
Déployez votre fonction à l'aide de la CLI Firebase:
firebase deploy --only functions
Bloquer les accès non authentifiés à la fonction
Lorsque des fonctions sont déployées à l'aide de Firebase, les appels non authentifiés sont autorisé par défaut si la stratégie de votre organisation ne le restreint pas. Pendant les tests et avant la sécurisation avec App Check, nous recommandent de bloquer les accès non authentifiés.
Pour bloquer l'accès non authentifié à la fonction :
Dans la console Google Cloud, ouvrez Cloud Run :
Cliquez sur
generateWithVertex
, puis sur l'onglet Sécurité.Activez l'option Exiger l'authentification, puis cliquez sur Enregistrer.
Configurer votre compte utilisateur pour qu'il utilise les identifiants du compte de service Admin SDK
Étant donné que le compte de service Admin SDK dispose de tous les rôles et autorisations nécessaires pour exécuter la fonction et interagir avec Remote Config et Vertex AI Gemini API, vous devez l'utiliser pour exécuter votre fonction. À faire vous devez pouvoir créer des jetons pour le compte à partir de votre compte utilisateur.
Les étapes suivantes décrivent comment configurer votre compte utilisateur et la fonction à exécuter avec les droits du compte de service Admin SDK.
- Dans la console Google Cloud, activez l'API IAM Service Account Credentials.
- Attribuez à votre compte utilisateur le rôle Créateur de jetons du compte de service : console Google Cloud, ouvrez IAM et Admin > IAM, sélectionnez votre utilisateur puis cliquez sur Modifier le compte principal > Ajoutez un autre rôle.
Sélectionnez Créateur de jetons de compte de service, puis cliquez sur Enregistrer.
Pour en savoir plus sur l'emprunt d'identité de compte de service, consultez Compte de service usurpation d'identité dans la documentation Google Cloud.
Ouvrez la page Google Cloud console Cloud Functions et cliquez sur la fonction generateWithVertex dans la liste Functions (Fonctions).
Sélectionnez Déclencheur > Modifiez et développez Runtime, build, connections and paramètres de sécurité.
Dans l'onglet Runtime (Environnement d'exécution), remplacez le Runtime service account (Compte de service d'exécution) par le Compte SDK Admin.
Cliquez sur Suivant, puis sur Déployer.
Configurer gcloud CLI
Pour exécuter et tester de manière sécurisée votre fonction à partir de la ligne de commande, vous devez vous authentifier auprès du service Cloud Functions et obtenir un jeton d'authentification valide.
Pour activer la génération de jetons, installez et configurez gcloud CLI :
Si elle n'est pas déjà installée sur votre ordinateur, installez la CLI gcloud comme décrit dans la section Installer la CLI gcloud.
Obtenez les identifiants d'accès à votre compte Google Cloud :
gcloud auth login
Définissez l'ID de votre projet dans gcloud:
gcloud config set project PROJECT_ID
Tester votre fonction
Vous êtes maintenant prêt à tester votre fonction dans Google Cloud. Pour tester la fonction, exécutez la commande suivante:
curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json"
Réessayez avec les données fournies par l'utilisateur:
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"
Vous pouvez désormais modifier votre modèle de serveur Remote Config, publier ces modifications et tester différentes options.
Étapes suivantes
- Firebase recommande d'utiliser App Check pour sécuriser Cloud Functions Pour en savoir plus sur la sécurisation de votre fonction avec App Check, consultez Activer l'application de App Check pour Cloud Functions.
- Essayez un exemple de fonction appelable avec Remote Config et App Check côté serveur sur Appeler Vertex AI Gemini API avec Remote Config et App Check.
- En savoir plus sur Cloud Functions pour Firebase
- En savoir plus sur l'utilisation de Remote Config sur le serveur environnements Google.