Usar Remote Config en entornos de servidor

Firebase Remote Config ahora admite la configuración del servidor mediante la La versión 12.1.0 o una posterior del SDK de Firebase Admin Node.js. Esta nueva capacidad permite que administres de forma dinámica el comportamiento y la configuración de aplicaciones de los recursos del servidor con Remote Config. Esto incluye implementaciones sin servidores como Cloud Functions.

A diferencia de los SDK de cliente de Firebase, que recuperan una configuración específica del cliente derivada de la plantilla de Remote Config, el SDK de Remote Config del servidor descarga una plantilla completa de Remote Config. desde Firebase. El servidor podrá evaluar la plantilla con cada solicitud entrante y usa su propia lógica para entregar una respuesta personalizada con muy baja latencia.

Con Remote Config del servidor, puedes hacer lo siguiente:

  • Define parámetros de configuración para las aplicaciones que se ejecutan o a las que se accede a través del servidor, lo que permite casos de uso como la configuración remota de parámetros, instrucciones y otras integraciones del modelo de IA para garantizar que las claves de API se mantengan seguras.
  • Ajusta dinámicamente los parámetros en respuesta a los cambios en tu entorno o otros cambios en las aplicaciones, como la actualización de parámetros de LLM y extremos del modelo.
  • Para controlar los costos, actualiza de forma remota las APIs que llama tu servidor.
  • Genera configuraciones personalizadas sobre la marcha para los clientes que acceden a tu servidor.
  • Registra qué clientes recibieron un valor de parámetro y utilízalo en Cloud Functions como parte de un sistema de verificación de derechos.

Puedes implementar Remote Config del servidor en Cloud Run, Cloud Functions o entornos de servidor autoalojados.

Antes de comenzar

Sigue las instrucciones en Agrega el SDK de Firebase Admin a tu servidor para crear un proyecto de Firebase, configurar una cuenta de servicio y agregar el SDK de Firebase Admin para Node.js a tu servidor.

Paso 1: Inicializa el SDK de Firebase Admin para Node.js y autoriza las solicitudes a la API

Cuando inicializas el SDK de Admin sin parámetros, el SDK usa credenciales predeterminadas de la aplicación de Google y lee las opciones de la variable de entorno GOOGLE_APPLICATION_CREDENTIALS. Por ejemplo, para inicializar el SDK y agregar Remote Config, haz lo siguiente:

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

// Initialize Firebase
const firebaseApp = initializeApp();

Paso 2: Identifica los valores de los parámetros predeterminados para la aplicación de servidor

Identifica las variables de tu app con las que quieres actualizar de forma dinámica Remote Config Luego, considera qué variables se deben configurar de forma predeterminada en tu aplicación y cuáles deberían ser sus valores predeterminados. Esto garantiza que tu aplicación se ejecute con éxito incluso si se interrumpe la conexión al servidor de backend de Remote Config.

Por ejemplo, si escribes una aplicación de servidor que administra una función de IA generativa, puedes establecer un nombre de modelo predeterminado, un preámbulo de instrucción y una configuración de IA generativa, como la siguiente:

Nombre del parámetro Descripción Tipo Valor predeterminado
model_name Nombre de la API de modelo String gemini-1.5-pro
preamble_prompt Instrucción para anteponer a la pregunta del usuario 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 Parámetros para enviar al modelo JSON {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

Paso 3: Configura la aplicación de tu servidor

Después de determinar los parámetros que deseas utilizar con Remote Config, configura tu aplicación para establecer valores predeterminados, recuperar la plantilla de Remote Config específica del servidor y usar sus valores. El En los siguientes pasos, se describe cómo configurar tu aplicación de Node.js.

  1. Accede a la plantilla y cárgala.

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

    Si usas Node.js en una Cloud Function, puedes usar getServerTemplate asíncrono para recuperar y cargar la plantilla en un solo paso:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. Para asegurarte de que tu aplicación se ejecute correctamente, incluso si está conectada a el servidor de backend de Remote Config, agrega valores predeterminados para cada parámetro a tu app. Para ello, agrega un defaultConfig en tu Función de plantilla initServerTemplate o 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. Después de que se cargue la plantilla, usa template.evaluate() para importar parámetros y valores de la plantilla:

    // Add template parameters to config
    const config = template.evaluate();
    
  4. De manera opcional, si estableces condiciones de porcentaje en tu plantilla de Remote Config, define y proporciona el randomizationId que quieres usar para evaluar las condiciones de la función template.evaluate().

    Por ejemplo, puedes configurar un ID de instalación como randomizationId, o un ID de usuario, para garantizar que cada usuario que se comunique con tu servidor se agregue al grupo aleatorio apropiado. El el siguiente es un ejemplo básico, pero puedes configurar tu servidor a fin de generar randomizationIds diferentes para distintas solicitudes de clientes, para garantizar que los usuarios reciban valores coherentes de Remote Config según su membresía en grupos de condiciones de porcentaje.

    Para obtener más información sobre las condiciones de porcentaje, consulta Usuario en porcentaje aleatorio.

    // Set the randomizationId
    const randomizationId = "2ac93c28-c459-4760-963d-a3974ec26c04"
    
    // Add template parameters to `config`. Evaluates the
    // template and returns the parameter value assigned to
    // the group assigned to the {randomizationId}.
    const config = template.evaluate({
      randomizationId
    });
    
  5. A continuación, extrae los valores de parámetros que necesitas de la constante de configuración. Usa getters para transmitir los valores de Remote Config al formato esperado. Se admiten los siguientes tipos:

    • BOOLEAN getBoolean
    • Objeto: getValue
    • Número: getNumber
    • String: getString

    Por ejemplo, si estás implementando Vertex AI en tu servidor y quieres cambiar el modelo y los parámetros del modelo, podrías configurar los parámetros de model_name y generationConfig. Este es un ejemplo de cómo puedes acceder a los valores 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 tu servidor es de larga duración, que es el caso opuesto a un entorno sin servidores, usa setInterval para volver a cargar la plantilla de forma periódica y asegurarte de que obtienes periódicamente la plantilla más actualizada del servidor de Remote Config

Paso 4: Configura valores de parámetros específicos del servidor en Remote Config

A continuación, crea una plantilla de Remote Config para el servidor, configura los parámetros y valores para usar en tu app.

Para crear una plantilla Remote Config específica del servidor:

  1. Abre la página de parámetros de Remote Config de Firebase console y, en el selector de Cliente/Servidor, elige Servidor.
  2. Define los parámetros de Remote Config con los mismos nombres y tipos de datos que los parámetros que definiste en la app y proporciona valores. Estos valores anularán el valor de defaultConfig que estableciste en Configura tu aplicación de servidor cuando recuperas y evalúas la plantilla y asignas estos valores a tus variables.
  3. De manera opcional, establece condiciones de porcentaje para aplicar un valor de forma persistente a una muestra aleatoria de instancias. Para obtener más información sobre las condiciones de porcentaje, consulta Usuario en porcentaje aleatorio.
  4. Cuando hayas terminado de agregar los parámetros, haz clic en Publicar cambios.
  5. Revisa los cambios y vuelve a hacer clic en Publicar cambios.

Paso 5: Implementa con Cloud Functions o Cloud Run

Si tu aplicación de servidor es ligera y está controlada por eventos, deberías considerar implementar el código con Cloud Functions. Por ejemplo: Supongamos que tienes una app que incluye diálogos entre personajes potenciados por una API de IA generativa (por ejemplo, Google AI o Vertex AI). En este caso, puedes alojar tu lógica de entrega de LLM en una función que tu app llame según demanda.

Si tu aplicación está diseñada para ser de larga duración (por ejemplo, una app web con recursos) puedes usar Cloud Run. Para implementar tu app de servidor con Cloud Run, sigue la Guía de inicio rápido para implementar un servicio de Node.js en Cloud Run.

Para obtener más información sobre los mejores casos de uso de Cloud Run y Cloud Functions, consulta Diferencias entre Cloud Functions y Cloud Run: cuándo usar uno en lugar del otro.