تغيير اسم النموذج عن بُعد في تطبيقك

تتغيّر إمكانية توفّر نماذج الذكاء الاصطناعي التوليدي بشكل متكرّر، حيث يتم إطلاق نماذج جديدة أفضل وإيقاف النماذج القديمة الأقل تطوّرًا.

عند الوصول إلى نماذج الذكاء الاصطناعي التوليدي مباشرةً من تطبيق على الأجهزة الجوّالة أو تطبيق ويب باستخدام Firebase AI Logic، من المهم جدًا ضبط تطبيقك لاستيعاب هذه التغييرات المتكرّرة في النماذج. لن يحدّث جميع المستخدمين تطبيقك إلى أحدث إصدار لبدء استخدام النموذج الذي تريد منهم استخدامه.

Firebase Remote Config تتيح لك تعديل قيم المَعلمات في تطبيقك (مثل اسم النموذج) بشكل ديناميكي وعن بُعد من Firebase، بدون الحاجة إلى إطلاق إصدار جديد من تطبيقك.

يُرجى العِلم أنّ تغيير اسم النموذج هو حالة استخدام مهمة لاستخدام Remote Config مع Firebase AI Logic، ولكن يمكنك أيضًا استخدام Remote Config للتحكّم ديناميكيًا وحتى بشكل مشروط في المَعلمات في تطبيقك، مثل إعدادات إنشاء النموذج (الحد الأقصى للرموز المميّزة ودرجة العشوائية وما إلى ذلك)، وإعدادات الأمان وتعليمات النظام وبيانات الطلب.

يصف هذا الدليل كيفية تنفيذ Remote Config في تطبيقك، وتحديدًا للتحكّم في اسم النموذج المستخدَم في تطبيقك.

الخطوة 1: ضبط قيمة المَعلمة في وحدة تحكّم Firebase

أنشِئ نموذجًا لعميل Remote Config واضبط مَعلمة model_name وقيمتها لاسترجاعها واستخدامها في التطبيق.

  1. افتح مشروع Firebase في وحدة تحكّم Firebase. بعد ذلك، من قائمة التنقّل، وسِّع تشغيل وانقر على Remote Config.

  2. تأكَّد من اختيار العميل من أداة اختيار العميل/الخادم في أعلى الصفحة.

  3. ابدأ نموذج عميل بالنقر على إنشاء إعداد (أو إضافة مَعلمة إذا كنت قد استخدمت نماذج العملاء من قبل).

  4. حدِّد المَعلمة model_name:

    اسم المَعلمة الوصف النوع القيمة التلقائية
    model_name اسم النموذج اطّلِع على أسماء النماذج المتاحة. سلسلة gemini-2.5-flash
  5. بعد إضافة هذه المَعلمة، انقر على نشر التغييرات. إذا لم يكن هذا نموذجًا جديدًا لـ Remote Config، راجِع التغييرات وانقر على نشر التغييرات مرة أخرى.

الخطوة 2: إضافة ميزة Remote Config وتهيئتها في تطبيقك

أضِف مكتبة Remote Config واضبط ميزة Remote Config داخل تطبيقك.

Swift

كجزء من Firebase AI Logic الإعداد، سبق لك إضافة Firebase SDK إلى تطبيقك، ولكن ستحتاج أيضًا إلى إضافة Remote Config.

  1. في Xcode، مع فتح المشروع، انتقِل إلى ملف > إضافة موارد الاعتمادية للحزمة.

  2. اختَر firebase-ios-sdk ، ثم انقر على إضافة حزمة.

  3. من "أداة التنقّل في المشروع"، اختَر تطبيقك > الأهداف > تطبيقك.

  4. من علامة التبويب الإعدادات العامة ، انتقِل إلى الأطر والمكتبات والمحتوى المضمّن.

  5. انقر على + واختَر FirebaseRemoteConfig، ثم انقر على إضافة.

  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:34.13.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:34.13.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 لـ Firebase AI Logic SDK، ابدأ 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_vertexai/firebase_ai.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_remote_config/firebase_remote_config.dart';
    
  3. أضِف المتغيّر _modelName إلى تطبيقك لكي تتمكّن من استخدامه لاحقًا:

    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، افتح Remote Config.

  2. في علامة التبويب المَعلمات ، افتح القائمة، ثم انقر على تنزيل القيم التلقائية.

  3. عندما يُطلب منك ذلك، فعِّل ملف ‎.plist لنظام التشغيل iOS، ثم انقر على تنزيل الملف.

  4. احفظ الملف في دليل تطبيقك.

  5. في Xcode، انقر بزر الماوس الأيمن على تطبيقك واختَر إضافة ملفات

  6. اختَر remote_config_defaults.plist، ثم انقر على إضافة.

  7. عدِّل رمز تطبيقك للإشارة إلى الملف التلقائي:

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

Kotlin

  1. من وحدة تحكّم Firebase، افتح Remote Config.

  2. في علامة التبويب المَعلمات ، افتح القائمة، ثم انقر على تنزيل القيم التلقائية.

  3. عندما يُطلب منك ذلك، فعِّل ملف ‎.xml لنظام التشغيل Android، ثم انقر على تنزيل الملف.

  4. احفظ الملف في دليل موارد XML لتطبيقك.

  5. عدِّل ملف النشاط الرئيسي لإضافة الإعدادات التلقائية بعد configSettings التي أضفتها سابقًا:

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

Java

  1. في وحدة تحكّم Firebase، افتح Remote Config.

  2. في علامة التبويب المَعلمات ، افتح القائمة، ثم انقر على تنزيل القيم التلقائية.

  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-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

  1. أضِف getValue وfetchAndActivate إلى عمليات الاستيراد:

    import { getValue, fetchAndActivate } from 'firebase/remote-config';
    
  2. حدِّد موقع الرمز البرمجي الذي تحدِّد فيه القيمة التلقائية لاسم النموذج. بعد مجموعة الرموز مباشرةً، أضِف الرمز البرمجي التالي لاسترجاع الإعداد وتفعيله وتعيين القيمة المسترجَعة للثابت 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 فقط).