עדכון דינמי של אפליקציית Firebase AI Logic באמצעות הגדרת תצורה מרחוק ב-Firebase

כששולחים קריאה ל-Gemini API מהאפליקציה באמצעות SDK של Firebase AI Logic, הבקשה מכילה כמה פרמטרים ששולטים בתשובות של ה-AI הגנרטיבי. הנתונים האלה כוללים בדרך כלל את שם המודל, הגדרות ליצירת המודל (כמו מספר האסימונים המקסימלי בפלט), הגדרות בטיחות, הוראות מערכת ונתוני הנחיות.

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

  • אתם יכולים לעדכן את מודל ה-AI הגנרטיבי בלי להשיק אפליקציה חדשה. אתם יכולים לשדרג לגרסאות חדשות ויציבות של המודל לפני שגרסאות קודמות מושבתות, לעבור למודלים זולים יותר או למודלים עם ביצועים טובים יותר בהתאם לצרכים ולמאפיינים של המשתמשים, או לפרוס באופן מותנה את המודלים העדכניים והטובים ביותר לפלחי משתמשים ספציפיים (כמו בודקים של גרסת בטא).
  • כדאי להגדיר את המיקום שבו אתם ניגשים למודל כך שיהיה קרוב יותר למשתמשים.
  • אתם יכולים להריץ בדיקות A/B על הנחיות מערכת שונות, ואז להשיק בהדרגה את הערכים המנצחים מהניסוי למשתמשים.
  • אתם יכולים להשתמש ב-feature flags כדי לחשוף או להסתיר במהירות תכונות מבוססות-AI גנרטיבי באפליקציה.

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

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

מעבר להטמעת הקוד

למה כדאי להשתמש ב-Firebase Remote Config באפליקציה?

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

תרחישי שימוש חיוניים ב-Remote Config עם אפליקציות AI גנרטיבי

מומלץ להשתמש ב-Remote Config עם Firebase AI Logic בתרחישים הבאים:

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

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

  • הפחתת סיכונים ואכיפת בטיחות ב-AI: אתם יכולים להשתמש בהשקות של Remote Config כדי להשיק באופן בטוח והדרגתי שינויים ב-AI גנרטיבי למשתמשים ב-iOS וב-Android.

תרחישים מתקדמים ומומלצים לשימוש ב-Remote Config עם אפליקציות AI גנרטיבי

אחרי שמוסיפים לאפליקציה את Remote Config ו-Google Analytics, אפשר לבחון תרחישי שימוש מתקדמים:

  • הגדרת מיקום על סמך מיקום הלקוח: משתמשים בתנאים של Remote Config כדי להגדיר את המיקום שבו אתם ניגשים למודל על סמך המיקום שזוהה של הלקוח.

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

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

  • שימוש בהוראות מערכת, בהנחיות ובהגדרות מודל שונות בהתאם למאפייני הלקוח: כשמשתמשים ב-Remote Config עם Google Analytics, אפשר ליצור תנאים על סמך מאפייני הלקוח או קהלים בהתאמה אישית, ולהגדיר פרמטרים שונים על סמך המאפיינים האלה.

    לדוגמה, אם אתם משתמשים ב-AI גנרטיבי כדי לספק תמיכה טכנית באפליקציה, יכול להיות שתרצו להגדיר הוראות מערכת ספציפיות לפלטפורמת האפליקציה כדי לוודא שהמשתמשים ב-Android, ב-iOS ובאינטרנט יקבלו הוראות מדויקות.

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

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

  • אופטימיזציה של חוויית השימוש באפליקציה והתוצאות: אתם יכולים להשתמש ב-A/B Testing עם Remote Config באפליקציות ובמשחקים לנייד כדי לבדוק שינויים בפרמטרים של ה-AI הגנרטיבי בפלחי משתמשים שונים, ולראות איך הם משפיעים על מדדים חשובים כמו שימור והכנסות.

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

הוספת Firebase Remote Config לאפליקציה

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

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

דרישות מוקדמות

המדריך הזה מניח שאתם מכירים את תהליך הפיתוח של אפליקציות לפלטפורמה שלכם.

לפני שמתחילים, חשוב לוודא שהתנאים הבאים מתקיימים:

  • מבצעים את השלבים במדריך לתחילת העבודה עם Firebase AI Logic, שבו מוסבר איך להגדיר את הפרויקט ב-Firebase, לקשר את האפליקציה ל-Firebase, להוסיף את ה-SDK, להפעיל את שירות הקצה העורפי של הספק "Gemini API" שבחרתם וליצור מופע של מודל.

  • מפעילים את Google Analytics בפרויקט ב-Firebase ומוסיפים את ה-SDK שלו לאפליקציה (נדרש לטירגוט מותנה, כמו הגדרת המיקום שבו ניגשים למודל על סמך המיקום של מכשיר הלקוח).

שלב 1: מגדירים ערכי פרמטרים במסוף Firebase

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

  1. במסוף Firebase, עוברים אל DevOps & Engagement (פיתוח ותפעול ומעורבות) > Remote Config (הגדרת תצורה מרחוק).

  2. בבורר Client/Server שבחלק העליון של הדף, בוחרים באפשרות Client.

  3. כדי להתחיל ליצור תבנית לקוח, לוחצים על Create Configuration (יצירת הגדרה) (או על Add parameter (הוספת פרמטר) אם כבר השתמשתם בתבניות לקוח).

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

    שם הפרמטר תיאור סוג ערך ברירת מחדל
    model_name שם המודל. שמות המודלים הזמינים מחרוזת gemini-3.8-flash
    system_instructions הוראות מערכת הן כמו "הקדמה" שמוסיפים לפני שהמודל נחשף להוראות נוספות ממשתמש הקצה, כדי להשפיע על ההתנהגות של המודל. מחרוזת You are a helpful assistant who knows everything there is to know about Firebase!
    prompt הנחיה שמוגדרת כברירת מחדל לשימוש בתכונה מבוססת-AI גנרטיבי. מחרוזת I am a developer who wants to know more about Firebase!
    agent_platform_location רלוונטי רק אם משתמשים ב-Agent Platform Gemini API (formerly Vertex AI).
    שולטים במיקום כדי לגשת למודל. אפשר להגדיר תנאים כדי לקבוע את האפשרות הזו על סמך מיקום הלקוח שזוהה על ידי Google Analytics.
    מחרוזת global
  5. כשמסיימים להוסיף פרמטרים, לוחצים על פרסום השינויים. אם זו לא תבנית Remote Config חדשה, בודקים את השינויים ולוחצים שוב על פרסום השינויים.

שלב 2: מוסיפים את Remote Config לאפליקציה ומפעילים אותו

מוסיפים את הספרייה Remote Config ומגדירים את Remote Config באפליקציה.

Swift

כחלק מההגדרה של Firebase AI Logic, כבר הוספתם את Firebase SDK לאפליקציה, אבל תצטרכו להוסיף גם את Remote Config.

  1. ב-Xcode, כשהפרויקט פתוח, עוברים אל File > Add Package Dependencies (קובץ > הוספת יחסי תלות של חבילות).

  2. בוחרים באפשרות firebase-ios-sdk ולוחצים על Add package.

  3. ב-Project navigator (ניווט בפרויקט), בוחרים את האפליקציה > Targets (יעדים) > האפליקציה.

  4. בכרטיסייה General, גוללים אל Frameworks, Libraries, and Embedded Content.

  5. לוחצים על +, בוחרים באפשרות FirebaseRemoteConfig ולוחצים על Add (הוספה).

  6. מוסיפים את הייבוא של FirebaseRemoteConfig לקוד:

    import FirebaseRemoteConfig
    
  7. בתוך המחלקה המתאימה לאפליקציה, מאתחלים את Firebase ומוסיפים את Remote Config ללוגיקה הראשית של האפליקציה.

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

    let remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 3600
    remoteConfig.configSettings = settings
    

Kotlin

  1. מוסיפים את התלות ב-Remote Config לקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle.kts או app/build.gradle):

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:35.1.0"))
        implementation("com.google.firebase:firebase-ai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. מוסיפים את Remote Config ללוגיקה של האפליקציה הראשית. כאן מפעילים את Remote Config ומוסיפים מרווח אחזור מינימלי:

    val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
    

Java

  1. מוסיפים את התלות ב-Remote Config לקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle.kts או app/build.gradle):

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:35.1.0"))
        implementation("com.google.firebase:firebase-ai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. מוסיפים את Remote Config ללוגיקה של האפליקציה הראשית. כאן מפעילים את Remote Config ומוסיפים מרווח אחזור מינימלי:

    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
    mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
    

Web

  1. פותחים את הקוד בכלי לעריכת טקסט ומייבאים את Remote Config:

    import { getRemoteConfig } from 'firebase/remote-config';
    
  2. בתוך הפונקציה הראשית, ואחרי שאפליקציית Firebase מופעלת ל-SDK של Firebase AI Logic, מפעילים את Remote Config:

      // Initialize Remote Config and get a reference to the service
      const remoteConfig = getRemoteConfig(app);
    
  3. מגדירים מרווח מינימלי לאחזור:

    remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
    

Dart

  1. בספריית הפרויקט ב-Flutter, מתקינים ומוסיפים את Remote Config באמצעות הפקודה הבאה:

    flutter pub add firebase_remote_config
    
  2. פותחים את ./lib/main.dart ומוסיפים את הייבוא אחרי הייבואים האחרים שהוספתם כדי לתמוך ב-Firebase AI Logic:

    import 'package:firebase_ai/firebase_ai.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_remote_config/firebase_remote_config.dart';
    
  3. מוסיפים לאפליקציה את המשתנים _modelName,‏ _systemInstructions ו-_prompt כדי שתוכלו להשתמש בהם בהמשך:

    late final String _modelName;
    late final String _systemInstructions;
    late final String _prompt;
    
  4. משיגים מופע של אובייקט Remote Config ומגדירים מרווח זמן מינימלי לאחזור כדי לאפשר למערכת לבצע רענון בתדירות גבוהה. חשוב להוסיף את זה אחרי ש-Firebase מאותחל.

      final remoteConfig = FirebaseRemoteConfig.instance;
      await remoteConfig.setConfigSettings(RemoteConfigSettings(
        fetchTimeout: const Duration(seconds: 3600),
        minimumFetchInterval: const Duration(seconds: 3600),
      ));
    

Unity

  1. מוסיפים את Remote Config לפרויקט Unity לפי ההוראות האלה.

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

    var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
    const int MillisecondsPerSecond = 1000;
    await remoteConfig.SetConfigSettingsAsync(new ConfigSettings() {
      FetchTimeoutInMilliseconds = 3600 * MillisecondsPerSecond,
      MinimumFetchIntervalInMilliseconds = 3600 * MillisecondsPerSecond
    });
    

שלב 3: מגדירים ערכי פרמטרים בתוך האפליקציה

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

Swift

  1. במסוף Firebase, נכנסים לדף DevOps & Engagement (DevOps ומעורבות) > Remote Config (הגדרת תצורה מרחוק) > Parameters (פרמטרים).

  2. פותחים את Menu ובוחרים באפשרות Download default values.

  3. כשמוצגת בקשה, מפעילים את ‎.plist ל-iOS ולוחצים על הורדת הקובץ.

  4. שומרים את הקובץ בספריית האפליקציה.

  5. ב-Xcode, לוחצים לחיצה ימנית על האפליקציה ובוחרים באפשרות Add Files (הוספת קבצים).

  6. בוחרים באפשרות remote_config_defaults.plist ולוחצים על Add (הוספה).

  7. מעדכנים את קוד האפליקציה כך שיפנה לקובץ ברירות המחדל:

    // Set default values for Remote Config parameters.
    remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
    

Kotlin

  1. במסוף Firebase, נכנסים לדף DevOps & Engagement (DevOps ומעורבות) > Remote Config (הגדרת תצורה מרחוק) > Parameters (פרמטרים).

  2. פותחים את Menu ובוחרים באפשרות Download default values.

  3. כשמוצגת בקשה, מפעילים את האפשרות ‎.xml ל-Android ולוחצים על הורדת הקובץ.

  4. שומרים את הקובץ בספריית משאבי ה-XML של האפליקציה.

  5. מעדכנים את קובץ הפעילות הראשי כדי להוסיף את ברירות המחדל אחרי ה-configSettings שהוספתם קודם:

    // Set default values for Remote Config parameters.
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    

Java

  1. במסוף Firebase, נכנסים לדף DevOps & Engagement (DevOps ומעורבות) > Remote Config (הגדרת תצורה מרחוק) > Parameters (פרמטרים).

  2. פותחים את Menu ובוחרים באפשרות Download default values.

  3. כשמוצגת בקשה, מפעילים את האפשרות ‎.xml ל-Android ולוחצים על הורדת הקובץ.

  4. שומרים את הקובץ בספריית משאבי ה-XML של האפליקציה.

  5. מעדכנים את קובץ הפעילות הראשי כדי להוסיף את ברירות המחדל אחרי ה-configSettings שהוספתם קודם:

    // Set default values for Remote Config parameters.
    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
    

Web

אפשר להגדיר את ערכי ברירת המחדל ישירות בקוד:

// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
  model_name: 'gemini-3.8-flash',
  system_instructions:
    'You are a helpful assistant who knows everything there is to know about Firebase!',
  prompt: 'I am a developer who wants to know more about Firebase!',
  agent_platform_location: 'global',
};

Dart

אפשר להגדיר את ערכי ברירת המחדל ישירות בקוד:

// Set default values for Remote Config parameters.
remoteConfig.setDefaults(const {
  "model_name": "gemini-3.8-flash",
  "system_instructions": "You are a helpful assistant who knows everything there is to know about Firebase!",
  "prompt": "I am a developer who wants to know more about Firebase!",
  "agent_platform_location": "global"
});

Unity

אפשר להגדיר את ערכי ברירת המחדל ישירות בקוד:

// Set default values for Remote Config parameters.
await remoteConfig.SetDefaultsAsync(
  new System.Collections.Generic.Dictionary<string, object>() {
    { "model_name", "gemini-3.8-flash" },
    { "system_instructions", "You are a helpful assistant who knows everything there is to know about Firebase!" },
    { "prompt", "I am a developer who wants to know more about Firebase!" },
    { "agent_platform_location", "global" }
  }
);

שלב 4: מאחזרים ומפעילים ערכים

אחרי שמגדירים את ערכי ברירת המחדל, מוסיפים את הקוד הבא כדי לאחזר ולהפעיל את הערכים.

Swift

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
  if let error = error {
    print("Error fetching Remote Config: \(error.localizedDescription)")
  }
}

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

Kotlin

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate()
      .addOnCompleteListener(this) { task ->
          if (task.isSuccessful) {
              val updated = task.result
              Log.d(TAG, "Remote Config values fetched and activated: $updated")
          } else {
              Log.e(TAG, "Error fetching Remote Config", task.exception)
          }
      }

Java

  // Fetch and activate Remote Config values
  mFirebaseRemoteConfig.fetchAndActivate()
    .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
        @Override
        public void onComplete(@NonNull Task<Boolean> task) {
            if (task.isSuccessful()) {
                boolean updated = task.getResult();
                Log.d(TAG, "Config params updated: " + updated);
            } else {
                Log.e(TAG, "Error fetching Remote Config", task.exception)
            }
          }
    });

Web

  1. מוסיפים את getValue ו-fetchAndActivate לייבוא:

    import { getValue, fetchAndActivate } from 'firebase/remote-config';
    
  2. מאתרים את הקוד שבו מציינים את ערכי ברירת המחדל של Remote Config. מיד אחרי בלוק הקוד הזה, מוסיפים את הקוד הבא כדי לאחזר ולהפעיל את ההגדרות ולהקצות ערכים לקבועים modelName,‏ systemInstructions,‏ prompt ו-agentPlatformLocation.

    // Fetch and activate Remote Config.
    try {
      await fetchAndActivate(remoteConfig);
    } catch(err) {
      console.error('Remote Config fetch failed', err);
    }
    
    console.log('Remote Config fetched.');
    
    // Assign Remote Config values.
    const modelName = getValue(remoteConfig, 'model_name').asString();
    const systemInstructions = getValue(remoteConfig, 'system_instructions').asString();
    const prompt = getValue(remoteConfig, 'prompt').asString();
    const agentPlatformLocation = getValue(remoteConfig, 'agent_platform_location').asString();
    

Dart

// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();

// Assign Remote Config values.
String? _modelName = remoteConfig.getString("model_name");
String? _systemInstructions = remoteConfig.getString("system_instructions");
String? _prompt = remoteConfig.getString("prompt");
String? _agentPlatformLocation = remoteConfig.getString("agent_platform_location");

Unity

// Fetch and activate Remote Config values.
await remoteConfig.FetchAndActivateAsync();

שלב 5: הוספת מאזין Remote Config בזמן אמת

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

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

Swift

// Add real-time Remote Config
remoteConfig.addOnConfigUpdateListener { configUpdate, error in
  guard let configUpdate = configUpdate, error == nil else {
    print("Error listening for config updates: \(error?.localizedDescription ?? "No error available")")
    return
  }

  print("Updated keys: \(configUpdate.updatedKeys)")
  remoteConfig.activate { changed, error in
    guard error == nil else {
      print("Error activating config: \(error?.localizedDescription ?? "No error available")")
      return
    }
    print("Activated config successfully")
  }
}

Kotlin

אפשר גם להגדיר פעולה בתוך ההפעלה של addOnCompleteListener:

      // Add a real-time Remote Config listener
      remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener {
          override fun onUpdate(configUpdate : ConfigUpdate) {
              Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.updatedKeys);
              remoteConfig.activate().addOnCompleteListener {
                  // Optionally, add an action to perform on update here.
              }
          }

          override fun onError(error : FirebaseRemoteConfigException) {
              Log.w(ContentValues.TAG, "Config update error with code: " + error.code, error)
          }
      }

Java

אפשר גם להגדיר פעולה בתוך ההפעלה של addOnCompleteListener:

  // Add a real-time Remote Config listener
  remoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() {
      @Override
      public void onUpdate(ConfigUpdate configUpdate) {
          Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.getUpdatedKeys());
                remoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() {
                  @Override
                  public void onComplete(@NonNull Task<Boolean> task) {
                      // Optionally, add an action to perform on update here.
                  }
              });
          }

      @Override
      public void onError(FirebaseRemoteConfigException error) {
          Log.w(ContentValues.TAG, "Config update error with code: " + error.getCode(), error);
      }
  });

Web

 // Add a real-time Remote Config listener
 onConfigUpdate(remoteConfig, {
   next: (configUpdate) => {
      console.log("Updated keys:", configUpdate.getUpdatedKeys());
      if (configUpdate.getUpdatedKeys().has("welcome_message")) {
         activate(remoteConfig).then(() => {
         showWelcomeMessage();
         });
      }
   },
   error: (error) => {
      console.log("Config update error:", error);
   },
   complete: () => {
      console.log("Listening stopped.");
   }
});

Dart

// Add a real-time Remote Config listener
remoteConfig.onConfigUpdated.listen((event) async {
  await remoteConfig.activate();
});

Unity

// Add a real-time Remote Config listener to automatically update whenever
// a new template is published.
// Note: the parameters can be anonymous as they are unused.

remoteConfig.OnConfigUpdateListener += (_, _) => {
  remoteConfig.ActivateAsync();
};

שלב 6: מעדכנים את הבקשות של Gemini API כך שישתמשו בערכים של Remote Config

כדי לראות תוכן וקוד שספציפיים לספק, לוחצים על הספק Gemini API בדף הזה.

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

Swift

// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
let agentPlatformLocation = remoteConfig.configValue(forKey: "agent_platform_location").stringValue
let ai = FirebaseAI.firebaseAI(backend: .agentPlatform(location: agentPlatformLocation))

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let systemInstructions = remoteConfig.configValue(forKey: "system_instructions").stringValue

let model = ai.generativeModel(
  modelName: modelName,
  systemInstruction: ModelContent(role: "system", parts: systemInstructions)
)

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
let userPrompt = remoteConfig.configValue(forKey: "prompt").stringValue

// To generate text output, call `generateContent` with the text input
let response = try await model.generateContent(userPrompt)
if let text = response.text {
  print(text)
}

Kotlin

// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
val ai = Firebase.ai(backend = GenerativeBackend.agentPlatform(location = remoteConfig.getString("agent_platform_location")))

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
val model = ai.generativeModel(
  modelName = remoteConfig.getString("model_name"),
  systemInstruction = content { text(remoteConfig.getString("system_instructions")) }
)

// To generate text output, call `generateContent` with the text input
// The text in the prompt will be sourced from Remote Config
val response = model.generateContent(remoteConfig.getString("prompt"))
print(response.text)

Java

// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
FirebaseAI ai = FirebaseAI.getInstance(
        GenerativeBackend.agentPlatform(remoteConfig.getString("agent_platform_location")));

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
GenerativeModel gm = ai.generativeModel(
        /* modelName */ remoteConfig.getString("model_name"),
        /* generationConfig (optional) */ null,
        /* safetySettings (optional) */ null,
        /* tools (optional) */ null,
        /* toolsConfig (optional) */ null,
        /* systemInstruction (optional) */ new Content.Builder()
                .addText(remoteConfig.getString("system_instructions")).build(),
        /* requestOptions (optional) */ new RequestOptions()
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
Content userPrompt = new Content.Builder().addText(
        remoteConfig.getString("prompt")).build();

// To generate text output, call `generateContent` with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(userPrompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
const ai = getAI(firebaseApp, { backend: new AgentPlatformBackend(agentPlatformLocation) });

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
const model = getGenerativeModel(ai, {
  model: modelName,
  systemInstruction: systemInstruction
});

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  // The text in the prompt will be sourced from Remote Config
  const userPrompt = prompt;

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(userPrompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

Dart

// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
final ai = await FirebaseAI.agentPlatform(location: _agentPlatformLocation);

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
final model =
      ai.generativeModel(
        model: _modelName,
        systemInstruction: Content.system(_systemInstructions),
      );

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
final _userPrompt = [Content.text(_prompt)];

// To generate text output, call `generateContent` with the text input
final response = await model.generateContent(_userPrompt);
print(response.text);

Unity

// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
var agentPlatformLocation = remoteConfig.GetValue("agent_platform_location").StringValue;
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.AgentPlatform(agentPlatformLocation));

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
var modelName = remoteConfig.GetValue("model_name").StringValue;
var systemInstructions = remoteConfig.GetValue("system_instructions").StringValue;

var model = ai.GetGenerativeModel(
  modelName: modelName,
  systemInstruction: ModelContent.Text(systemInstructions)
);

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
var userPrompt = remoteConfig.GetValue("prompt").StringValue;

// To generate text output, call `GenerateContentAsync` with the text input
var response = await model.GenerateContentAsync(userPrompt);
UnityEngine.Debug.Log(response.Text ?? "No text in response.");

שלב 7: מריצים את האפליקציה

יוצרים ומפעילים את האפליקציה ומוודאים שהיא פועלת. משנים את ההגדרות בדף Remote Config במסוף Firebase, מפרסמים את השינויים ובודקים את התוצאה.

השלבים הבאים