שימוש ב'הגדרת תצורה מרחוק' בסביבות שרת

עכשיו יש ב-Firebase Remote Config תמיכה בהגדרה בצד השרת באמצעות SDK של Node.js SDK ב-Firebase גרסה 12.1.0 ואילך. היכולת החדשה הזו מעצימה לך לנהל באופן דינמי את ההתנהגות והתצורה של צד השרת אפליקציות שמשתמשות ב-Remote Config. זה כולל הטמעות ללא שרת (serverless) כמו Cloud Functions.

בניגוד לערכות SDK של לקוחות Firebase, שמאחזרות הגדרות ספציפיות ללקוח נגזר מהתבנית Remote Config, בצד השרת ערכת ה-SDK של Remote Config מורידה תבנית מלאה של Remote Config מ-Firebase. לאחר מכן, השרת יוכל להעריך את התבנית בכל בקשה נכנסת ולהשתמש בלוגיקה שלו כדי להציג תגובה מותאמת אישית עם זמן אחזור קצר מאוד.

באמצעות Remote Config בצד השרת, אפשר:

  • הגדרת פרמטרים של הגדרות אישיות לאפליקציות שפועלות או שמתבצעת אליהן גישה דרך השרת שלכם, וכך לאפשר שימוש בתרחישים לדוגמה כמו הגדרה מרחוק. פרמטרים והנחיות של מודל AI ושילובים אחרים, כדי להבטיח מפתחות ה-API נשארים מאובטחים.
  • לבצע התאמה דינמית של פרמטרים בהתאם לשינויים בסביבה שלכם או שינויים אחרים באפליקציות, כמו עדכון פרמטרים של LLM ונקודות קצה של מודלים.
  • שליטה בעלויות באמצעות עדכון מרחוק של ממשקי ה-API שהשרת קורא אליהם.
  • יצירת הגדרות בהתאמה אישית בזמן אמת ללקוחות שמקבלים גישה לשרת.
  • צריך לתעד אילו לקוחות קיבלו ערך פרמטר ולהשתמש בו ב Cloud Functions כחלק ממערכת לאימות הרשאות.

אפשר לפרוס Remote Config בצד השרת ב-Cloud Run, ב-Cloud Functions או בסביבות שרת באירוח עצמי.

לפני שמתחילים

פועלים לפי ההוראות במאמר הוספה של Firebase Admin SDK אל שרת כדי ליצור Firebase לפרויקט, להגדיר חשבון שירות ולהוסיף את Firebase Admin Node.js SDK אל השרת שלך.

שלב 1: מפעילים את ה-SDK של Firebase Admin עבור Node.js ומאשרים בקשות 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 לאחר מכן צריך להגדיר את המשתנים כברירת מחדל את האפליקציה שלכם ומה צריכים להיות ערכי ברירת המחדל שלהם. כך אפשר להבטיח שהאפליקציה תפעל בהצלחה גם אם היא מחוברת יש הפרעה לשרת העורפי של Remote Config.

לדוגמה, אם אתם כותבים אפליקציית שרת שמנהלת אפשר להגדיר שם למודל שמוגדר כברירת מחדל, הנחיה פרומפט, קידומת והגדרות אישיות של בינה מלאכותית גנרטיבית, כמו:

שם הפרמטר תיאור סוג ערך ברירת המחדל
model_name שם ה-API של המודל String gemini-1.5-pro
preamble_prompt הנחיה להוספה בהתחלה למשתמש שאילתה String 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();
    

    אם אתם משתמשים ב-Node.js בתוך Cloud Functions, יכול להשתמש ב-getServerTemplate האסינכרוני כדי לאחזר ולטעון את תבנית בשלב אחד:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. כדי להבטיח שהאפליקציה תפעל בהצלחה גם אם החיבור שלה אל השרת העורפי Remote Config נקטע. צריך להוסיף ערכי ברירת מחדל עבור כל פרמטר לאפליקציה. כדי לעשות את זה, צריך להוסיף defaultConfig פונקציית תבנית initServerTemplate או getServerTemplate:

    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. אופציונלי: אם מגדירים אחוזים תנאים בתבנית Remote Config, מגדירים ומציינים את randomizationId שבהם רוצים להשתמש כדי להעריך את התנאים בתוך הפונקציה template.evaluate().

    לדוגמה, אפשר להגדיר התקנת Firebase מזהה randomizationId, או מזהה משתמש, כדי לוודא שכל משתמש אנשי קשר שהשרת שלכם נוסף לקבוצה האקראית המתאימה. הדוגמה הבאה היא דוגמה בסיסית, אבל אפשר להגדיר את השרת כך שייצור 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_name ו-generationConfig. הנה דוגמה לאופן שבו אפשר לגשת לערכים של 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. אם השרת שלכם פועל לאורך זמן, בניגוד לסביבה ללא שרת (serverless), להשתמש ב-setInterval כדי לטעון מחדש את התבנית מדי פעם, כדי לוודא אתם מאחזרים מדי פעם את התבנית העדכנית ביותר שרת Remote Config.

שלב 4: מגדירים ערכי פרמטרים ספציפיים לשרת ב-Remote Config

בשלב הבא יוצרים תבנית Remote Config של שרת ומגדירים פרמטרים וערכים לשימוש באפליקציה.

כדי ליצור תבנית Remote Config ספציפית לשרת:

  1. פותחים את הפרמטרים Remote Config במסוף Firebase ומדף הבורר לקוח/שרת, בוחרים באפשרות שרת.
  2. הגדרת פרמטרים של Remote Config עם אותם שמות וסוגי נתונים כמו אילו פרמטרים הגדרתם באפליקציה שלכם ומספקים ערכים. האלה הערכים יבטלו את defaultConfig שהגדרת בהגדרת לשרת כשמאחזרים ומעריכים את ומקצים את הערכים האלה למשתנים.
  3. אפשר להגדיר תנאים לאחוזים כדי להחיל ערך באופן עקבי על מדגם אקראי של מופעים. מידע נוסף על אחוזים לתנאים ולהגבלות האלה, אפשר לעיין במאמר משתמש אקראי אחוזים.
  4. כשמסיימים להוסיף פרמטרים, לוחצים על פרסום השינויים.
  5. בודקים את השינויים ולוחצים שוב על פרסום השינויים.

שלב 5: פריסה באמצעות Cloud Functions או Cloud Run

אם אפליקציית השרת שלכם קלה ומבוססת-אירועים, עליכם לשקול בפריסה של הקוד Cloud Functions לדוגמה, נניח שיש לכם אפליקציה שכוללת דיאלוג בין דמויות שמבוסס על בינה מלאכותית גנרטיבית API (לדוגמה, Google AI או Vertex AI). במקרה הזה, תוכלו לארח לוגיקת הצגת ה-LLM בפונקציה שהאפליקציה מפעילה על פי דרישה.

אם האפליקציה מיועדת לפעול לאורך זמן (לדוגמה, אפליקציית אינטרנט עם נכסים), כדאי לשקול את השימוש ב-Cloud Run. כדי לפרוס את אפליקציית השרת באמצעות Cloud Run, פועלים לפי המדריך במאמר מדריך למתחילים: פריסת שירות Node.js ב-Cloud Run.

למידע נוסף על התרחישים לדוגמה הטובים ביותר של Cloud Run Cloud Functions, ראו Cloud Functions לעומת Cloud Run: מתי להשתמש? אחת מעל אחר.