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


Firebase Remote Config תומך בהגדרת תצורה בצד השרת באמצעות Firebase Admin Python SDK בגרסה 6.7.0 ואילך. היכולת הזו מאפשרת לכם לנהל באופן דינמי את ההתנהגות וההגדרה של אפליקציות בצד השרת באמצעות Remote Config. זה כולל הטמעות ללא שרתים כמו Cloud Functions.

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

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

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

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

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

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

שלב 1: מאתחלים את Firebase Admin Python SDK ומאשרים בקשות API

כשמפעילים את Admin SDK ללא פרמטרים, ה-SDK משתמש באישורי ברירת מחדל של אפליקציית Google וקורא אפשרויות ממשתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS. כדי לאתחל את ה-SDK ולהוסיף את Remote Config:

import firebase_admin
import asyncio
import json

firebase_admin.initialize_app()

שלב 2: זיהוי ערכי ברירת מחדל של פרמטרים באפליקציית השרת

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

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

שם הפרמטר תיאור סוג ערך ברירת המחדל
model_name שם ה-API של המודל מחרוזת gemini-2.0-flash
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 הספציפית לשרת ותשתמש בערכים שלה. בשלבים הבאים מוסבר איך להגדיר את אפליקציית Python.

  1. ניגשים לתבנית וטוענים אותה.

    from firebase_admin import remote_config
    
    # Initialize server-side Remote Config
    template = remote_config.init_server_template()
    
    # Load the template from the backend
     asyncio.run(template.load())
    
    

    לחלופין, אם אתם משתמשים ב-Python עם Cloud Functions, אתם יכולים להשתמש ב-get_server_template האסינכרוני כדי לאתחל ולטעון את התבנית בשלב אחד:

    # Initialize server-side Remote Config
    template = await remote_config.get_server_template()
    
  2. כדי לוודא שהאפליקציה פועלת בצורה תקינה גם אם החיבור שלה לשרת העורפי Remote Config מופרע, מוסיפים ערכי ברירת מחדל לכל פרמטר באפליקציה. כדי לעשות זאת, מוסיפים default_config בתוך פונקציית התבנית init_server_template או get_server_template:

    template = remote_config.init_server_template({
      default_config: {
        '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
    asyncio.run(template.load())
    
    

    דרך נוספת לאתחל תבנית היא באמצעות הפונקציה get_server_template כדי לאחזר את תבנית השרת הנדרשת. אפשר להמיר את התבנית הזו לפורמט JSON באמצעות הפונקציה template.to_json. אפשר לאחסן את תבנית ה-JSON הזו באופן מקומי. לאחר מכן אפשר לאתחל את תבנית ה-JSON הזו באמצעות הפונקציה init_server_template.

  3. אחרי שהתבנית נטענת, משתמשים ב-template.evaluate() כדי לייבא פרמטרים וערכים מהתבנית:

    # Add template parameters to config
    config = template.evaluate()
    
  4. אם הגדרתם תנאים בתבנית Remote Config, אתם יכולים להגדיר ולספק את הערכים הרצויים:

    • אם משתמשים בתנאי אחוזים, צריך להוסיף את randomization_id שרוצים להשתמש בו כדי להעריך את התנאים בפונקציה template.evaluate().
    • אם משתמשים באותות מותאמים אישית, צריך להגדיר את המאפיינים ואת הערכים שלהם. האותות המותאמים אישית זמינים ב-Firebase Admin Python SDK מגרסה 6.7.0 ואילך.

    לדוגמה, אפשר להגדיר מזהה התקנה של Firebase כ-randomization_id, או מזהה משתמש, כדי לוודא שכל משתמש שיוצר קשר עם השרת שלכם יתווסף לקבוצה האקראית המתאימה, version כאות מותאם אישית לטירגוט גרסאות ספציפיות של לקוחות, ו-platform כאות מותאם אישית לטירגוט פלטפורמת לקוח.

    מידע נוסף על תנאים זמין במאמר סוגי כללי תנאים.

    # Add template parameters to `config`. Evaluates the
    # template and returns the parameter value assigned to
    # the group assigned to the {randomization_id} and version.
    config = template.evaluate({
      'randomization_id': "2ac93c28-c459-4760-963d-a3974ec26c04",
      'version': "1.0",
      'platform': "Android"
    })
    
    
  5. לאחר מכן, מחלצים את ערכי הפרמטרים שצריך מהקבוע של ההגדרה. משתמשים ב-getters כדי להמיר את הערכים מ-Remote Config לפורמט הצפוי. יש תמיכה בסוגים הבאים:

    • בוליאני: get_bool
    • מספר שלם: get_int
    • מספר ממשי: get_float
    • מחרוזת: get_string
    • מקור הערך: get_value_source

    לדוגמה, אם מטמיעים את Vertex AI בשרת ורוצים לשנות את המודל ואת הפרמטרים שלו, כדאי להגדיר פרמטרים ל-model_name ול-generation_config. לדוגמה, כך אפשר לגשת לערכים של Remote Config:

    # Replace defaults with values from Remote Config.
    generation_config = json.loads(config.get_string('generation_config'))
    is_ai_enabled = config.get_bool('is_ai_enabled')
    model = config.get_string('model_name')
    
    # Generates a prompt comprised of the Remote Config
    # parameter and prepends it to the user prompt.
    prompt = f"{config.get_string('preamble_prompt')}{req.args.get('prompt')}"
    
  6. אם השרת שלכם פועל לאורך זמן, בניגוד לסביבה ללא שרתים, צריך לטעון מחדש את התבנית באופן תקופתי כדי לוודא שאתם שולפים את התבנית העדכנית ביותר מהשרת Remote Config.

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

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

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

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

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

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

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

למידע נוסף על התרחישים הכי מתאימים לשימוש ב-Cloud Run וב-Cloud Functions, אפשר לעיין במאמר Cloud Functions לעומת Cloud Run: מתי כדאי להשתמש באחד מהם ולא בשני.