Usar a Configuração remota em ambientes de servidor

A Configuração remota do Firebase agora oferece suporte à configuração do lado do servidor usando o SDK Admin para Node.js do Firebase v12.1.0 ou versões mais recentes. Esse novo recurso permite gerenciar dinamicamente o comportamento e a configuração de aplicativos do lado do servidor usando a Configuração remota. Isso inclui implementações sem servidor, como o Cloud Functions.

Ao contrário dos SDKs de cliente do Firebase, que buscam uma configuração específica do cliente derivada do modelo da Configuração remota, o SDK da Configuração remota do lado do servidor faz o download de um modelo completo da Configuração remota do Firebase. Seu servidor pode avaliar o modelo com cada solicitação recebida e usar a própria lógica para exibir uma resposta personalizada com latência muito baixa.

Com a Configuração remota do lado do servidor, você pode:

  • Defina parâmetros de configuração para aplicativos executados no servidor ou acessados por ele, o que permite casos de uso como a configuração remota de parâmetros de modelo de IA, prompts e outras integrações, para garantir que suas chaves de API permaneçam seguras.
  • ajustar dinamicamente os parâmetros em resposta a mudanças no ambiente ou no aplicativo, como a atualização de parâmetros de LLM e endpoints de modelo.
  • Controle os custos atualizando remotamente as APIs chamadas pelo servidor.
  • gerar configurações personalizadas imediatamente para clientes que acessam seu servidor;
  • Registre quais clientes receberam um valor de parâmetro e use-o no Cloud Functions como parte de um sistema de verificação de direitos.

É possível implantar a Configuração remota do lado do servidor no Cloud Run, no Cloud Functions ou em ambientes de servidor auto-hospedados.

Antes de começar

Siga as instruções em Adicionar o SDK Admin do Firebase ao seu servidor para criar um projeto do Firebase, configurar uma conta de serviço e adicionar o SDK Admin para Node.js do Firebase ao seu servidor.

Etapa 1: inicializar o SDK Admin para Node.js do Firebase e autorizar solicitações de API

Quando você inicializa o SDK Admin sem parâmetros, o SDK usa o Application Default Credentials do Google e lê as opções da variável de ambiente GOOGLE_APPLICATION_CREDENTIALS. Por exemplo, para inicializar o SDK e adicionar a Configuração remota:

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

// Initialize Firebase
const firebaseApp = initializeApp();

Etapa 2: identificar os valores de parâmetros padrão do aplicativo do servidor

Identifique as variáveis no seu app que você quer atualizar dinamicamente com a Configuração remota. Em seguida, considere quais variáveis precisam ser definidas por padrão no seu aplicativo e quais devem ser seus valores padrão. Isso garante que o aplicativo seja executado com êxito mesmo que a conexão com o servidor de back-end da Configuração remota seja interrompida.

Por exemplo, se você estiver criando um aplicativo de servidor que gerencia uma função de IA generativa, é possível definir um nome de modelo padrão, um preâmbulo do prompt e uma configuração de IA generativa, como estes:

Nome do parâmetro Descrição Tipo Valor padrão
model_name Nome da API do modelo String gemini-1.5-pro
preamble_prompt prompt para prefixar a consulta do usuário, 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 que serão enviados ao modelo JSON {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

Etapa 3: configurar o aplicativo do servidor

Depois de determinar os parâmetros que você quer usar com a Configuração remota, configure seu aplicativo para definir valores padrão, buscar o modelo específico do servidor e usar os valores dele. As etapas a seguir descrevem como configurar o aplicativo Node.js.

  1. Acesse e carregue o modelo.

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

    Se você estiver usando Node.js em um Cloud Functions, poderá usar o getServerTemplate assíncrono para buscar e carregar o modelo em uma única etapa:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. Para garantir que o aplicativo seja executado com êxito mesmo que a conexão com o servidor de back-end da Configuração remota seja interrompida, adicione valores padrão para cada parâmetro ao app. Para fazer isso, adicione um defaultConfig na função de modelo 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. Depois que o modelo for carregado, use template.evaluate() para importar parâmetros e valores do modelo:

    // Add template parameters to config
    const config = template.evaluate();
    
  4. Como opção, se você definir condições de porcentagem no modelo da Configuração remota, defina e forneça o randomizationId que quer usar para avaliar as condições na função template.evaluate().

    Por exemplo, você pode definir um ID de instalação do Firebase como randomizationId ou um ID do usuário para garantir que cada usuário que entra em contato com o servidor seja adicionado ao grupo aleatório adequado. O exemplo abaixo é um exemplo básico, mas você pode configurar seu servidor para gerar randomizationIds diferentes para solicitações de cliente diferentes. Isso garante que os usuários recebam valores consistentes da Configuração remota com base na participação deles em grupos de condições de porcentagem.

    Para mais informações sobre condições percentuais, consulte Usuário em porcentagem aleatória.

    // 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. Em seguida, extraia os valores de parâmetro necessários da constante de configuração. Use getters para transmitir os valores da Configuração remota para o formato esperado. Veja a seguir os tipos compatíveis:

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

    Por exemplo, se você estiver implementando a Vertex AI no seu servidor e quiser alterar o modelo e os parâmetros dele, convém configurar parâmetros para model_name e generationConfig. Confira um exemplo de como acessar os valores da Configuração remota:

    // 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. Se o servidor for de longa duração, e não um ambiente sem servidor, use setInterval para recarregar periodicamente o modelo e garantir que você busque periodicamente o modelo mais atualizado no servidor da Configuração remota.

Etapa 4: definir valores de parâmetros específicos do servidor na Configuração remota

Em seguida, crie um modelo de servidor da Configuração remota e defina os parâmetros e valores para usar no seu app.

Para criar um modelo da Configuração remota específico do servidor:

  1. Abra a página de parâmetros da Configuração remota do Console do Firebase e, no seletor Cliente/servidor, selecione Servidor.
  2. Defina os parâmetros da Configuração remota com os mesmos nomes e tipos de dados que os parâmetros definidos no seu app e forneça os valores. Esses valores vão substituir o defaultConfig definido em Configurar o aplicativo de servidor quando você buscar e avaliar o modelo e atribuir esses valores às variáveis.
  3. Se quiser, defina condições de porcentagem para aplicar persistentemente um valor a uma amostra aleatória de instâncias. Para mais informações sobre condições de porcentagem, consulte Usuário em porcentagem aleatória.
  4. Quando terminar de adicionar parâmetros, clique em Publicar alterações.
  5. Revise as alterações e clique em Publicar alterações novamente.

Etapa 5: implantar como uma função do Cloud ou usando o Cloud Run

Se o aplicativo do servidor for leve e orientado a eventos, considere a implantação do código como uma função do Cloud. Por exemplo, digamos que você tenha um app que inclui diálogos entre personagens com APIs de IA generativa, como Google AI e Vertex AI. Nesse caso, é possível hospedar a lógica de exibição do LLM em uma função do Cloud que o app chama sob demanda. Aprenda a implantar o app como uma função do Cloud em Primeiros passos: escrever, testar e implantar as primeiras funções.

Se o aplicativo for de longa duração (por exemplo, um app da Web com recursos), considere o Cloud Run. Para implantar o app de servidor com o Cloud Run, siga o guia em Guia de início rápido: implantar um serviço Node.js no Cloud Run.

Para mais informações sobre os melhores casos de uso do Cloud Run e do Cloud Functions, consulte Cloud Functions vs. Cloud Run: quando usar um em vez do outro.