Firebase Remote Config поддерживает серверную конфигурацию с использованием Firebase Admin Python SDK v6.7.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 Python SDK на сервер.
Шаг 1: Инициализируйте Firebase Admin Python SDK и авторизуйте запросы API
При инициализации Admin SDK без параметров SDK использует учетные данные Google Application Default и считывает параметры из переменной среды GOOGLE_APPLICATION_CREDENTIALS
. Чтобы инициализировать SDK и добавить Remote Config :
import firebase_admin
import asyncio
import json
firebase_admin.initialize_app()
Шаг 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 для конкретного сервера и используйте его значения. Следующие шаги описывают, как настроить ваше приложение Python.
Откройте и загрузите шаблон.
from firebase_admin import remote_config # Initialize server-side Remote Config template = remote_config.init_server_template() # Load the template from the backend asyncio.run(template.load())
В качестве альтернативы, если вы используете Python с Cloud Functions , вы можете использовать асинхронный
get_server_template
для извлечения и загрузки шаблона за один шаг:# Initialize server-side Remote Config template = await remote_config.get_server_template()
Чтобы гарантировать, что ваше приложение будет работать успешно, даже если его подключение к серверу Remote Config backend будет прервано, добавьте значения по умолчанию для каждого параметра в ваше приложение. Для этого добавьте
default_config
внутри вашей функции шаблонаinit_server_template
илиget_server_template
:template = remote_config.init_server_template({ default_config: { '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 asyncio.run(template.load())
Другой способ инициализации шаблона — использование функции
get_server_template
для получения требуемого шаблона сервера. Вы можете преобразовать этот шаблон в формат JSON с помощью функцииtemplate.to_json
. Этот шаблон JSON можно сохранить локально. Впоследствии вы можете инициализировать этот шаблон JSON с помощью функцииinit_server_template
.После загрузки шаблона используйте
template.evaluate()
для импорта параметров и значений из шаблона:# Add template parameters to config config = template.evaluate()
При желании, если вы задаете условия в шаблоне Remote Config , определите и укажите нужные вам значения:
- При использовании процентных условий добавьте
randomization_id
, который вы хотите использовать для оценки условий в функцииtemplate.evaluate()
. - Если используются пользовательские сигналы , определите атрибуты и их значения. Пользовательские сигналы доступны с Firebase Admin Python SDK v6.7.0 и выше.
Например, вы можете задать идентификатор установки Firebase как
randomization_id
или идентификатор пользователя, чтобы гарантировать, что каждый пользователь, который обращается к вашему серверу, добавляется в правильную рандомизированную группу,version
как настраиваемый сигнал для нацеливания на определенные версии клиента иplatform
как настраиваемый сигнал для нацеливания на клиентскую платформу.Более подробную информацию об условиях см. в разделе Типы правил условий .
# Add template parameters to `config`. Evaluates the # template and returns the parameter value assigned to # the group assigned to the {randomization_id} and version. config = template.evaluate({ 'randomization_id': "2ac93c28-c459-4760-963d-a3974ec26c04", 'version': "1.0", 'platform': "Android" })
- При использовании процентных условий добавьте
Далее извлеките нужные вам значения параметров из константы конфигурации. Используйте
getters
для приведения значений из Remote Config в ожидаемый формат. Поддерживаются следующие типы:- Логическое значение:
get_bool
- Целое число:
get_int
- Плавающий:
get_float
- Строка:
get_string
- Источник значения:
get_value_source
Например, если вы внедряете Vertex AI на своем сервере и хотите изменить модель и параметры модели, вы можете настроить параметры для
model_name
иgeneration_config
. Вот пример того, как можно получить доступ к значениям Remote Config :# Replace defaults with values from Remote Config. generation_config = json.loads(config.get_string('generation_config')) is_ai_enabled = config.get_bool('is_ai_enabled') model = config.get_string('model_name') # Generates a prompt comprised of the Remote Config # parameter and prepends it to the user prompt. prompt = f"{config.get_string('preamble_prompt')}{req.args.get('prompt')}"
- Логическое значение:
Если ваш сервер работает долго, а не является бессерверной средой, используйте
setInterval
для периодической перезагрузки шаблона, чтобы гарантировать периодическое получение самого актуального шаблона с сервера Remote Config .
Шаг 4: Установите значения параметров сервера в Remote Config
Затем создайте шаблон Remote Config сервера и настройте параметры и значения для использования в вашем приложении.
Чтобы создать шаблон Remote Config для конкретного сервера:
- Откройте страницу параметров Remote Config консоли Firebase и в селекторе Клиент/Сервер выберите Сервер .
- Определите параметры Remote Config с теми же именами и типами данных, что и параметры, которые вы определили в своем приложении, и укажите значения. Эти значения переопределят
default_config
, который вы установили в Configure your server application, когда вы извлекаете и оцениваете шаблон и назначаете эти значения вашим переменным. - При желании можно задать условия для постоянного применения значений к случайной выборке экземпляров или пользовательских сигналов, которые вы определяете. Для получения дополнительной информации об условиях см. Типы правил условий .
- Закончив добавление параметров, нажмите Опубликовать изменения .
- Просмотрите изменения и снова нажмите «Опубликовать изменения» .
Шаг 5: Развертывание с помощью Cloud Functions или Cloud Run
Если ваше серверное приложение легковесное и управляемое событиями, вам следует рассмотреть возможность развертывания кода с использованием Cloud Functions . Например, если у вас есть приложение, которое включает диалоги персонажей, поддерживаемые API генеративного ИИ (например, Google AI или Vertex AI ). В этом случае вы можете разместить свою логику обслуживания LLM в функции, которую ваше приложение вызывает по требованию.
Чтобы проработать решение, использующее Cloud Functions 2-го поколения с Remote Config на стороне сервера, см . раздел Использование Remote Config стороне сервера с Cloud Functions и Vertex AI .
Чтобы узнать больше о развертывании приложения с помощью Cloud Functions , см . раздел Начало работы: написание, тестирование и развертывание ваших первых функций .
Если ваше приложение рассчитано на длительную работу (например, веб-приложение с активами), вы можете рассмотреть Cloud Run . Чтобы развернуть серверное приложение с помощью Cloud Run, следуйте руководству Quickstart: Deploy a Python service to Cloud Run .
Более подробную информацию о лучших вариантах использования Cloud Run и Cloud Functions см. в статье Cloud Functions против Cloud Run: когда использовать один, а когда другой .