عند استدعاء Gemini API من تطبيقك باستخدام حزمة تطوير برامج (SDK) من Firebase AI Logic، يحتوي طلبك على عدد من المَعلمات التي تتحكّم في ردود الذكاء الاصطناعي التوليدي. وتشمل هذه عادةً اسم النموذج وإعدادات إنشاء النموذج (مثل الحد الأقصى لعدد الرموز المميّزة في المخرجات) وإعدادات الأمان وتعليمات النظام وبيانات الطلب.
في معظم الحالات، ستحتاج إلى تغيير هذه الإعدادات عند الطلب أو حسب الحاجة لعدد من السيناريوهات:
- يمكنك تحديث نموذج الذكاء الاصطناعي التوليدي بدون إصدار تطبيق جديد. يمكنك الترقية إلى إصدارات أحدث ومستقرة من النموذج قبل إيقاف الإصدارات السابقة، أو الانتقال إلى نماذج أقل تكلفة أو أعلى أداءً بناءً على احتياجات المستخدمين وسماتهم، أو نشر أحدث النماذج وأفضلها بشكل مشروط لشرائح مستخدمين محددة (مثل مختبري الإصدارات التجريبية).
- اضبط الموقع الجغرافي الذي تصل منه إلى النموذج ليكون أقرب إلى المستخدمين.
- يمكنك إجراء اختبارات A/B لتعليمات النظام والطلبات المختلفة، ثم طرح قيم التجربة الفائزة تدريجيًا للمستخدمين.
- استخدِم علامات الميزات لعرض الميزات المستنِدة إلى الذكاء الاصطناعي التوليدي أو إخفائها بسرعة في تطبيقك.
تتيح لك ميزة Firebase Remote Config تنفيذ كل ذلك وأكثر، إذ يمكنك تعديل قيم المَعلمات حسب الحاجة وبشكل مشروط لمثيلات التطبيق التي تتطابق مع الخصائص التي تحدّدها في وحدة تحكّم Firebase، بدون إصدار نسخة جديدة من تطبيقك.
يقدّم دليل الحلول هذا حالات استخدام محدّدة يُنصح بها، ويوضّح كيفية إضافة Remote Config إلى تطبيق الذكاء الاصطناعي التوليدي.
لماذا يجب استخدام Firebase Remote Config مع تطبيقك؟
تتيح لك ميزة "Firebase Remote Config" تعديل سلوك تطبيقك بشكل ديناميكي بدون الحاجة إلى تحديث التطبيق. وهذا مفيد بشكل خاص للتطبيقات التي تستخدم الذكاء الاصطناعي التوليدي، حيث يكون التكرار السريع والضبط الدقيق أمرًا بالغ الأهمية.
حالات الاستخدام الأساسية لـ "Remote Config" مع تطبيقات الذكاء الاصطناعي التوليدي
ننصح باستخدام Remote Config مع Firebase AI Logic في حالات الاستخدام الأساسية التالية:
الترقية إلى أحدث إصدار من النموذج بدون تحديث التطبيق: استخدِم مَعلمات Remote Config لتغيير اسم النموذج حسب الحاجة، حتى تتمكّن من الترقية إلى أحدث إصدار من نموذج Gemini المفضّل لديك فور توفّره.
تعديل تعليمات النظام وإعدادات الأمان بدون تحديث التطبيق: يمكنك تخزين تعليمات النظام وإعدادات الأمان داخل مَعلمات Remote Config لضمان إمكانية تغييرها عند الطلب في حال اكتشاف مشاكل بعد النشر.
الحدّ من المخاطر وفرض إجراءات الأمان في الذكاء الاصطناعي: استخدِم عمليات طرح Remote Config لإصدار التغييرات المستندة إلى الذكاء الاصطناعي التوليدي بأمان وتدريجيًا لمستخدمي iOS وAndroid.
حالات الاستخدام المتقدّمة والمقترَحة لـ Remote Config مع تطبيقات الذكاء الاصطناعي التوليدي
بعد تجهيز تطبيقك باستخدام Remote Config وGoogle Analytics، يمكنك استكشاف حالات الاستخدام المتقدّمة:
ضبط الموقع الجغرافي استنادًا إلى الموقع الجغرافي للعميل: يمكنك استخدام شروط Remote Config من أجل ضبط الموقع الجغرافي الذي تصل منه إلى النموذج استنادًا إلى الموقع الجغرافي الذي تم رصده للعميل.
تجربة نماذج مختلفة: يمكنك اختبار نماذج الذكاء الاصطناعي التوليدي المختلفة والتبديل بينها بسرعة، أو حتى الوصول إلى نماذج مختلفة لشرائح مستخدمين مختلفة، للعثور على النموذج الأنسب لحالة الاستخدام المحدّدة لديك.
تحسين أداء النموذج: يمكنك ضبط مَعلمات النموذج، مثل طلب النظام والحد الأقصى لعدد الرموز المميزة في الردّ وغيرها من الإعدادات.
استخدام تعليمات نظام وطلبات وإعدادات نماذج مختلفة استنادًا إلى سمات العملاء: عند استخدام Remote Config مع Google Analytics، يمكنك إنشاء شروط استنادًا إلى سمات العملاء أو شرائح الجمهور المخصّصة وضبط مَعلمات مختلفة استنادًا إلى هذه السمات.
على سبيل المثال، إذا كنت تستخدم الذكاء الاصطناعي التوليدي لتقديم الدعم الفني في تطبيقك، قد تحتاج إلى ضبط تعليمات النظام الخاصة بالمنصة التي يعمل عليها التطبيق لضمان تقديم تعليمات دقيقة لمستخدمي Android وiOS والويب.
تخصيص التجارب لكل مستخدم: استخدِم ميزة التخصيص في Remote Config مع تطبيقاتك وألعابك على الأجهزة الجوّالة لتحديد الإعدادات المثلى للذكاء الاصطناعي التوليدي تلقائيًا لكل مستخدم.
التحكّم في التكاليف: يمكنك تعديل نماذج الذكاء الاصطناعي التوليدي التي يتم استدعاؤها عن بُعد، وتحديد معدّل تكرار استخدامها، وضبط الحد الأقصى لقيم الرموز المميّزة الناتجة بشكل ديناميكي استنادًا إلى شريحة الجمهور، وذلك لتقليل التكاليف غير الضرورية.
تحسين تجربة التطبيق ونتائجه: استخدِم A/B Testing مع Remote Config في تطبيقاتك وألعابك على الأجهزة الجوّالة لاختبار التغييرات في مَعلمات الذكاء الاصطناعي التوليدي على مستوى شرائح المستخدمين المختلفة لمعرفة مدى تأثيرها في المقاييس الرئيسية، مثل معدّل الحفاظ على المستخدمين والإيرادات.
من خلال تزويد تطبيق الذكاء الاصطناعي التوليدي بـ Firebase Remote Config، يمكنك إنشاء تطبيقات مرنة وآمنة وفعّالة من حيث التكلفة مستندة إلى الذكاء الاصطناعي مع توفير تجارب رائعة للمستخدمين.
إضافة 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 واضبط المَعلمات والقيم التي تريد جلبها واستخدامها في التطبيق.
في وحدة تحكّم Firebase، انتقِل إلى DevOps & Engagement > الإعداد عن بُعد.
من أداة اختيار العميل/الخادم في أعلى الصفحة، اختَر العميل.
ابدأ نموذج عميل بالنقر على إنشاء إعدادات (أو إضافة مَعلمة إذا سبق لك استخدام نماذج العملاء).
حدِّد المَعلمات التي تريد التحكّم فيها باستخدام Remote Config. على سبيل المثال:
اسم المَعلمة الوصف النوع القيمة التلقائية model_nameاسم النموذج يمكنك الاطّلاع على أسماء النماذج المتاحة. سلسلة gemini-3.8-flashsystem_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ينطبق ذلك فقط في حال استخدام Agent Platform Gemini API (formerly Vertex AI).
التحكّم في الموقع الجغرافي للوصول إلى النموذج يمكنك ضبط الشروط لضبط هذا الخيار استنادًا إلى الموقع الجغرافي للعميل الذي يرصده Google Analytics.سلسلة globalعند الانتهاء من إضافة المَعلمات، انقر على نشر التغييرات. إذا لم يكن هذا نموذجًا جديدًا في "Remote Config"، راجِع التغييرات وانقر على نشر التغييرات مرة أخرى.
الخطوة 2: إضافة Remote Config وإعداده في تطبيقك
أضِف مكتبة Remote Config واضبط إعدادات Remote Config في تطبيقك.
Swift
في إطار عملية إعداد Firebase AI Logic، سبق لك إضافة حزمة تطوير البرامج (SDK) لمنصة Firebase إلى تطبيقك، ولكن عليك أيضًا إضافة Remote Config.
في Xcode، افتح المشروع وانتقِل إلى ملف > إضافة موارد الاعتمادية للحزمة (File > Add Package Dependencies).
اختَر firebase-ios-sdk، ثم انقر على إضافة حزمة (Add package).
من "مستكشف المشروع" (Project navigator)، اختَر تطبيقك > الأهداف (Targets) > تطبيقك.
من علامة التبويب عام، انتقِل إلى الأطر والمكتبات والمحتوى المضمّن.
انقر على + واختَر FirebaseRemoteConfig، ثم انقر على إضافة.
أضِف عملية استيراد
FirebaseRemoteConfigإلى الرمز:import FirebaseRemoteConfigداخل الفئة المناسبة لتطبيقك، عليك إعداد Firebase وإضافة Remote Config إلى منطق التطبيق الرئيسي.
هنا، ستُدرج Remote Config وRemote Config real-time listener كعمليات استيراد ليتمكّن التطبيق من جلب القيم الجديدة في الوقت الفعلي، وستضيف الحد الأدنى للفاصل الزمني للجلب:
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:35.1.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:35.1.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 لحزمة تطوير البرامج (SDK) الخاصة بـ Firebase AI Logic، عليك إعداد 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_ai/firebase_ai.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart';أضِف المتغيّرات
_modelNameو_systemInstructionsو_promptإلى تطبيقك لتتمكّن من استخدامها لاحقًا: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، انتقِل إلى صفحة DevOps & Engagement > الإعداد عن بُعد > المَعلمات.
افتح
القائمة ، واختَر تنزيل القيم التلقائية.عندما يُطلب منك ذلك، فعِّل ملف plist.لنظام التشغيل iOS، ثم انقر على تنزيل الملف.
احفظ الملف في دليل التطبيق.
في Xcode، انقر بزر الماوس الأيمن على تطبيقك واختَر إضافة ملفات (Add Files).
اختَر remote_config_defaults.plist، ثم انقر على إضافة.
عدِّل رمز تطبيقك للإشارة إلى ملف القيم التلقائية:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
في وحدة تحكّم Firebase، انتقِل إلى صفحة DevOps & Engagement > الإعداد عن بُعد > المَعلمات.
افتح
القائمة ، واختَر تنزيل القيم التلقائية.عندما يُطلب منك ذلك، فعِّل .xml لنظام التشغيل Android، ثم انقر على تنزيل الملف.
احفظ الملف في دليل موارد XML الخاص بتطبيقك.
عدِّل ملف النشاط الرئيسي لإضافة الإعدادات التلقائية بعد
configSettingsالتي أضفتها سابقًا:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
في وحدة تحكّم Firebase، انتقِل إلى صفحة DevOps & Engagement > الإعداد عن بُعد > المَعلمات.
افتح
القائمة ، واختَر تنزيل القيم التلقائية.عندما يُطلب منك ذلك، فعِّل .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-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
أضِف
getValueوfetchAndActivateإلى عمليات الاستيراد:import { getValue, fetchAndActivate } from 'firebase/remote-config';ابحث عن الرمز الذي تحدّد فيه قيم 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 Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// 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 Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())
// 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 Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
FirebaseAI ai = FirebaseAI.getInstance(GenerativeBackend.googleAI());
// 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 Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// 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 Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
final ai = await FirebaseAI.googleAI();
// 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 Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// 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"، ثم نشر التغييرات والتحقّق من النتيجة.
الخطوات التالية
أضِف Google Analytics إلى رمز العميل لتفعيل الاستهداف.
بالنسبة إلى التطبيقات والألعاب على الأجهزة الجوّالة:
اختبِر إعدادات النماذج المختلفة باستخدام Remote Config وA/B Testing.
يمكنك طرح تغييرات مَعلمات النماذج تدريجيًا باستخدام عمليات طرح Remote Config (على أجهزة iOS+ وAndroid فقط).
استخدِم تخصيص Remote Config لاستخدام تكنولوجيا تعلُّم الآلة من أجل تحديد أفضل الإعدادات للمستخدمين الأفراد (iOS+ وAndroid وUnity فقط).