Używaj Zdalnej konfiguracji w środowiskach serwerów

Zdalna konfiguracja Firebase obsługuje teraz konfigurację po stronie serwera za pomocą pakietu SDK Firebase Admin Node.js w wersji 12.1.0 lub nowszej. Ta nowa funkcja umożliwia dynamiczne zarządzanie działaniem i konfiguracją aplikacji po stronie serwera za pomocą Zdalnej konfiguracji. Obejmuje to implementacje bezserwerowe takie jak Cloud Functions.

W przeciwieństwie do pakietów SDK klienta Firebase, które pobierają konfigurację dla klienta pochodzącą z szablonu Zdalnej konfiguracji, pakiet SDK Zdalnej konfiguracji pobiera kompletny szablon Zdalnej konfiguracji z Firebase. Serwer może następnie oceniać szablon przy każdym przychodzącym żądaniu i używać własnej logiki, aby wysyłać dostosowaną odpowiedź przy bardzo krótkim czasie oczekiwania.

Zdalna konfiguracja po stronie serwera umożliwia:

  • Zdefiniuj parametry konfiguracji dla aplikacji działających na serwerze lub do nich otwieranych, co pozwala na takie przypadki użycia jak zdalne konfigurowanie parametrów modelu AI i promptów oraz innych integracji, aby zapewnić bezpieczeństwo kluczy interfejsu API.
  • Dynamicznie dostosowuj parametry w odpowiedzi na zmiany w Twoim środowisku lub inne zmiany w aplikacji, takie jak aktualizacja parametrów LLM i punktów końcowych modelu.
  • Kontroluj koszty, zdalnie aktualizując interfejsy API wywoływane przez serwer.
  • Możesz na bieżąco generować niestandardowe konfiguracje dla klientów uzyskujących dostęp do Twojego serwera.

Zdalną konfigurację po stronie serwera możesz wdrożyć w Cloud Run, Cloud Functions lub środowiskach serwerowych na własnym serwerze.

Zanim zaczniesz

Wykonaj instrukcje podane w artykule Dodawanie pakietu SDK Firebase do serwera, aby utworzyć projekt Firebase, skonfigurować konto usługi i dodać pakiet SDK Firebase Admin Node.js do serwera.

Krok 1. Zainicjuj pakiet SDK Firebase Admin Node.js i autoryzuj żądania do interfejsu API

Po zainicjowaniu pakietu Admin SDK bez parametrów pakiet SDK używa domyślnych danych logowania Google i odczytuje opcje ze zmiennej środowiskowej GOOGLE_APPLICATION_CREDENTIALS. Aby na przykład zainicjować pakiet SDK i dodać Zdalną konfigurację:

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

// Initialize Firebase
const firebaseApp = initializeApp();

Krok 2. Określ domyślne wartości parametrów aplikacji serwera

Zidentyfikuj w aplikacji zmienne, które chcesz dynamicznie aktualizować za pomocą Zdalnej konfiguracji. Następnie zastanów się, które zmienne muszą być ustawione w aplikacji domyślnie i jakie powinny być ich wartości domyślne. Zapewnia to prawidłowe działanie aplikacji nawet w przypadku przerwania połączenia z serwerem backendu Zdalnej konfiguracji.

Jeśli na przykład tworzysz aplikację serwerową, która zarządza funkcją generatywnej AI, możesz ustawić domyślną nazwę modelu, wprowadzenie do promptu i konfigurację generatywnej AI, podobne do tych:

Nazwa parametru Opis Typ Wartość domyślna
model_name Nazwa interfejsu API modelu Ciąg znaków gemini-1.5-pro
preamble_prompt Pojawia się prośba o dodanie na początku zapytania użytkownika Ciąg znaków 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 Parametry, które należy wysłać do modelu, JSON {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

Krok 3. Skonfiguruj aplikację serwerową

Po określeniu parametrów, których chcesz używać ze Zdalną konfiguracją, skonfiguruj aplikację tak, aby ustawiała wartości domyślne, pobierała odpowiedni dla serwera szablon Zdalnej konfiguracji i używała jego wartości. Poniżej znajdziesz instrukcje konfigurowania aplikacji Node.js.

  1. uzyskać dostęp do szablonu i go wczytać.

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

    Jeśli używasz Node.js w Cloud Functions, możesz użyć asynchronicznego getServerTemplate do pobierania i wczytywania szablonu w jednym kroku:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. Aby zapewnić prawidłowe działanie aplikacji nawet po przerwaniu połączenia z serwerem backendu Zdalnej konfiguracji, dodaj wartości domyślne do każdego parametru aplikacji. Aby to zrobić, dodaj defaultConfig w funkcji szablonu initServerTemplate lub 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. Po wczytaniu szablonu użyj funkcji template.evaluate(), aby zaimportować z niego parametry i wartości:

    // Add template parameters to config
    const config = template.evaluate();
    
  4. Opcjonalnie, jeśli w szablonie Zdalnej konfiguracji ustawisz warunki procentowe, zdefiniuj i podaj parametr randomizationId, którego chcesz użyć do oceny warunków w funkcji template.evaluate().

    Możesz na przykład ustawić identyfikator instalacji Firebase jako randomizationId, czyli identyfikator użytkownika, aby mieć pewność, że każdy użytkownik kontaktujący się z Twoim serwerem zostanie dodany do odpowiedniej losowej grupy. Poniższy przykład to podstawowy przykład, ale możesz skonfigurować serwer tak, aby generował różne randomizationIds dla różnych żądań klienta, aby mieć pewność, że użytkownicy otrzymają spójne wartości ze Zdalnej konfiguracji na podstawie ich członkostwa w grupach warunków w procentach.

    Więcej informacji o warunkach procentowych znajdziesz w sekcji Użytkownik w losowych procentach.

    // 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. Następnie wyodrębnij potrzebne wartości ze stałej konfiguracji. Użyj getters, aby rzutować wartości ze Zdalnej konfiguracji w oczekiwany format. Obsługiwane są następujące typy:

    • Wartość logiczna: getBoolean
    • Obiekt: getValue
    • Numer: getNumber
    • Ciąg znaków: getString

    Jeśli na przykład implementujesz Vertex AI na swoim serwerze i chcesz zmienić model oraz parametry modelu, możesz skonfigurować parametry model_name i generationConfig. Oto przykład, jak można uzyskać dostęp do wartości Zdalnej konfiguracji:

    // 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. Jeśli serwer działa długo, a nie bezserwerowo, używaj narzędzia setInterval do okresowego ponownego ładowania szablonu. Dzięki temu będziesz okresowo pobierać najbardziej aktualny szablon z serwera Zdalnej konfiguracji.

Krok 4. Ustaw wartości parametrów specyficznych dla serwera w Zdalnej konfiguracji

Następnie utwórz szablon Zdalnej konfiguracji serwera i skonfiguruj parametry oraz wartości do użycia w aplikacji.

Aby utworzyć specyficzny dla serwera szablon Zdalnej konfiguracji:

  1. Otwórz stronę parametrów Zdalnej konfiguracji konsoli Firebase i w selektorze Klient/serwer wybierz Serwer.
  2. Zdefiniuj parametry Zdalnej konfiguracji o tych samych nazwach i typach danych co parametry zdefiniowane w aplikacji i podaj ich wartości. Te wartości zastąpią defaultConfig podany w sekcji Konfigurowanie aplikacji serwera podczas pobierania i oceny szablonu oraz przypisywania tych wartości do zmiennych.
  3. Opcjonalnie możesz ustawić warunki procentowe, aby trwale zastosować wartość do losowej próbki instancji. Więcej informacji o warunkach procentowych znajdziesz w sekcji Użytkownik w losowych procentach.
  4. Po dodaniu parametrów kliknij Opublikuj zmiany.
  5. Sprawdź zmiany i ponownie kliknij Opublikuj zmiany.

Krok 5. Wdróż jako funkcję w Cloud Functions lub użyj Cloud Run

Jeśli Twoja aplikacja serwerowa jest lekka i oparta na zdarzeniach, rozważ wdrożenie kodu jako funkcji w Cloud Functions. Załóżmy na przykład, że masz aplikację, która zawiera dialogi postaci z interfejsów API generatywnej AI, takie jak Google AI czy Vertex AI. W takim przypadku można hostować logikę obsługi LLM w funkcji w Cloud Functions, która jest wywoływana przez aplikację na żądanie. Z artykułu Pierwsze kroki: pisanie, testowanie i wdrażanie aplikacji dowiesz się, jak wdrożyć aplikację jako funkcję w Cloud Functions.

Jeśli Twoja aplikacja jest przeznaczona do długiego działania (np. jest aplikacją internetową z zasobami), zastanów się nad Cloud Run. Aby wdrożyć aplikację serwerową za pomocą Cloud Run, postępuj zgodnie z przewodnikiem Szybki start: wdrażanie usługi Node.js w Cloud Run.

Więcej informacji o najlepszych przypadkach użycia Cloud Run i Cloud Functions znajdziesz w tym artykule.