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

Firebase Remote Config 現在支援使用 Firebase Admin Node.js SDK 12.1.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、Cloud Functions 或自管伺服器環境中部署伺服器端 Remote Config

事前準備

按照「將 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