Firebase Remote Config תומך עכשיו בהגדרה בצד השרת באמצעות Firebase Admin Node.js SDK גרסה 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 Application Default Credentials וקורא אפשרויות ממשתנה הסביבה 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 יופרע.
לדוגמה, אם כותבים אפליקציית שרת שמנהלת פונקציית AI גנרטיבי, אפשר להגדיר שם ברירת מחדל של מודל, פתיח של הנחיה והגדרה של AI גנרטיבי, כמו בדוגמה הבאה:
שם הפרמטר | תיאור | סוג | ערך ברירת המחדל |
---|---|---|---|
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.
גישה לתבנית וטעינה שלה.
// 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();
כדי לוודא שהאפליקציה תפעל בצורה תקינה גם אם החיבור שלה לשרת הקצה העורפי 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()
אחרי טעינת התבנית, משתמשים ב-
template.evaluate()
כדי לייבא פרמטרים וערכים מהתבנית:// Add template parameters to config const config = template.evaluate();
אם מגדירים תנאים בתבנית Remote Config, אפשר להגדיר את הערכים הרצויים ולספק אותם:
- אם משתמשים בתנאים של אחוזים, צריך להוסיף את הערך של
randomizationId
שבו רוצים להשתמש כדי להעריך את התנאים בפונקציהtemplate.evaluate()
. - אם משתמשים באותות מותאמים אישית, צריך להגדיר את המאפיינים ואת הערכים שלהם. אותות מותאמים אישית זמינים ב-Firebase Admin Node.js SDK בגרסה 12.5.0 ואילך.
לדוגמה, אפשר להגדיר מזהה התקנה ב-Firebase בתור
randomizationId
, או מזהה משתמש, כדי לוודא שכל משתמש שפונה לשרת שלכם יתווסף לקבוצה המבוקרת המתאימה, להגדיר אתversion
כאות מותאם אישית כדי לטרגט גרסאות לקוח ספציפיות ולהגדיר אתplatform
כאות מותאם אישית כדי לטרגט פלטפורמת לקוח.מידע נוסף על תנאים מופיע במאמר סוגים של כללי תנאים.
// Add template parameters to `config`. Evaluates the // template and returns the parameter value assigned to // the group assigned to the {randomizationId} and version. const config = template.evaluate({ randomizationId: "2ac93c28-c459-4760-963d-a3974ec26c04", version: "1.0", platform: "Android" });
- אם משתמשים בתנאים של אחוזים, צריך להוסיף את הערך של
בשלב הבא, מחלצים את ערכי הפרמטרים שדרושים מקבוע ההגדרה. משתמשים ב-
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}`;
- ערך בוליאני:
אם השרת שלכם פועל לאורך זמן, בניגוד לסביבה ללא שרת, תוכלו להשתמש ב-
setInterval
כדי לטעון מחדש את התבנית מדי פעם, כדי לוודא שאתם מאחזרים מדי פעם את התבנית העדכנית ביותר מהשרת Remote Config.
שלב 4: מגדירים ערכי פרמטרים ספציפיים לשרת ב-Remote Config
בשלב הבא יוצרים תבנית Remote Config של שרת ומגדירים פרמטרים וערכים לשימוש באפליקציה.
כדי ליצור תבנית Remote Config ספציפית לשרת:
- פותחים את דף הפרמטרים Remote Config במסוף Firebase ובבורר Client/Server בוחרים באפשרות Server.
- מגדירים פרמטרים מסוג Remote Config עם אותם שמות וסוגים של נתונים כמו הפרמטרים שהגדרתם באפליקציה, ומספקים ערכים. הערכים האלה יבטלו את הערכים של
defaultConfig
שהגדרתם בקטע הגדרת אפליקציית השרת כשאתם מאחזרים ומעריכים את התבנית ומקצים את הערכים האלה למשתנים. - אפשר להגדיר תנאים כדי להחיל ערכים באופן עקבי על מדגם אקראי של מכונות או אותות מותאמים אישית שתגדירו. למידע נוסף על תנאים, ראו סוגי כללי תנאים.
- כשמסיימים להוסיף פרמטרים, לוחצים על פרסום השינויים.
- בודקים את השינויים ולוחצים שוב על פרסום השינויים.
שלב 5: פריסה באמצעות Cloud Functions או Cloud Run
אם אפליקציית השרת שלכם קלה ומופעלת על סמך אירועים, כדאי לפרוס את הקוד באמצעות Cloud Functions. לדוגמה, נניח שיש לכם אפליקציה שכוללת דיאלוג בין דמויות שמבוסס על ממשק API של AI גנרטיבי (למשל, Google AI או Vertex AI). במקרה כזה, תוכלו לארח את הלוגיקה של הצגת ה-LLM בפונקציה שהאפליקציה קוראת לה על פי דרישה.
כדי לעבוד עם פתרון שמשתמש ב-Cloud Functions מדור שני עם Remote Config בצד השרת, אפשר לעיין במאמר שימוש ב-Remote Config בצד השרת עם Cloud Functions ו-Vertex AI.
מידע נוסף על פריסת האפליקציה באמצעות Cloud Functions זמין במאמר תחילת העבודה: כתיבה, בדיקה ופריסה של הפונקציות הראשונות.
כדאי לנסות פונקציה לדוגמה לקריאה עם Remote Config ו-App Check בצד השרת ב-Call the Vertex AI Gemini API with Remote Config ו-App Check.
אם האפליקציה שלכם מיועדת לפעולה ממושכת (לדוגמה, אפליקציית אינטרנט עם נכסים), כדאי לשקול את Cloud Run. כדי לפרוס את אפליקציית השרת באמצעות Cloud Run, פועלים לפי המדריך במאמר מדריך למתחילים: פריסת שירות Node.js ב-Cloud Run.
למידע נוסף על התרחישים לדוגמה הטובים ביותר ל-Cloud Run ול-Cloud Functions, אפשר לעיין במאמר Cloud Functions לעומת Cloud Run: מתי כדאי להשתמש באחד מהם.