Usa Remote Config en entornos de servidor

Firebase Remote Config ahora admite la configuración del servidor con la versión 12.1.0 o posterior del SDK de Firebase Admin para Node.js. Esta nueva función te permite administrar de forma dinámica el comportamiento y la configuración de las aplicaciones 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. Luego, el servidor puede evaluar la plantilla con cada solicitud entrante y usar su propia lógica para entregar una respuesta personalizada con una latencia muy baja.

Con Remote Config del servidor, puedes hacer lo siguiente:

  • Define parámetros de configuración para las aplicaciones que se ejecutan en el servidor o a las que se accede a través de él, lo que permite casos de uso como la configuración remota de mensajes y parámetros de modelos de IA y otras integraciones para garantizar que tus claves de API permanezcan seguras.
  • Ajusta los parámetros de forma dinámica en respuesta a los cambios en tu entorno o en otros cambios en la aplicación, como la actualización de los parámetros del LLM y los 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 del parámetro y úsalo 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 autoalojado.

Antes de comenzar

Sigue las instrucciones que se indican 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 las 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 que deseas actualizar de forma dinámica con 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 la aplicación se ejecute correctamente, incluso si se interrumpe la conexión con el 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 instrucciones 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 consulta 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 Los 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 quieres usar con Remote Config, configura tu aplicación para que establezca los valores predeterminados, recupere la plantilla de Remote Config específica del servidor y use sus valores. 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 Cloud Functions, 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 la aplicación se ejecute correctamente, incluso si se interrumpe la conexión con el servidor de backend de Remote Config, agrega valores predeterminados para cada parámetro a la app. Para ello, agrega un defaultConfig dentro de la 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 desde ella:

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

    Por ejemplo, puedes establecer un ID de instalación de Firebase como el randomizationId, o un ID de usuario, para asegurarte de que cada usuario que se ponga en contacto con tu servidor se agregue al grupo aleatorio adecuado. El siguiente ejemplo es un ejemplo básico, pero puedes configurar tu servidor de modo que genere diferentes randomizationIds para distintas solicitudes de clientes, a fin de asegurarte de 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:

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

    Por ejemplo, si implementas Vertex AI en tu servidor y quieres cambiar el modelo y sus parámetros, te recomendamos configurar parámetros para model_name y generationConfig. Este es un ejemplo de cómo podrías 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 el servidor es de larga duración (en lugar de un entorno sin servidores), usa setInterval para volver a cargar la plantilla de forma periódica y asegurarte de recuperar de forma periódica la plantilla más actualizada del servidor de Remote Config.

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

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

Para crear una plantilla de Remote Config específica del servidor, sigue estos pasos:

  1. Abre la página de parámetros de Remote Config de Firebase console y, en el selector Cliente/Servidor, selecciona 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 defaultConfig que establezcas en Configura tu aplicación del servidor cuando recuperes y evalúes la plantilla, y asignes estos valores a las 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 como una Cloud Function o con Cloud Run

Si tu aplicación de servidor es ligera y está controlada por eventos, deberías considerar implementar tu código como una Cloud Function. Por ejemplo, supongamos que tienes una app que incluye diálogos con personajes potenciados por APIs de IA generativa, como Google AI y Vertex AI. En este caso, podrías alojar la lógica de entrega de tu LLM en una Cloud Function que tu app llame a pedido. Aprende a implementar tu app como una Cloud Function en Primeros pasos: Escribe, prueba e implementa tus primeras funciones.

Si tu aplicación está diseñada para ser de larga duración (por ejemplo, una app web con recursos), puedes considerar Cloud Run. Para implementar tu app de servidor con Cloud Run, sigue la guía de la Guía de inicio rápido: Implementa 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 Cloud Functions frente a Cloud Run: cuándo usar uno por sobre el otro.