Utiliser Remote Config dans des environnements de serveur

Firebase Remote Config prend désormais en charge la configuration côté serveur à l'aide de la version 12.1.0 ou ultérieure du SDK Firebase Admin Node.js. Cette nouvelle fonctionnalité vous permet de gérer dynamiquement le comportement et la configuration des applications côté serveur à l'aide de Remote Config. Cela inclut les implémentations sans serveur telles que Cloud Functions.

Contrairement aux SDK clients Firebase, qui extraient une configuration spécifique au client dérivée du modèle Remote Config, le SDK Remote Config côté serveur télécharge un modèle Remote Config complet à partir de Firebase. Votre serveur peut ensuite évaluer le modèle avec chaque requête entrante et utiliser sa propre logique pour diffuser une réponse personnalisée avec une latence très faible. Vous pouvez utiliser des conditions pour contrôler et personnaliser les réponses en fonction de pourcentages aléatoires et d'attributs client définis dans des signaux personnalisés.

Avec Remote Config côté serveur, vous pouvez:

  • Définissez des paramètres de configuration pour les applications exécutées sur votre serveur ou auxquelles vous accédez via celui-ci. Vous pouvez ainsi configurer à distance les paramètres et les invites du modèle d'IA, ainsi que d'autres intégrations, pour vous assurer que vos clés API restent sécurisées.
  • Ajustez dynamiquement les paramètres en réponse aux modifications de votre environnement ou d'autres modifications de l'application, comme la mise à jour des paramètres LLM et des points de terminaison du modèle.
  • Contrôlez les coûts en mettant à jour à distance les API appelées par votre serveur.
  • Générez des configurations personnalisées instantanément pour les clients qui accèdent à votre serveur.
  • Enregistrez les clients qui ont reçu une valeur de paramètre et utilisez-la dans Cloud Functions dans le cadre d'un système de validation des droits d'accès.

Vous pouvez déployer Remote Config côté serveur sur Cloud Run, Cloud Functions ou dans des environnements de serveur auto-hébergés.

Avant de commencer

Suivez les instructions de la section Ajouter le SDK Firebase Admin à votre serveur pour créer un projet Firebase, configurer un compte de service et ajouter le SDK Firebase Admin Node.js à votre serveur.

Étape 1: Initialiser le SDK Firebase Admin Node.js et autoriser les requêtes d'API

Lorsque vous initialisez le SDK Admin sans paramètre, il utilise les identifiants par défaut de l'application Google et lit les options de la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS. Par exemple, pour initialiser le SDK et ajouter Remote Config:

import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";

// Initialize Firebase
const firebaseApp = initializeApp();

Étape 2: Identifiez les valeurs de paramètre par défaut de votre application serveur

Identifiez les variables de votre application que vous souhaitez mettre à jour de manière dynamique avec Remote Config. Déterminez ensuite quelles variables doivent être définies par défaut dans votre application et quelles doivent être leurs valeurs par défaut. Cela garantit que votre application s'exécute correctement, même si sa connexion au serveur backend Remote Config est interrompue.

Par exemple, si vous écrivez une application serveur qui gère une fonction d'IA générative, vous pouvez définir un nom de modèle par défaut, un préambule d'invite et une configuration d'IA générative, comme suit:

Nom du paramètre Description Type Valeur par défaut
model_name Nom de l'API du modèle Chaîne gemini-1.5-pro
preamble_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 Les paramètres à envoyer au modèle JSON {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

Étape 3: Configurez votre application de serveur

Une fois que vous avez déterminé les paramètres à utiliser avec Remote Config, configurez votre application pour définir des valeurs par défaut, extraire le modèle Remote Config spécifique au serveur et utiliser ses valeurs. Les étapes suivantes décrivent comment configurer votre application Node.js.

  1. Accédez au modèle et chargez-le.

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = rc.initServerTemplate();
    
    // Load Remote Config
    await template.load();
    

    Si vous utilisez Node.js dans un Cloud Functions, vous pouvez utiliser la commande getServerTemplate asynchrone pour récupérer et charger le modèle en une seule étape:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. Pour vous assurer que votre application s'exécute correctement même si sa connexion au serveur backend Remote Config est interrompue, ajoutez des valeurs par défaut pour chaque paramètre à votre application. Pour ce faire, ajoutez un defaultConfig dans votre fonction de modèle initServerTemplate ou getServerTemplate:

    const template = rc.initServerTemplate({
      defaultConfig: {
        model_name: "gemini-pro",
        generation_config: '{"stopSequences": [], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}',
        preamble_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!"
      },
    });
    
    // Load Remote Config
    await template.load()
    
  3. Une fois le modèle chargé, utilisez template.evaluate() pour importer les paramètres et les valeurs du modèle:

    // Add template parameters to config
    const config = template.evaluate();
    
  4. Si vous définissez des conditions dans votre modèle Remote Config, vous pouvez définir et fournir les valeurs souhaitées:

    • Si vous utilisez des conditions de pourcentage, ajoutez l'randomizationId que vous souhaitez utiliser pour évaluer votre ou vos conditions dans la fonction template.evaluate().
    • Si vous utilisez des signaux personnalisés, définissez les attributs et leurs valeurs. Les signaux personnalisés sont disponibles avec le SDK Firebase Admin Node.js 12.5.0 ou version ultérieure.

    Par exemple, vous pouvez définir un ID d'installation Firebase comme randomizationId ou un ID utilisateur pour vous assurer que chaque utilisateur qui contacte votre serveur est ajouté au groupe aléatoire approprié, version comme signal personnalisé pour cibler des versions client spécifiques et platform comme signal personnalisé pour cibler la plate-forme client.

    Pour en savoir plus sur les conditions, consultez la section Types de règles de condition.

    // Add template parameters to `config`. Evaluates the
    // template and returns the parameter value assigned to
    // the group assigned to the {randomizationId} and version.
    const config = template.evaluate({
      randomizationId: "2ac93c28-c459-4760-963d-a3974ec26c04",
      version: "1.0",
      platform: "Android"
    });
    
    
  5. Ensuite, extrayez les valeurs de paramètre dont vous avez besoin à partir de la constante de configuration. Utilisez getters pour caster les valeurs de Remote Config dans le format attendu. Les types suivants sont acceptés:

    • Booléen: getBoolean
    • Objet : getValue
    • Numéro : getNumber
    • Chaîne : getString

    Par exemple, si vous implémentez Vertex AI sur votre serveur et que vous souhaitez modifier le modèle et ses paramètres, vous pouvez configurer des paramètres pour model_name et generationConfig. Voici un exemple de façon d'accéder aux valeurs de Remote Config:

    // Replace defaults with values from Remote Config.
    const generationConfig =
      JSON.parse(
        config.getString('generation_config'));
    
    const is_ai_enabled = config.getBool('is_ai_enabled');
    
    const model = config.getString('model_name');
    
    // Generates a prompt comprised of the Remote Config
    // parameter and prepends it to the user prompt
    const prompt = `${config.getString('preamble_prompt')} ${req.query.prompt}`;
    
  6. Si votre serveur est de longue durée, contrairement à un environnement sans serveur, utilisez setInterval pour recharger périodiquement le modèle afin de vous assurer que vous récupérez régulièrement le modèle le plus à jour à partir du serveur Remote Config.

Étape 4: Définir les valeurs des paramètres spécifiques au serveur dans Remote Config

Ensuite, créez un modèle Remote Config de serveur et configurez les paramètres et les valeurs à utiliser dans votre application.

Pour créer un modèle Remote Config spécifique au serveur:

  1. Ouvrez la page des paramètres Remote Config de la console Firebase, puis sélectionnez Server (Serveur) dans le sélecteur Client/Server (Client/Serveur).
  2. Définissez des paramètres Remote Config avec les mêmes noms et types de données que les paramètres que vous avez définis dans votre application, puis fournissez des valeurs. Ces valeurs remplaceront l'defaultConfig que vous avez définie dans Configurer votre application serveur lorsque vous extrayez et évaluez le modèle, puis attribuez ces valeurs à vos variables.
  3. Vous pouvez également définir des conditions pour appliquer de manière persistante des valeurs à un échantillon aléatoire d'instances ou à des signaux personnalisés que vous définissez. Pour en savoir plus sur les conditions, consultez la section Types de règles de condition.
  4. Lorsque vous avez terminé d'ajouter des paramètres, cliquez sur Publier les modifications.
  5. Examinez les modifications, puis cliquez à nouveau sur Publier les modifications.

Étape 5: Effectuez le déploiement avec Cloud Functions ou Cloud Run

Si votre application serveur est légère et basée sur des événements, envisagez de déployer votre code à l'aide de Cloud Functions. Par exemple, supposons que vous ayez une application qui inclut un dialogue de caractères optimisé par une API d'IA générative (par exemple, Google AI ou Vertex AI). Dans ce cas, vous pouvez héberger votre logique de diffusion LLM dans une fonction que votre application appelle à la demande.

Si votre application est conçue pour une exécution longue (par exemple, une application Web avec des éléments), vous pouvez envisager d'utiliser Cloud Run. Pour déployer votre application serveur avec Cloud Run, consultez le guide Démarrage rapide: déployer un service Node.js sur Cloud Run.

Pour en savoir plus sur les meilleurs cas d'utilisation de Cloud Run et de Cloud Functions, consultez Cloud Functions par rapport à Cloud Run: quand utiliser l'un plutôt que l'autre.