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. Затем ваш сервер может оценивать шаблон при каждом входящем запросе и использовать свою собственную логику для предоставления индивидуального ответа с очень низкой задержкой.
С помощью Remote Config на стороне сервера вы можете:
- Определите параметры конфигурации для приложений, работающих на вашем сервере или к которым осуществляется доступ через него, что позволяет использовать такие варианты использования, как удаленная настройка параметров модели искусственного интеллекта, подсказок и других интеграций, чтобы обеспечить безопасность ваших ключей API.
- Динамически настраивайте параметры в ответ на изменения в вашей среде или другие изменения приложения, например обновление параметров LLM и конечных точек модели.
- Контролируйте расходы, удаленно обновляя API, которые вызывает ваш сервер.
- Оперативно создавайте пользовательские конфигурации для клиентов, обращающихся к вашему серверу.
- Запишите, какие клиенты получили значение параметра, и используйте его в Cloud Functions как часть системы проверки прав.
Вы можете развернуть Remote Config на стороне сервера в облачных средах 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.
Откройте и загрузите шаблон.
// 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();
Чтобы обеспечить успешную работу вашего приложения, даже если его соединение с внутренним сервером 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();
После загрузки шаблона используйте
template.evaluate()
для импорта параметров и значений из шаблона:// Add template parameters to config const config = template.evaluate();
При необходимости, если вы задаете процентные условия в шаблоне 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 });
Затем извлеките нужные значения параметров из константы конфигурации. Используйте
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}`;
- Логическое значение:
Если ваш сервер работает долго, а не в бессерверной среде, используйте
setInterval
для периодической перезагрузки шаблона, чтобы гарантировать периодическое получение самого актуального шаблона с сервера Remote Config .
Шаг 4. Установите значения параметров, специфичные для сервера, в Remote Config
Затем создайте шаблон Remote Config сервера и настройте параметры и значения для использования в вашем приложении.
Чтобы создать шаблон Remote Config для конкретного сервера:
- Откройте страницу параметров Remote Config консоли Firebase и в селекторе «Клиент/Сервер» выберите «Сервер» .
- Определите параметры Remote Config с теми же именами и типами данных, что и параметры, которые вы определили в своем приложении, и укажите значения. Эти значения переопределят значение
defaultConfig
, которое вы установили в разделе «Настройка серверного приложения», когда вы извлекаете и оцениваете шаблон и присваиваете эти значения своим переменным. - При желании можно установить процентные условия, чтобы постоянно применять значение к случайной выборке экземпляров. Дополнительные сведения о процентных условиях см. в разделе Пользователь в случайном проценте .
- Завершив добавление параметров, нажмите «Опубликовать изменения» .
- Просмотрите изменения и снова нажмите «Опубликовать изменения» .
Шаг 5. Развертывание с помощью Cloud Functions или облачного запуска
Если ваше серверное приложение является легким и управляемым событиями, вам следует рассмотреть возможность развертывания кода с помощью Cloud Functions . Например, предположим, что у вас есть приложение, которое включает в себя диалоги персонажей, основанные на генеративном AI API (например, Google AI или Vertex AI ). В этом случае вы можете разместить логику обслуживания LLM в функции, которую ваше приложение вызывает по требованию.
Чтобы работать с решением, использующим Cloud Functions 2-го поколения с Remote Config на стороне сервера, см. раздел Использование Remote Config на стороне сервера с Cloud Functions и Vertex AI .
Дополнительные сведения о развертывании приложения с помощью Cloud Functions см. в разделе Начало работы: написание, тестирование и развертывание первых функций .
Попробуйте пример вызываемой функции с Remote Config и App Check на стороне сервера в разделе Вызов Vertex AI Gemini API с Remote Config и App Check .
Если ваше приложение рассчитано на длительную работу (например, веб-приложение с ресурсами), вы можете рассмотреть возможность Cloud Run . Чтобы развернуть серверное приложение с помощью Cloud Run, следуйте руководству в разделе Краткое руководство: развертывание службы Node.js в Cloud Run .
Дополнительные сведения о лучших вариантах использования Cloud Run и Cloud Functions см. в разделе Cloud Functions и Cloud Run: когда использовать одно вместо другого .