تعديل Vertex AI في تطبيق Firebase ديناميكيًا باستخدام ميزة "الإعداد عن بُعد في Firebase"

عند طلب Gemini API من تطبيقك باستخدام حزمة تطوير برامج (SDK) Vertex AI in Firebase، يحتوي طلبك على عدد من المَعلمات التي تتحكّم في ردود الذكاء الاصطناعي التوليدي. وتشمل هذه الإعدادات عادةً اسم النموذج، وملف بدء إنشاء النموذج (الحد الأقصى للرموز المميّزة ودرجة الحرارة وما إلى ذلك)، وإعدادات safety ، وتعليمات النظام، وبيانات الطلب.

في معظم الحالات، ستحتاج إلى تغيير هذه الإعدادات عند الطلب أو حسب الحاجة لعددٍ من السيناريوهات:

  • يمكنك تعديل نموذج الذكاء الاصطناعي التوليدي بدون إصدار تطبيق جديد. يمكنك الترقية إلى إصدارات أحدث وأكثر ثباتًا من النماذج قبل إيقاف الإصدارات السابقة نهائيًا، أو استخدام نماذج ذات تكلفة أقل أو أداء أعلى استنادًا إلى احتياجات المستخدمين وخصائصهم، أو نشر أحدث نماذج وأفضلها بشكل مشروط على شرائح مستخدمين معيّنة (مثل المختبِرين التجريبيين).
  • يمكنك تحديد المكان الذي يمكنك من خلاله الوصول إلى النموذج بحيث يكون أقرب إلى المستخدمين.
  • يمكنك استخدام اختبار A/B لاختبار طلبات النظام المختلفة، ثم طرح قيم التجربة الفائزة تدريجيًا على المستخدمين.
  • يمكنك استخدام علامات الميزات لعرض الميزات المستنِدة إلى الذكاء الاصطناعي التوليدي أو إخفائها بسرعة في تطبيقك.

توفّر أداة Firebase Remote Config كل هذه الميزات وغيرها، ما يتيح لك تعديل قيم المَعلمات حسب الحاجة وبشكل مشروط لنسخ التطبيق التي تتطابق مع الخصائص التي تحدّدها في وحدة تحكّم Firebase، بدون إصدار إصدار جديد من تطبيقك.

يقدّم دليل الحلول هذا حالات استخدام محدّدة مقترَحة ويوضّح كيفية إضافة Remote Config إلى تطبيق الذكاء الاصطناعي التوليدي.

الانتقال إلى تنفيذ الرمز

ما هي مزايا استخدام Firebase Remote Config مع تطبيقك؟

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

حالات الاستخدام الأساسية لتطبيق Remote Config مع تطبيقات الذكاء الاصطناعي التوليدي

ننصحك باستخدام Remote Config مع Vertex AI in Firebase في حالات الاستخدام الأساسية التالية:

  • الترقية إلى أحدث إصدار من النموذج بدون تحديث التطبيق: استخدِم參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 مع تطبيقات iOS وAndroid و Flutter لاختبار التغييرات في مَعلمات الذكاء الاصطناعي التوليدي على مستوى شرائح المستخدمين المختلفة لمعرفة مدى تأثيرها في المقاييس الرئيسية، مثل الاحتفاظ بالمستخدمين والأرباح.

من خلال تزويد تطبيقك بالذكاء الاصطناعي التوليدي باستخدام "Firebase Remote Config"، يمكنك إنشاء تطبيقات مرنة وآمنة وغير مكلفة تستند إلى الذكاء الاصطناعي، مع توفير تجارب رائعة للمستخدمين.

إضافة Firebase Remote Config إلى تطبيقك

في دليل الحلّ هذا، ستستخدم Firebase Remote Config لتعديل المَعلمات ديناميكيًا في تطبيق Android الذي يستخدِم حزمة تطوير البرامج (SDK) Vertex AI in Firebase. سوف تتعلم كيفية:

  • يمكنك استرجاع مَعلمات وتفعيلها، مثل أسماء الطُرز وتعليمات النظام من "Firebase Remote Config".
  • عدِّل طلبات Gemini API لاستخدام المَعلمات التي يتم استرجاعها ديناميكيًا، مما يتيح لك التبديل بين النماذج المختلفة أو تعديل تعليمات النظام بدون تحديث التطبيق.
  • التحكّم في المَعلمات عن بُعد، وتعديل سلوك النموذج وإمكاناته حسب الحاجة

المتطلبات الأساسية

يفترض هذا الدليل أنّك على دراية باستخدام "استوديو Android" لتطوير تطبيقات متوافقة مع أنظمة Android الأساسية. قبل البدء، تأكَّد من تنفيذ ما يلي:

  • أكمِل دليل البدء الخاص بحزمة تطوير البرامج (SDK) Vertex AI in Firebase. تأكَّد من تنفيذ كلّ ما يلي:

    1. إعداد مشروع جديد أو حالي على Firebase، بما في ذلك استخدام خطط أسعار Blaze وتفعيل واجهات برمجة التطبيقات المطلوبة
    2. ربط تطبيقك بمنصّة Firebase، بما في ذلك تسجيل تطبيقك وإضافة إعدادات Firebase إلى تطبيقك
    3. أضِف حزمة تطوير البرامج (SDK) وأبدِئ خدمة Vertex AI والنموذج التوليدي في تطبيقك.
  • فعِّل Google Analytics في مشروعك و أضِف حزمة تطوير البرامج (SDK) الخاصة به إلى تطبيقك (مطلوب للاستهداف الشَرطي، مثل ضبط الموقع الجغرافي للخدمة والنموذج استنادًا إلى الموقع الجغرافي لجهاز العميل).

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

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

  1. افتح مشروعك على Firebase في وحدة تحكُّم Firebase، ومن قائمة التنقّل، وسِّع تشغيل واختَر Remote Config.
  2. تأكَّد من اختيار العميل من أداة اختيار العميل/الخادم في أعلى صفحة Remote Config.
    • إذا كانت هذه هي المرّة الأولى التي تستخدِم فيها نماذج عملاء Remote Config، انقر على إنشاء الإعداد. يظهر جزء إنشاء مَعلمتك الأولى.
    • إذا لم تكن هذه هي المرة الأولى التي تستخدم فيها نماذج Remote Config، انقر على إضافة مَعلمة.
  3. حدِّد مَعلمات Remote Config التالية:

    اسم المَعلمة الوصف النوع القيمة التلقائية
    model_name اسم الطراز للحصول على أحدث قوائم بأسماء النماذج لاستخدامها في الرمز، راجِع أسماء الطُرز المتاحة. سلسلة gemini-1.5-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 والوصول إلى نموذج. يمكنك ضبط شروط لضبط هذا الخيار استنادًا إلى الموقع الجغرافي للعميل الذي رصده "Google Analytics". سلسلة us-central1
  4. عند الانتهاء من إضافة المَعلمات، انقر على نشر التغييرات. إذا كان هذا ليس نموذجًا جديدًا من Remote Config، راجِع التغييرات وانقر على نشر التغييرات مرة أخرى.

الخطوة 2: إضافة حزمة تطوير البرامج (SDK) لحزمة Remote Config وإعدادها في تطبيقك

أضِف تبعيات Remote Config وإعداد Remote Config داخل تطبيقك.

  1. أضِف الاعتمادية على Remote Config إلى ملف Gradle للوحدة (على مستوى التطبيق) (عادةً app/build.gradle.kts أو app/build.gradle):

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:33.6.0"))
        implementation("com.google.firebase:firebase-vertexai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. أضِف Remote Config إلى منطق التطبيق الرئيسي. هنا، ستقوم بتهيئة Remote Config وإضافة الحد الأدنى للفاصل الزمني للجلب:

    Kotlin+KTX

    val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
    

    Java

    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
    mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
    

في هذا المثال، تكون المدة التلقائية للبحث هي 3600 ثانية، ولكننا ننصحك بضبط الحد الأدنى للمدة التلقائية للبحث على قيمة منخفضة نسبيًا في الرمز البرمجي أثناء التطوير.

الخطوة 3: ضبط قيم المَعلمات داخل التطبيق

يجب ضبط قيم المَعلمات التلقائية داخل التطبيق في عنصر Remote Config. يضمن ذلك أن يعمل تطبيقك على النحو المتوقّع حتى إذا لم يتمكّن من جلب القيم من خدمة Remote Config.

  1. من وحدة تحكّم "Firebase"، افتح Remote Config.
  2. في علامة التبويب المَعلمات، افتح القائمة، ثم اختَر تنزيل القيم التلقائية.
  3. فعِّل .xml لنظام التشغيل Android عندما يُطلب منك ذلك، ثم انقر على تنزيل الملف.
  4. احفظ الملف في دليل موارد XML الخاص بتطبيقك.
  5. عدِّل ملف النشاط الرئيسي لإضافة الإعدادات التلقائية بعد configSettingsالتي أضفتها سابقًا:

    Kotlin+KTX

    // Set default values.
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    

    Java

    // Set default values.
    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
    

الخطوة 4: استرجاع القيم وتنشيطها

بعد ضبط الإعدادات التلقائية، أضِف ما يلي لاسترجاع القيم وتفعيلها:

Kotlin+KTX

// 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)
            }
          }
    });

الخطوة 5: إضافة مستمع Remote Config في الوقت الفعلي

أضِف مستمعًا لأحداث Remote Config في الوقت الفعلي إلى تطبيقك لضمان أن تتم مشاركة التغييرات التي تجريها على نموذج Remote Config مع العميل فور تعديلها.

تعدِّل التعليمة البرمجية التالية عنصر Remote Config عند تغيُّر قيمة أحد المَعلمات. يمكنك أيضًا اختياريًا ضبط إجراء داخل addOnCompleteListener التفعيل:

Kotlin+KTX

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

  // 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);
      }
  });

الخطوة 6: منح قيم Remote Config لمتغيّرات Vertex AI

بعد ضبط Remote Config بالكامل، عدِّل الرمز البرمجي لاستبدال القيم الثابتة بقيم مصدرها Remote Config.

استبدِل القيم الثابتة للموقع الجغرافي واسم الطراز وتعليمات النظام والطلب الموجَّه إلى المستخدم بالقيم المستمَدة من Remote Config.

Kotlin+KTX

// Initialize FirebaseVertexAI instance
// Optionally specify a location in which to run the service and access the model
val vertexAI = Firebase.vertexAI(location = remoteConfig.getString("vertex_location"))

// Initialize the Vertex AI service and the generative model
// Specify a model that supports system instructions, like a Gemini 1.5 model
val generativeModel = Firebase.vertexAI.generativeModel(
  modelName = remoteConfig.getString("model_name"),
  systemInstruction = content { text(remoteConfig.getString("system_instructions")) }
)

// To generate text output, call generateContent with the text input
val response = generativeModel.generateContent(remoteConfig.getString("prompt"))
print(response.text)

Java

// Initialize FirebaseVertexAI instance
// Optionally specify a location in which to run the service and access the model
FirebaseVertexAI vertexAI = FirebaseVertexAI.getInstance(remoteConfig.getString("vertex_location"));

// Initialize the Vertex AI service and the generative model
// Specify a model that supports system instructions, like a Gemini 1.5 model
GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel(
  /* modelName */ remoteConfig.getString("model_name"),
  /* generationConfig (optional) */ null,
  /* safetySettings (optional) */ null,
  /* requestOptions (optional) */ new RequestOptions(),
  /* tools (optional) */ null,
  /* toolsConfig (optional) */ null,
  /* systemInstruction (optional) */ new Content.Builder().addText(remoteConfig.getString("system_instructions")).build()
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
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);

الخطوة 7: تشغيل التطبيق

أنشئ التطبيق وشغِّله وتأكَّد من أنّه يعمل. أجرِ تغييرات على الإعدادات من صفحة Remote Config في وحدة تحكّم Firebase، وانشر التغييرات، وتأكّد من النتيجة.

الخطوات التالية