הזמינות של מודלים של AI גנרטיבי משתנה לעיתים קרובות – מודלים חדשים וטובים יותר יוצאים לשוק, ומודלים ישנים ופחות מתקדמים יוצאים משימוש.
כשניגשים למודלים של AI גנרטיבי ישירות מאפליקציה לנייד או מאפליקציית אינטרנט באמצעות Firebase AI Logic, חשוב מאוד להגדיר את האפליקציה כך שתתאים לשינויים התכופים במודלים האלה. לא כל המשתמשים שלכם יעברו לגרסה האחרונה של האפליקציה כדי להתחיל להשתמש במודל שאתם רוצים שהם ישתמשו בו.
Firebase Remote Config מאפשר לכם לעדכן באופן דינמי ומרחוק את ערכי הפרמטרים באפליקציה (כמו שם של מודל) ממסוף Firebase, בלי שתצטרכו לפרסם גרסה חדשה של האפליקציה.
שימו לב ששינוי שם של מודל הוא תרחיש שימוש קריטי לשימוש ב-Remote Config עם Firebase AI Logic, אבל אפשר גם להשתמש ב-Remote Config כדי לשלוט באופן דינמי ואפילו מותנה בפרמטרים באפליקציה, כמו הגדרת יצירת המודל (מספר מקסימלי של טוקנים, טמפרטורה וכו'), הגדרות בטיחות, הוראות מערכת ונתוני הנחיה.
במדריך הזה מוסבר איך להטמיע את Remote Config באפליקציה, במטרה לשלוט בשם המודל שבו נעשה שימוש באפליקציה.
שלב 1: הגדרת ערך הפרמטר במסוף Firebase
יוצרים Remote Config תבנית לקוח ומגדירים model_name
פרמטר ואת הערך שלו כדי לאחזר ולהשתמש בהם באפליקציה.
פותחים את פרויקט Firebase במסוף Firebase. לאחר מכן, בתפריט הניווט, מרחיבים את הפעלה ובוחרים באפשרות Remote Config.
מוודאים שהאפשרות Client נבחרה בתפריט Client/Server בחלק העליון של הדף.
כדי להתחיל תבנית לקוח, לוחצים על יצירת הגדרה (או על הוספת פרמטר אם השתמשתם בעבר בתבניות לקוח).
מגדירים את הפרמטר
model_name:שם הפרמטר תיאור סוג ערך ברירת מחדל model_nameשם הדגם. שמות הדגמים הזמינים מחרוזת gemini-2.5-flashאחרי שמוסיפים את הפרמטר הזה, לוחצים על פרסום השינויים. אם זו לא תבנית חדשה של Remote Config, בודקים את השינויים ולוחצים שוב על פרסום השינויים.
שלב 2: מוסיפים את Remote Config לאפליקציה ומפעילים אותה
להוסיף את ספריית Remote Config ולהגדיר את Remote Config באפליקציה.
Swift
במסגרת Firebase AI Logicההגדרה, כבר הוספתם את Firebase SDK לאפליקציה, אבל תצטרכו להוסיף גם את Remote Config.
ב-Xcode, כשהפרויקט פתוח, עוברים אל File > Add Package Dependencies (קובץ > הוספת תלות בחבילה).
בוחרים באפשרות firebase-ios-sdk ואז לוחצים על Add package (הוספת חבילה).
בחלונית הניווט בפרויקט, בוחרים את האפליקציה > Targets (יעדים) > האפליקציה.
בכרטיסייה כללי, גוללים אל מסגרות, ספריות ותוכן מוטמע.
לוחצים על +, בוחרים באפשרות FirebaseRemoteConfig ולוחצים על Add (הוספה).
מוסיפים את הפקודה
FirebaseRemoteConfigimport לקוד:import FirebaseRemoteConfigבתוך המחלקה המתאימה לאפליקציה, מאתחלים את Firebase ומוסיפים את הקוד Remote Config ללוגיקה הראשית של האפליקציה.
כאן צריך לכלול את Remote Config ואת Remote Config מאזין בזמן אמת כייבוא, כדי שהאפליקציה תוכל לאחזר ערכים חדשים בזמן אמת, ולהוסיף מרווח מינימלי בין אחזורים:
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 3600 remoteConfig.configSettings = settings
Kotlin
מוסיפים את התלות Remote Config לקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל
app/build.gradle.ktsאוapp/build.gradle):dependencies { implementation(platform("com.google.firebase:firebase-bom:34.5.0")) implementation("com.google.firebase:firebase-ai") implementation("com.google.firebase:firebase-config") // ... other dependencies }מוסיפים את Remote Config ללוגיקה הראשית של האפליקציה. כאן מאתחלים את Remote Config ומוסיפים מרווח מינימלי בין אחזורים:
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
מוסיפים את התלות Remote Config לקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל
app/build.gradle.ktsאוapp/build.gradle):dependencies { implementation(platform("com.google.firebase:firebase-bom:34.5.0")) implementation("com.google.firebase:firebase-ai") implementation("com.google.firebase:firebase-config") // ... other dependencies }מוסיפים את Remote Config ללוגיקה הראשית של האפליקציה. כאן מאתחלים את Remote Config ומוסיפים מרווח מינימלי בין אחזורים:
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Web
פותחים את הקוד בכלי לעריכת טקסט ומייבאים את Remote Config:
import { getRemoteConfig } from 'firebase/remote-config';בתוך הפונקציה הראשית ואחרי שאפליקציית Firebase מאותחלת עבור Firebase AI Logic SDK, מאתחלים את Remote Config:
// Initialize Remote Config and get a reference to the service const remoteConfig = getRemoteConfig(app);הגדרת מרווח מינימלי לאחזור:
remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
Dart
מתיקיית הפרויקט של Flutter, מתקינים ומוסיפים את Remote Config באמצעות הפקודה הבאה:
flutter pub add firebase_remote_configפותחים את
./lib/main.dartומוסיפים את הייבוא אחרי הייבואות האחרים שהוספתם כדי לתמוך ב-Firebase AI Logic:import 'package:firebase_vertexai/firebase_ai.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart';מוסיפים את המשתנה
_modelNameלאפליקציה כדי שתוכלו להשתמש בו בהמשך:late final String _modelName; late final String _systemInstructions; late final String _prompt;משיגים את מופע האובייקט Remote Config ומגדירים מרווח זמן מינימלי לאחזור כדי לאפשר למערכת לבצע רענון בתדירות גבוהה. חשוב להוסיף את הקוד הזה אחרי ש-Firebase מאותחל.
final remoteConfig = FirebaseRemoteConfig.instance; await remoteConfig.setConfigSettings(RemoteConfigSettings( fetchTimeout: const Duration(seconds: 3600), minimumFetchInterval: const Duration(seconds: 3600), ));
Unity
מוסיפים את Remote Config לפרויקט Unity לפי ההוראות האלה.
משיגים את מופע האובייקט 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
במסוף Firebase, פותחים את Remote Config.
בכרטיסייה פרמטרים, פותחים את התפריט ובוחרים באפשרות הורדת ערכי ברירת מחדל.
כשמופיעה בקשה, מפעילים את .plist ל-iOS ולוחצים על הורדת הקובץ.
שומרים את הקובץ בספריית האפליקציה.
ב-Xcode, לוחצים לחיצה ימנית על האפליקציה ובוחרים באפשרות Add Files (הוספת קבצים).
בוחרים באפשרות remote_config_defaults.plist ולוחצים על הוספה.
מעדכנים את קוד האפליקציה כך שיפנה לקובץ ברירות המחדל:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
במסוף Firebase, פותחים את Remote Config.
בכרטיסייה פרמטרים, פותחים את התפריט ובוחרים באפשרות הורדת ערכי ברירת מחדל.
כשמופיעה בקשה, מפעילים את האפשרות .xml for Android (קובץ XML ל-Android) ואז לוחצים על הורדת הקובץ.
שומרים את הקובץ בספריית משאבי ה-XML של האפליקציה.
מעדכנים את קובץ הפעילות הראשי כדי להוסיף את ערכי ברירת המחדל אחרי
configSettingsשהוספתם קודם:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
במסוף Firebase, פותחים את Remote Config.
בכרטיסייה פרמטרים, פותחים את התפריט ובוחרים באפשרות הורדת ערכי ברירת מחדל.
כשמופיעה בקשה, מפעילים את האפשרות .xml for Android (קובץ XML ל-Android) ואז לוחצים על הורדת הקובץ.
שומרים את הקובץ בספריית משאבי ה-XML של האפליקציה.
מעדכנים את קובץ הפעילות הראשי כדי להוסיף את ערכי ברירת המחדל אחרי
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-2.5-flash',
};
Dart
אפשר להגדיר את ערך ברירת המחדל של שם המודל ישירות בקוד:
// Set default values for Remote Config parameters.
remoteConfig.setDefaults(const {
"model_name": "gemini-2.5-flash"
});
Unity
אפשר להגדיר את ערך ברירת המחדל של שם המודל ישירות בקוד:
// Set default values for Remote Config parameters.
await remoteConfig.SetDefaultsAsync(
new System.Collections.Generic.Dictionary<string, object>() {
{ "model_name", "gemini-2.5-flash" }
}
);
שלב 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
מוסיפים את
getValueואתfetchAndActivateלייבוא:import { getValue, fetchAndActivate } from 'firebase/remote-config';מאתרים את הקוד שבו מציינים את ערך ברירת המחדל של שם המודל. מיד אחרי בלוק הקוד הזה, מוסיפים את הקוד הבא כדי לאחזר ולהפעיל את ההגדרה ולהקצות את הערך שאוחזר לקבוע
modelName.// 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();
Dart
// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();
// Assign Remote Config values.
String? _modelName = remoteConfig.getString("model_name");
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
לא ניתן להשתמש במאזינים בזמן אמת Remote Config באפליקציות אינטרנט.
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
import FirebaseAI
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: modelName
)
// ...
Kotlin
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = remoteConfig.getString("model_name")
)
// ...
Java
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ remoteConfig.getString("model_name"),
/* generationConfig (optional) */ null,
/* safetySettings (optional) */ null,
/* requestOptions (optional) */ new RequestOptions(),
/* tools (optional) */ null,
/* toolsConfig (optional) */ null,
/* systemInstruction (optional) */ null,
);
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
// ...
Web
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
const model = getGenerativeModel(ai, {
model: modelName
});
// ...
Dart
// ...
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
final model = FirebaseAI.googleAI().generativeModel(
model: _modelName,
);
// ...
Unity
// ...
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
var modelName = remoteConfig.GetValue("model_name").StringValue;
var model = ai.GetGenerativeModel(
modelName: modelName
);
// ...
שלב 7: מפעילים את האפליקציה
מבצעים build ומריצים את האפליקציה כדי לוודא שהיא פועלת. מבצעים שינויים בהגדרה בדף Remote Config במסוף Firebase, מפרסמים את השינויים ומאמתים את התוצאה.
השלבים הבאים
מידע נוסף על הטמעה של תרחישי שימוש אחרים ב-Remote Config וב-Firebase AI Logic
באפליקציות ובמשחקים לנייד:
אפשר לבדוק הגדרות שונות של מודלים באמצעות Remote Config ו-A/B Testing.
השקה הדרגתית של שינויים בפרמטרים של המודל באמצעות השקות הדרגתיות של Remote Config (iOS+ ו-Android בלבד).
משתמשים בRemote Config התאמה אישית כדי להשתמש בלמידת מכונה ולקבוע את ההגדרות הטובות ביותר למשתמשים ספציפיים (רק ב-iOS+, Android ו-Unity).