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

Firebase 遠端設定現在支援使用 Firebase Admin Node.js SDK v12.1.0 以上版本的伺服器端設定。有了這項新功能,您就能使用遠端設定動態管理伺服器端應用程式的行為和設定。包括 Cloud Functions 等無伺服器實作。

有別於 Firebase 用戶端 SDK 擷取自遠端設定範本「衍生」的用戶端專屬設定,伺服器端的遠端設定 SDK 會從 Firebase 下載完整的遠端設定範本。接著,您的伺服器就能使用每個傳入要求來評估範本,並使用本身的邏輯提供低延遲的自訂回應。

透過伺服器端遠端設定功能,您可以:

  • 為在伺服器中執行或存取的應用程式定義設定參數,以便遠端設定 AI 模型參數、提示和其他整合項目等用途,確保 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 並新增遠端設定:

import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";

// Initialize Firebase
const firebaseApp = initializeApp();

步驟 2:找出伺服器應用程式的預設參數值

識別您要使用遠端設定動態更新的應用程式中的變數。然後,請考慮應用程式必須預設設定的變數,以及變數的預設值。如此一來,即使應用程式與遠端設定後端伺服器的連線中斷,應用程式也能正常運作。

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

參數名稱 說明 類型 預設值
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:設定伺服器應用程式

決定要與遠端設定搭配使用的參數後,請設定應用程式設定預設值、擷取伺服器專用的遠端設定範本,並使用其值。下列步驟說明如何設定 Node.js 應用程式。

  1. 存取及載入範本。

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = rc.initServerTemplate();
    
    // Load Remote Config
    await template.load();
    

    如果您是在 Cloud Functions 中使用 Node.js,則可使用非同步 getServerTemplate 以單一步驟擷取及載入範本:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. 為確保應用程式即使與遠端設定後端伺服器的連線中斷,也要確保應用程式能順利執行,請在應用程式中新增每項參數的預設值。為此,請在 initServerTemplategetServerTemplate 範本函式中新增 defaultConfig

    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. 或者,如果您在遠端設定範本中設定百分比條件,請定義並提供您想在 template.evaluate() 函式中評估條件的 randomizationId

    舉例來說,您可以將 Firebase 安裝 ID 設為 randomizationId 或使用者 ID,確保聯絡您伺服器的每位使用者都已新增至適當的隨機群組。以下僅列舉一個基本範例,但您可以設定伺服器,針對不同的用戶端要求產生不同的 randomizationIds,確保使用者能根據使用者百分比條件群組中的成員,向遠端設定提供一致的值。

    如要進一步瞭解百分比條件,請參閱「使用者隨機百分比」。

    // 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 將遠端設定的值轉換為預期格式。支援的類型如下:

    • 布林值:getBoolean
    • 物件:getValue
    • 編號:getNumber
    • 字串:getString

    舉例來說,如果您要在伺服器上實作 Vertex AI,並想變更模型和模型參數,建議您設定 model_namegenerationConfig 的參數。以下範例說明如何存取遠端設定的值:

    // 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 定期重新載入範本,確保您是定期從遠端設定伺服器擷取最新的範本。

步驟 4:在遠端設定中設定伺服器專屬參數值

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

如何建立伺服器專屬的遠端設定範本:

  1. 開啟 Firebase 控制台的「遠端設定參數」頁面,然後在「Client/Server」選取器中選取「Server」
  2. 使用與您在應用程式中定義的參數相同的名稱和資料類型定義遠端設定參數,並提供值。擷取及評估範本時,這些值會覆寫您在設定伺服器應用程式中設定的 defaultConfig,並將這些值指派給變數。
  3. 您也可以選擇設定百分比條件,永久將值套用至隨機的執行個體樣本。如要進一步瞭解百分比條件,請參閱「使用者隨機百分比」。
  4. 參數新增完畢後,按一下「發布變更」
  5. 檢查變更,然後再次按一下「發布變更」

步驟 5:部署為 Cloud 函式或使用 Cloud Run

如果您的伺服器應用程式為輕量且事件導向,則應考慮將程式碼部署為 Cloud 函式。舉例來說,假設您有一個應用程式包含採用 Google AI 和 Vertex AI 等生成式 AI API 的角色對話,在此情況下,您可以在應用程式隨選呼叫的 Cloud 函式中代管 LLM 提供邏輯。如要瞭解如何將應用程式部署為 Cloud 函式,請參閱「開始使用:編寫、測試及部署第一個函式」。

如果您的應用程式打算長時間執行 (例如有資產的網頁應用程式),請考慮使用 Cloud Run。如要透過 Cloud Run 部署伺服器應用程式,請按照「快速入門導覽課程:將 Node.js 服務部署至 Cloud Run」中的指南操作。

如要進一步瞭解 Cloud Run 和 Cloud Functions 最佳用途,請參閱 Cloud Functions 與 Cloud Run:使用其中一種的時機