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

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

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

С помощью удаленной настройки на стороне сервера вы можете:

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

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

Прежде чем вы начнете

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

Шаг 1. Инициализируйте Firebase Admin Node.js SDK и авторизуйте запросы 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-1.5-pro
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 , который вы хотите использовать для оценки ваших условий, в функции template.evaluate() .

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

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

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

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

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

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

Шаг 5. Развертывание в качестве облачной функции или с помощью Cloud Run.

Если ваше серверное приложение является легким и управляемым событиями, вам следует рассмотреть возможность развертывания вашего кода в качестве облачной функции . Например, предположим, что у вас есть приложение, которое включает в себя диалоги персонажей, основанные на генеративных API-интерфейсах искусственного интеллекта, таких как Google AI и Vertex AI. В этом случае вы можете разместить логику обслуживания LLM в облачной функции, которую ваше приложение вызывает по требованию. Узнайте, как развернуть свое приложение в качестве облачной функции, в разделе «Начало работы: напишите, протестируйте и разверните свои первые функции» .

Если ваше приложение рассчитано на длительную работу (например, веб-приложение с ресурсами), вы можете рассмотреть возможность Cloud Run . Чтобы развернуть серверное приложение с помощью Cloud Run, следуйте руководству в разделе Краткое руководство: развертывание службы Node.js в Cloud Run .

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