在伺服器環境使用遠端設定


Firebase Remote Config 支援使用 Firebase Admin Python SDK 6.7.0 以上版本進行伺服器端設定。這項功能可讓您使用 Remote Config 動態管理伺服器端應用程式的行為和設定。包括 Cloud Functions 等無伺服器實作項目。

與 Firebase 用戶端 SDK 不同,後者會從 Remote Config 範本擷取衍生的用戶端專屬設定,而伺服器端 Remote Config SDK 則會從 Firebase 下載完整Remote Config 範本。接著,伺服器就能評估每個傳入要求中的範本,並使用自己的邏輯,以極低的延遲時間提供自訂回應。您可以根據自訂信號中定義的隨機百分比和用戶端屬性,使用條件控制及自訂回應。

使用伺服器端 Remote Config,您可以:

  • 定義在伺服器上執行或透過伺服器存取的應用程式設定參數,以便遠端設定 AI 模型參數和提示,以及其他整合項目等用途,確保 API 金鑰安全無虞。
  • 根據環境或其他應用程式的變化動態調整參數,例如更新 LLM 參數和模型端點。
  • 遠端更新伺服器呼叫的 API,控管費用。
  • 為存取伺服器的用戶端即時產生自訂設定。
  • 記錄哪些用戶端收到參數值,並在Cloud Functions中將此值做為授權驗證系統的一部分。

您可以在 Cloud Run、Remote Config或自行代管的伺服器環境中部署伺服器端 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後端伺服器的連線中斷,仍可順利執行。

舉例來說,如果您要編寫管理生成式 AI 函式的伺服器應用程式,可以設定預設模型名稱、提示前言和生成式 AI 設定,如下所示:

參數名稱 說明 類型 預設值
model_name 模型 API 名稱 字串 gemini-2.0-flash
preamble_prompt 提示在使用者查詢內容前加上前置字串 字串 <0x 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 <0x0 {"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 = await remote_config.get_server_template()
    
  2. 為確保應用程式即使與 Remote Config 後端伺服器的連線中斷,也能順利執行,請在應用程式中為每個參數新增預設值。如要這麼做,請在 init_server_templateget_server_template 範本函式中新增 default_config

    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 函式擷取必要的伺服器範本,藉此初始化範本。您可以使用 template.to_json 函式,將這個範本轉換為 JSON 格式。這個 JSON 範本可以儲存在本機。您隨後可以使用 init_server_template 函式初始化這個 JSON 範本。

  3. 範本載入後,請使用 template.evaluate() 從範本匯入參數和值:

    # Add template parameters to config
    config = template.evaluate()
    
  4. 視需要,如果您在 Remote Config 範本中設定條件,請定義並提供所需的值:

    • 如果使用百分比條件,請在 template.evaluate() 函式中新增要用來評估條件的 randomization_id
    • 如果使用自訂信號,請定義屬性和屬性值。如要使用自訂信號,請安裝 Firebase Admin Python SDK 6.7.0 以上版本。

    舉例來說,您可以將 Firebase 安裝 ID 設為 randomization_id 或使用者 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"
    })
    
    
  5. 接著,從設定常數中擷取所需參數值。使用 gettersRemote Config 中的值轉換為預期格式。支援的類型如下:

    • 布林值:get_bool
    • 整數:get_int
    • 浮點值:get_float
    • 字串:get_string
    • 值來源:get_value_source

    舉例來說,如果您在伺服器上導入 Vertex AI,並想變更模型和模型參數,可能需要為 model_namegeneration_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. 如果您的伺服器是長期運作,而非無伺服器環境,請定期重新載入範本,確保從 Remote Config 伺服器擷取最新範本。

步驟 4:在 Remote Config 中設定伺服器專屬的參數值

接著,建立伺服器Remote Config範本,並設定要在應用程式中使用的參數和值。

如要建立伺服器專屬的 Remote Config 範本,請按照下列步驟操作:

  1. 開啟 Firebase 控制台 Remote Config 參數頁面,然後從「用戶端/伺服器」選取器中選取「伺服器」
  2. 定義 Remote Config 參數,這些參數的名稱和資料類型必須與您在應用程式中定義的參數相同,並提供值。當您擷取及評估範本,並將這些值指派給變數時,這些值會覆寫您在「設定伺服器應用程式」中設定的 default_config
  3. 您可以視需要設定條件,將值持續套用至隨機樣本的執行個體或您定義的自訂信號。如要進一步瞭解條件,請參閱「條件規則類型」。
  4. 新增完參數後,請按一下「發布變更」
  5. 查看變更,然後再次按一下「發布變更」

步驟 5:使用 Cloud Functions 或 Cloud Run 部署

如果伺服器應用程式輕巧且為事件驅動型,建議使用 Cloud Functions 部署程式碼。舉例來說,如果您的應用程式包含由生成式 AI API (例如 Google AIVertex AI) 支援的角色對話,您可以在應用程式隨選呼叫的函式中,代管 LLM 服務邏輯。

否則,建議考慮使用 Cloud Run。如要使用 Cloud Run 部署伺服器應用程式,請參閱「快速入門導覽課程:將 Python 服務部署至 Cloud Run」一文。

如要進一步瞭解 Cloud Run 和 Cloud Functions 的最佳用途,請參閱Cloud Functions 與 Cloud Run:何時該使用哪一個