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


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 по умолчанию и считывает параметры из переменной среды 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.

  1. Откройте и загрузите шаблон.

    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 = remote_config.get_server_template()
    
  2. Чтобы обеспечить успешную работу вашего приложения, даже если его соединение с внутренним сервером Remote Config прерывается, добавьте в приложение значения по умолчанию для каждого параметра. Для этого добавьте defaultConfig в функцию шаблона init_server_template или get_server_template :

    template = remote_config.init_server_template({
      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
    asyncio.run(template.load())
    
    

    Другой способ инициализировать шаблон — использовать функцию get_server_template для получения требуемого шаблона сервера. Вы можете преобразовать этот шаблон в формат JSON, используя функцию template.to_json . Этот шаблон JSON можно хранить локально. Впоследствии вы можете инициализировать этот шаблон JSON, используя функцию init_server_template .

  3. После загрузки шаблона используйте template.evaluate() для импорта параметров и значений из шаблона:

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

    • При использовании процентных условий добавьте идентификатор randomizationId , который вы хотите использовать для оценки условий, в функции template.evaluate() .
    • Если вы используете пользовательские сигналы , определите атрибуты и их значения. Пользовательские сигналы доступны с помощью Firebase Admin Python SDK версии 6.7.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.
    config = template.evaluate({
      'randomizationId': "2ac93c28-c459-4760-963d-a3974ec26c04",
      'version': "1.0",
      'platform': "Android"
    })
    
    
  5. Затем извлеките нужные значения параметров из константы конфигурации. Используйте getters , чтобы привести значения из Remote Config в ожидаемый формат. Поддерживаются следующие типы:

    • Логическое значение: get_bool
    • Объект: get_value
    • Номер: get_number
    • Строка: get_string

    Например, если вы реализуете 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')}"
    
  6. Если ваш сервер работает долго, а не в бессерверной среде, используйте setInterval для периодической перезагрузки шаблона, чтобы гарантировать периодическое получение самого актуального шаблона с сервера Remote Config .

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

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

Чтобы создать шаблон Remote Config для конкретного сервера:

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

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

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

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

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