عند طلب 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 وWeb.
تخصيص التجارب لكل مستخدم: استخدِم ميزة Remote Config التخصيص مع التطبيقات والألعاب المتوافقة مع الأجهزة الجوّالة لتحديد الإعدادات المثلى للذكاء الاصطناعي التوليدي تلقائيًا لكل مستخدم.
التحكّم في التكاليف: يمكنك تعديل نماذج الذكاء الاصطناعي التوليدي التي يتمّ استدعاؤها عن بُعد ومعدّل استخدامها، وضبط الحدّ الأقصى لقيم الرموز المميّزة للمخرجات ديناميكيًا استنادًا إلى قاعدة مستخدمي التطبيق بهدف خفض التكاليف غير الضرورية.
تحسين تجربة استخدام التطبيق ونتائجه: استخدِم A/B Testing مع Remote Config مع تطبيقاتك وألعابك المتوافقة مع الأجهزة الجوّالة لاختبار التغييرات في مَعلمات الذكاء الاصطناعي التوليدي على مستوى شرائح المستخدمين المختلفة لمعرفة مدى تأثيرها في المقاييس الرئيسية، مثل معدل الاحتفاظ بالمستخدمين والإيرادات.
من خلال ربط تطبيق الذكاء الاصطناعي التوليدي بـ Firebase Remote Config، يمكنك إنشاء تطبيقات مستندة إلى الذكاء الاصطناعي تتسم بالمرونة والأمان والتكلفة المنخفضة، مع توفير تجارب ممتعة للمستخدمين.
إضافة Firebase Remote Config إلى تطبيقك
في دليل الحلّ هذا، ستستخدم Firebase Remote Config لتعديل المَعلمات ديناميكيًا في تطبيق Android الذي يستخدِم حزمة تطوير البرامج (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 في وحدة تحكُّم Firebase. بعد ذلك، من قائمة التنقّل، وسِّع Run (تشغيل) واختَر Remote Config.
- تأكَّد من اختيار العميل من أداة اختيار العميل/الخادم في أعلى الصفحة.
- ابدأ نموذج عميل بالنقر على إنشاء إعداد (أو إضافة مَعلمة إذا سبق لك استخدام نماذج العملاء).
حدِّد المَعلمات التي تريد التحكّم فيها باستخدام Remote Config. على سبيل المثال:
اسم المَعلمة الوصف النوع القيمة التلقائية model_name
اسم الطراز اطّلِع على أسماء الطُرز المتاحة. سلسلة gemini-2.0-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!
vertex_location
لا ينطبق ذلك إلا عند استخدام Vertex AI Gemini API.
التحكّم في الموقع الجغرافي للوصول إلى النموذج يمكنك ضبط شروط لضبط هذا الخيار استنادًا إلى الموقع الجغرافي للعميل الذي يرصده Google Analytics.سلسلة us-central1
عند الانتهاء من إضافة المَعلمات، انقر على نشر التغييرات. إذا كان هذا النموذج ليس نموذجًا جديدًا من Remote Config، راجِع التغييرات وانقر على نشر التغييرات مرة أخرى.
الخطوة 2: إضافة Remote Config وإعداده في تطبيقك
أضِف مكتبة Remote Config وإعداد Remote Config داخل تطبيقك.
Swift
كجزء من إعداد Firebase AI Logic، سبق لك إضافة حزمة تطوير البرامج (SDK) لمنصّة Firebase إلى تطبيقك، ولكن عليك أيضًا إضافة 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
في تطبيق البدء السريع، يكون هذا الإجراء داخل
VertexAISampleApp
، ضمن فئةAppDelegate
.
Kotlin
أضِف الاعتمادية على Remote Config إلى ملف Gradle للوحدة (على مستوى التطبيق) (عادةً
app/build.gradle.kts
أوapp/build.gradle
):dependencies { implementation(platform("com.google.firebase:firebase-bom:33.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:33.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 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
و_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، افتح Remote Config.
في علامة التبويب المَعلمات، افتح القائمة، ثم اختَر تنزيل القيم التلقائية.
فعِّل ملف plist.لنظام التشغيل iOS عندما يُطلب منك ذلك، ثم انقر على تنزيل الملف.
احفظ الملف في دليل تطبيقك.
في حال استخدام نموذج التطبيق، احفظه في ملف
FirebaseVertexAI/Sample/VertexAISample
.في Xcode، انقر بزر الماوس الأيمن على تطبيقك واختَر إضافة ملفات.
في حال استخدام العيّنة، انقر بزر الماوس الأيمن على VertexAISample واختَر إضافة ملفات إلى "VertexAISample".
اختَر remote_config_defaults.plist، ثم انقر على إضافة.
عدِّل رمز تطبيقك للإشارة إلى ملف الإعدادات التلقائية:
// Set default values remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
من وحدة تحكّم Firebase، افتح Remote Config.
في علامة التبويب المَعلمات، افتح القائمة، ثم اختَر تنزيل القيم التلقائية.
فعِّل ملف .xml لأجهزة Android عندما يُطلب منك ذلك، ثم انقر على تنزيل الملف.
احفظ الملف في دليل موارد XML الخاص بتطبيقك.
عدِّل ملف النشاط الرئيسي لإضافة الإعدادات التلقائية بعد
configSettings
التي أضفتها سابقًا:// Set default values. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
في وحدة تحكّم Firebase، افتح Remote Config.
في علامة التبويب المَعلمات، افتح القائمة، ثم اختَر تنزيل القيم التلقائية.
فعِّل ملف .xml لأجهزة Android عندما يُطلب منك ذلك، ثم انقر على تنزيل الملف.
احفظ الملف في دليل موارد XML الخاص بتطبيقك.
عدِّل ملف النشاط الرئيسي لإضافة الإعدادات التلقائية بعد
configSettings
التي أضفتها سابقًا:// Set default values. mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Web
يمكنك ضبط القيم التلقائية مباشرةً في الرمز البرمجي:
// Set default Remote Config parameter values
remoteConfig.defaultConfig = {
model_name: 'gemini-2.0-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!',
vertex_location: 'us-central1',
};
Dart
يمكنك ضبط القيم التلقائية مباشرةً في الرمز البرمجي:
remoteConfig.setDefaults(const {
"model_name": "gemini-2.0-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!",
"vertex_location": "us-central1"
});
Unity
يمكنك ضبط القيم التلقائية مباشرةً في الرمز البرمجي:
await remoteConfig.SetDefaultsAsync(
new System.Collections.Generic.Dictionary<string, object>() {
{ "model_name", "gemini-2.0-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!" },
{ "vertex_location", "us-central1" }
}
);
الخطوة 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
وvertexLocation
.// 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 vertexLocation = getValue(remoteConfig, 'vertex_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? _vertexLocation = remoteConfig.getString("vertex_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
لا يمكن استخدام ميزة الاستماع في الوقت الفعلي إلى 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
// 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، ثم انشر التغييرات وتحقّق من النتيجة.
الخطوات التالية
اطّلِع على مزيد من المعلومات عن Remote Config.
أضِف Google Analytics إلى رمز العميل لتفعيل الاستهداف.
بالنسبة إلى التطبيقات والألعاب المتوافقة مع الأجهزة الجوّالة:
اختبِر إعدادات النماذج المختلفة باستخدام Remote Config وA/B Testing.
طرح التغييرات في مَعلمات النماذج تدريجيًا باستخدام عمليات طرح Remote Config (لنظامَي التشغيل iOS والإصدارات الأحدث وAndroid فقط)
استخدِم ميزة Remote Configالتخصيص لتطبيق تكنولوجيا تعلُّم الآلة من أجل تحديد أفضل الإعدادات للمستخدمين الفرديين (iOS والإصدارات الأحدث وAndroid وUnity فقط).