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

Firebase Remote Config 現在支援使用 Firebase Admin Node.js SDK 12.1.0 以上版本。這項新功能有助於 讓您動態管理伺服器端的行為和設定 使用 Remote Config 的應用程式。包括無伺服器實作 例如 Cloud Functions

與擷取用戶端專屬設定的 Firebase 用戶端 SDK 不同 衍生自Remote Config 範本 (伺服器端) Remote Config SDK 下載完整 Remote Config 範本 。這樣一來,您的伺服器就能利用每個 並使用自身的邏輯提供 延遲時間極短

您可以透過伺服器端 Remote Config

  • 為在當中執行或存取的應用程式定義設定參數 讓您使用遠端設定等用途 AI 模型參數、提示和其他整合項目 確保 API 金鑰安全無虞。
  • 動態調整參數,以因應環境變化。 例如更新 LLM 參數和模型端點
  • 從遠端更新伺服器呼叫的 API,藉此控管費用。
  • 為可存取產品的用戶端即時產生自訂設定 伺服器
  • 記錄哪些用戶端收到參數值,並用於 Cloud Functions

您可以在 Cloud Run 上部署伺服器端 Remote Config 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。接著,請決定哪些變數必須預設在 以及其預設值。這可以確保 因此即使與高可用性 VPN 連線 Remote Config 後端伺服器已中斷。

舉例來說,您編寫的伺服器應用程式 設定預設模型名稱、提示前置碼 以及生成式 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:設定伺服器應用程式

確定要使用的參數 Remote Config,請將應用程式設為設定預設值,擷取 伺服器專用的 Remote Config 範本,並使用其值。 下列步驟說明如何設定 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. 確保即使在 Remote Config 後端伺服器中斷,請新增以下項目的預設值: 。方法是在原始碼中加入 defaultConfig initServerTemplategetServerTemplate 範本函式:

    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. 或者,如果您將 percentage 設為 條件Remote Config 範本中定義並提供 randomizationId 然後提供用來評估條件的 template.evaluate() 函式。

    舉例來說,您可以設定 Firebase 安裝 ID 做為 randomizationId 或 User-ID,確保每位使用者都 位聯絡人已新增到正確的隨機群組中。 以下是一個基本範例,但您可能會設定 伺服器,為不同的用戶端產生不同的 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
    });
    
  5. 接著,從設定常數中擷取所需的參數值。使用 getters:從 Remote Config 將值轉換為預期值 格式。支援的類型如下:

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

    舉例來說 將 Vertex AI 導入 伺服器 如要變更模型和模型參數 為 model_namegenerationConfig 設定參數。以下是 以下舉例說明如何存取 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}`;
    
  6. 如果您的伺服器長時間執行 而不是無伺服器環境 請使用 setInterval 定期重新載入範本,確保 您會定期從 Remote Config 伺服器。

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

接下來,請建立伺服器 Remote Config 範本,並設定參數並 要在你的應用程式中使用多少價值

如何建立伺服器專用的 Remote Config 範本:

  1. 開啟 Firebase 控制台 Remote Config 參數 頁面,並從 在「用戶端/伺服器」選取器中,選取「伺服器」
  2. 定義 Remote Config 參數,並採用與以下項目相同的名稱和資料類型: 您在應用程式中定義的參數,並提供相關值。這些 值會覆寫您在 設定defaultConfig 伺服器應用程式) 擷取及評估 並將這些值指派給變數
  3. 視需要設定百分比條件,永久套用值到 隨機樣本進一步瞭解百分比 條件,請參閱「隨機中的使用者 百分比
  4. 參數新增完畢後,按一下「發布變更」
  5. 查看變更,然後再次按一下「發布變更」

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

如果您的伺服器應用程式是輕量級和事件導向,建議您考慮 使用自動化工具 Cloud Functions。例如: 假設您有一款採用生成式 AI 技術的應用程式角色對話 API (例如 Google AIVertex AI)。在此情況下,您可以透過 在應用程式隨選呼叫的函式中實作 LLM 提供邏輯。

如果您的應用程式要長時間執行 (例如, 則可考慮使用 Cloud Run。部署 為伺服器應用程式導入 Cloud Run,請按照「快速入門導覽課程:部署 將 Node.js 服務遷移至 Cloud 執行

如要進一步瞭解 Cloud Run 和 Cloud Functions,請參閱 Cloud Functions 與 Cloud Run 的使用時機: 第一個是 other