تتغيّر إمكانية توفّر نماذج الذكاء الاصطناعي التوليدي بشكل متكرّر، حيث يتم إطلاق نماذج جديدة أفضل وإيقاف النماذج القديمة الأقل تطوّرًا.
عند الوصول إلى نماذج الذكاء الاصطناعي التوليدي مباشرةً من تطبيق على الأجهزة الجوّالة أو تطبيق ويب باستخدام 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.
تأكَّد من اختيار العميل من أداة اختيار العميل/الخادم في أعلى الصفحة.
ابدأ نموذج عميل بالنقر على إنشاء إعداد (أو إضافة مَعلمة إذا كنت قد استخدمت نماذج العملاء من قبل).
حدِّد المَعلمة
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، مع فتح المشروع، انتقِل إلى ملف > إضافة موارد الاعتمادية للحزمة.
اختَر firebase-ios-sdk ، ثم انقر على إضافة حزمة.
من "أداة التنقّل في المشروع"، اختَر تطبيقك > الأهداف > تطبيقك.
من علامة التبويب الإعدادات العامة ، انتقِل إلى الأطر والمكتبات والمحتوى المضمّن.
انقر على + واختَر FirebaseRemoteConfig، ثم انقر على إضافة.
أضِف عملية استيراد
FirebaseRemoteConfigإلى الرمز البرمجي: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.13.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.13.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 Logicimport '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، انقر بزر الماوس الأيمن على تطبيقك واختَر إضافة ملفات
اختَر remote_config_defaults.plist، ثم انقر على إضافة.
عدِّل رمز تطبيقك للإشارة إلى الملف التلقائي:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
من وحدة تحكّم Firebase، افتح Remote Config.
في علامة التبويب المَعلمات ، افتح القائمة، ثم انقر على تنزيل القيم التلقائية.
عندما يُطلب منك ذلك، فعِّل ملف .xml لنظام التشغيل Android، ثم انقر على تنزيل الملف.
احفظ الملف في دليل موارد XML لتطبيقك.
عدِّل ملف النشاط الرئيسي لإضافة الإعدادات التلقائية بعد
configSettingsالتي أضفتها سابقًا:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
في وحدة تحكّم Firebase، افتح Remote Config.
في علامة التبويب المَعلمات ، افتح القائمة، ثم انقر على تنزيل القيم التلقائية.
عندما يُطلب منك ذلك، فعِّل ملف .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
// 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
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: تشغيل التطبيق
أنشِئ التطبيق وشغِّله وتأكَّد من أنّه يعمل. أجرِ تغييرات على إعداداتك من صفحة Remote Config في وحدة تحكّم Firebase، وانشر التغييرات، وتأكَّد من النتيجة.
الخطوات التالية
مزيد من المعلومات عن تنفيذ حالات استخدام أخرى لـ وRemote ConfigFirebase AI Logic.
بالنسبة إلى تطبيقات الأجهزة الجوّالة والألعاب:
اختبِر إعدادات النماذج المختلفة باستخدام Remote Config وA/B Testing.
أطلِق تغييرات مَعلمات النموذج تدريجيًا باستخدام Remote Config عمليات طرح ميزة "الإعداد عن بُعد" (على نظامَي التشغيل iOS+ وAndroid فقط).
استخدِم ميزة Remote Config المخصّصة لاستخدام تعلُّم الآلة لتحديد أفضل الإعدادات للمستخدمين الأفراد (على نظام التشغيل iOS+ وAndroid وUnity فقط).