Используйте Remote Config в серверных средах


Firebase Remote Config поддерживает конфигурацию на стороне сервера с использованием Firebase Admin Node.js SDK версии 12.1.0+. Эта возможность позволяет динамически управлять поведением и конфигурацией серверных приложений с помощью Remote Config . Это включает в себя бессерверные реализации, такие как Cloud Functions .

В отличие от клиентских SDK Firebase, которые получают конфигурацию, специфичную для клиента, на основе шаблона Remote Config , серверный SDK Remote Config загружает полный шаблон Remote Config из Firebase. Затем ваш сервер может оценивать этот шаблон при каждом входящем запросе и использовать собственную логику для предоставления настраиваемого ответа с очень низкой задержкой. Вы можете использовать условия для управления и настройки ответов на основе случайных процентов и атрибутов клиента, определенных в пользовательских сигналах .

С помощью Remote Config стороне сервера вы можете:

  • Определите параметры конфигурации для приложений, работающих на вашем сервере или доступных через него, что позволит реализовать такие сценарии, как удаленная настройка параметров и подсказок моделей ИИ, а также другие интеграции, и обеспечит безопасность ваших ключей API.
  • Динамически корректируйте параметры в ответ на изменения в вашей среде или другие изменения в приложении, например, обновление параметров LLM и конечных точек модели.
  • Контролируйте расходы, удаленно обновляя API-интерфейсы, к которым обращается ваш сервер.
  • Создавайте пользовательские конфигурации на лету для клиентов, обращающихся к вашему серверу.
  • Зафиксируйте, какие клиенты получили значение параметра, и используйте эту информацию в Cloud Functions в рамках системы проверки прав доступа.

Вы можете развернуть Remote Config на стороне сервера в средах Cloud Run, Cloud Functions или на собственных серверах.

Прежде чем начать

Следуйте инструкциям в разделе «Добавление SDK администратора Firebase на ваш сервер» , чтобы создать проект Firebase, настроить учетную запись службы и добавить SDK администратора Firebase Node.js на ваш сервер.

Шаг 1: Инициализируйте SDK Firebase Admin Node.js и авторизуйте запросы к API.

При инициализации Admin SDK без параметров, SDK использует учетные данные приложения Google по умолчанию и считывает параметры из переменной среды GOOGLE_APPLICATION_CREDENTIALS . Чтобы инициализировать SDK и добавить Remote Config :

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

// Initialize Firebase
const firebaseApp = initializeApp();

Шаг 2: Определите значения параметров по умолчанию для вашего серверного приложения.

Определите переменные в вашем приложении, которые вы хотите динамически обновлять с помощью Remote Config . Затем подумайте, какие переменные должны быть установлены по умолчанию в вашем приложении и какими должны быть их значения по умолчанию. Это гарантирует успешную работу вашего приложения даже в случае прерывания соединения с сервером Remote Config .

Например, если вы разрабатываете серверное приложение, управляющее функцией генеративного ИИ, вы можете задать имя модели по умолчанию, преамбулу запроса и конфигурацию генеративного ИИ, как показано ниже:

Имя параметра Описание Тип Значение по умолчанию
model_name Название API модели Нить gemini-2.0-flash
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!
generation_config Параметры, которые необходимо передать модели. JSON {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

Шаг 3: Настройка серверного приложения

После того, как вы определили параметры, которые хотите использовать с Remote Config , настройте ваше приложение, чтобы установить значения по умолчанию, получить шаблон Remote Config для конкретного сервера и использовать его значения. Следующие шаги описывают, как настроить ваше приложение Node.js.

  1. Получите доступ к шаблону и загрузите его.

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

    Если вы используете Node.js в рамках Cloud Functions , вы можете использовать асинхронный getServerTemplate для инициализации и загрузки шаблона за один шаг:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. Чтобы гарантировать успешную работу вашего приложения даже при прерывании соединения с сервером Remote Config , добавьте значения по умолчанию для каждого параметра в ваше приложение. Для этого добавьте defaultConfig внутрь функции шаблона initServerTemplate или 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. После загрузки шаблона используйте template.evaluate() для импорта параметров и значений из шаблона:

    // Add template parameters to config
    const config = template.evaluate();
    
  4. При желании, если вы задаете условия в шаблоне Remote Config , определите и укажите необходимые значения:

    • При использовании условий в процентах добавьте идентификатор randomizationId (randomizationId), который вы хотите использовать для оценки ваших условий, в функцию template.evaluate() .
    • При использовании пользовательских сигналов определите атрибуты и их значения. Пользовательские сигналы доступны в Firebase Admin Node.js SDK версии 12.5.0 и выше.

    Например, вы можете установить идентификатор установки Firebase в качестве randomizationId или идентификатор пользователя, чтобы гарантировать, что каждый пользователь, обращающийся к вашему серверу, будет добавлен в соответствующую случайную группу, version в качестве пользовательского сигнала для выбора конкретных версий клиента и platform в качестве пользовательского сигнала для выбора платформы клиента.

    Для получения дополнительной информации об условиях см. раздел «Типы правил условий» .

    // 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. Далее извлеките необходимые значения параметров из константы конфигурации. Используйте getters для преобразования значений из Remote Config в ожидаемый формат. Поддерживаются следующие типы:

    • Логическое значение: getBoolean
    • Объект: getValue
    • Номер: getNumber
    • Строка: getString

    Например, если вы внедряете Vertex AI на своем сервере и хотите изменить модель и параметры модели, вам может потребоваться настроить параметры для model_name и generation_config . Вот пример того, как можно получить доступ к значениям 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. Если ваш сервер работает длительное время, в отличие от бессерверной среды, используйте setInterval для периодической перезагрузки шаблона, чтобы убедиться, что вы получаете самый актуальный шаблон с сервера Remote Config .

Шаг 4: Задайте значения параметров, специфичных для сервера, в разделе Remote Config

Далее создайте шаблон Remote Config сервера и настройте параметры и значения для использования в вашем приложении.

Для создания шаблона Remote Config , специфичного для конкретного сервера:

  1. Откройте страницу параметров Remote Config в консоли Firebase и в селекторе «Клиент/Сервер» выберите «Сервер» .
  2. Определите параметры Remote Config с теми же именами и типами данных, что и параметры, определенные в вашем приложении, и укажите значения. Эти значения переопределят значение defaultConfig установленное вами в разделе «Настройка серверного приложения», при получении и оценке шаблона и присвоении этих значений вашим переменным.
  3. При желании можно задать условия для постоянного применения значений к случайной выборке экземпляров или пользовательским сигналам, которые вы определяете. Дополнительную информацию об условиях см. в разделе «Типы правил условий» .
  4. После добавления всех параметров нажмите кнопку «Опубликовать изменения» .
  5. Просмотрите изменения и снова нажмите «Опубликовать изменения» .

Шаг 5: Развертывание с помощью Cloud Functions или Cloud Run

Если ваше серверное приложение является легковесным и основано на событиях, вам следует рассмотреть возможность развертывания кода с использованием Cloud Functions . Например, предположим, у вас есть приложение, которое включает диалоги персонажей, созданные с помощью API генеративного ИИ (например, Google AI или Vertex AI ). В этом случае вы можете разместить логику обслуживания LLM в функции, которую ваше приложение будет вызывать по запросу.

Если вы разрабатываете веб-приложение с серверным рендерингом, App Hosting поддерживает популярные веб-фреймворки.

В противном случае, вы можете рассмотреть Cloud Run . Чтобы развернуть серверное приложение с помощью Cloud Run, следуйте инструкциям в руководстве «Быстрый старт: Развертывание сервиса Node.js в Cloud Run» .

Для получения дополнительной информации о наилучших вариантах использования Cloud Run и Cloud Functions см. статью Cloud Functions против Cloud Run: когда использовать один из них вместо другого» .