Firebase रिमोट कॉन्फ़िगरेशन की मदद से, Firebase ऐप्लिकेशन में Vertex AI को डाइनैमिक तौर पर अपडेट करें

Vertex AI in Firebase SDK टूल का इस्तेमाल करके, अपने ऐप्लिकेशन से Gemini API को कॉल करते समय, आपके अनुरोध में ऐसे कई पैरामीटर शामिल होते हैं जो जनरेटिव एआई से मिलने वाले जवाबों को कंट्रोल करते हैं. आम तौर पर, इनमें मॉडल का नाम, मॉडल जनरेशन कॉन्फ़िगरेशन (ज़्यादा से ज़्यादा टोकन, तापमान वगैरह), सुरक्षा सेटिंग, सिस्टम के निर्देश, और प्रॉम्प्ट डेटा शामिल होता है.

ज़्यादातर मामलों में, आपको मांग पर या ज़रूरत के हिसाब से इन सेटिंग में बदलाव करना चाहिए:

  • नया ऐप्लिकेशन रिलीज़ किए बिना, जनरेटिव एआई मॉडल को अपडेट करें. पुराने वर्शन बंद होने से पहले, नए और बेहतर मॉडल के वर्शन पर अपग्रेड किया जा सकता है. इसके अलावा, उपयोगकर्ताओं की ज़रूरतों और एट्रिब्यूट के आधार पर, कम कीमत वाले या बेहतर परफ़ॉर्मेंस वाले मॉडल पर स्विच किया जा सकता है. इसके अलावा, खास उपयोगकर्ता सेगमेंट (जैसे, बीटा टेस्टर) के लिए, नए और बेहतर मॉडल को शर्तों के साथ डिप्लॉय किया जा सकता है.
  • मॉडल को ऐक्सेस करने की जगह सेट करें, ताकि वह आपके उपयोगकर्ताओं के करीब हो.
  • सिस्टम के अलग-अलग निर्देशों और प्रॉम्प्ट की 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 पैरामीटर में सेव करें, ताकि डिप्लॉयमेंट के बाद समस्याएं मिलने पर, आप उन्हें ज़रूरत के हिसाब से बदल सकें.
  • जोखिम कम करना और एआई की सुरक्षा को लागू करना: अपने iOS और Android उपयोगकर्ताओं के लिए, जनरेटिव एआई से जुड़े बदलावों को सुरक्षित और धीरे-धीरे रिलीज़ करने के लिए, Remote Config रोल आउट का इस्तेमाल करें.

जनरेटिव एआई ऐप्लिकेशन की मदद से, Remote Config के लिए बेहतर और सुझाए गए इस्तेमाल के उदाहरण

Remote Config और Google Analytics की मदद से अपने ऐप्लिकेशन को इंस्ट्रूमेंट करने के बाद, ऐप्लिकेशन के इस्तेमाल के बेहतर उदाहरणों को एक्सप्लोर किया जा सकता है:

Firebase Remote Config की मदद से, अपने जनरेटिव एआई ऐप्लिकेशन को इंस्ट्रूमेंट करके, एआई की मदद से काम करने वाले ऐसे ऐप्लिकेशन बनाए जा सकते हैं जो उपयोगकर्ताओं के लिए बेहतरीन अनुभव देते हों. साथ ही, ये ऐप्लिकेशन आसानी से इस्तेमाल किए जा सकते हैं, सुरक्षित हैं, और इनकी लागत कम होती है.

अपने ऐप्लिकेशन में Firebase Remote Config जोड़ना

समाधान वाली इस गाइड में, आपको Vertex AI in Firebase SDK टूल का इस्तेमाल करने वाले Android ऐप्लिकेशन में, पैरामीटर को डाइनैमिक तौर पर अपडेट करने के लिए Firebase Remote Config का इस्तेमाल करना होगा. आपको इनके बारे में जानकारी मिलेगी:

  • Firebase Remote Config से मॉडल के नाम और सिस्टम के निर्देश जैसे पैरामीटर फ़ेच और चालू करें.
  • डाइनैमिक तौर पर वापस पाए गए पैरामीटर का इस्तेमाल करने के लिए, अपने Gemini API कॉल अपडेट करें. इससे, ऐप्लिकेशन अपडेट किए बिना, अलग-अलग मॉडल के बीच स्विच किया जा सकता है या सिस्टम के निर्देशों में बदलाव किया जा सकता है.
  • ज़रूरत के मुताबिक मॉडल के व्यवहार और क्षमताओं में बदलाव करके, पैरामीटर को रिमोट से कंट्रोल करें.

ज़रूरी शर्तें

यह गाइड मानता है कि आप Android प्लैटफ़ॉर्म के लिए ऐप्लिकेशन डेवलप करने के लिए Android Studio का इस्तेमाल करना जानते हैं. शुरू करने से पहले, पक्का करें कि आपने ये काम पूरे कर लिए हों:

  • Vertex AI in Firebase एसडीके टूल के लिए शुरुआती निर्देश देखें. पक्का करें कि आपने ये सभी काम कर लिए हैं:

    1. नया या मौजूदा Firebase प्रोजेक्ट सेट अप करें. इसमें, ब्लेज़ कीमत वाले प्लान का इस्तेमाल करना और ज़रूरी एपीआई चालू करना शामिल है.
    2. अपने ऐप्लिकेशन को Firebase से कनेक्ट करें. इसमें, अपने ऐप्लिकेशन को रजिस्टर करना और अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ना शामिल है.
    3. SDK टूल जोड़ें और अपने ऐप्लिकेशन में Vertex AI सेवा और जनरेटिव मॉडल को शुरू करें.
  • अपने प्रोजेक्ट में Google Analytics चालू करें और उसका एसडीके अपने ऐप्लिकेशन में जोड़ें. यह ज़रूरी है, ताकि क्लाइंट डिवाइस की जगह की जानकारी के आधार पर, सेवा और मॉडल की जगह की जानकारी सेट करने जैसी शर्त के हिसाब से टारगेटिंग की जा सके.

पहला चरण: 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 टेंप्लेट नहीं है, तो बदलावों की समीक्षा करें और फिर से बदलाव पब्लिश करें पर क्लिक करें.

दूसरा चरण: अपने ऐप्लिकेशन में Remote Config SDK टूल जोड़ें और शुरू करें

अपने ऐप्लिकेशन में Remote Config डिपेंडेंसी जोड़ें और Remote Config सेट अप करें.

  1. अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर app/build.gradle.kts या app/build.gradle) में Remote Config डिपेंडेंसी जोड़ें:

    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 सेकंड है. हालांकि, हमारा सुझाव है कि डेवलपमेंट के दौरान, अपने कोड में फ़ेच करने के लिए कम से कम इंटरवल सेट करें.

तीसरा चरण: इन-ऐप्लिकेशन पैरामीटर वैल्यू सेट करना

आपको Remote Config ऑब्जेक्ट में, इन-ऐप्लिकेशन डिफ़ॉल्ट पैरामीटर वैल्यू सेट करनी चाहिए. इससे यह पक्का होता है कि आपका ऐप्लिकेशन उम्मीद के मुताबिक काम करे, भले ही वह Remote Config सेवा से वैल्यू फ़ेच न कर पाए.

  1. Firebase कंसोल में जाकर, Remote Config खोलें.
  2. पैरामीटर टैब में, मेन्यू खोलें और डिफ़ॉल्ट वैल्यू डाउनलोड करें चुनें.
  3. जब कहा जाए, तब Android के लिए .xml चालू करें. इसके बाद, फ़ाइल डाउनलोड करें पर क्लिक करें.
  4. फ़ाइल को अपने ऐप्लिकेशन की एक्सएमएल रिसॉर्स डायरेक्ट्री में सेव करें.
  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);
    

चौथा चरण: वैल्यू फ़ेच करना और उन्हें चालू करना

डिफ़ॉल्ट वैल्यू सेट करने के बाद, वैल्यू फ़ेच और चालू करने के लिए यह जोड़ें:

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

पांचवां चरण: रीयल-टाइम 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);
      }
  });

छठा चरण: Vertex AI वैरिएबल को Remote Config वैल्यू असाइन करना

अब 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);

सातवां चरण: ऐप्लिकेशन चलाना

ऐप्लिकेशन बनाएं और चलाएं. साथ ही, पुष्टि करें कि वह काम कर रहा है. Firebase कंसोल में Remote Config पेज पर जाकर, अपने कॉन्फ़िगरेशन में बदलाव करें. इसके बाद, बदलावों को पब्लिश करें और नतीजे की पुष्टि करें.

अगले चरण

  • Remote Config के बारे में और जानें.
  • Remote Config और A/B जांच की मदद से, अलग-अलग मॉडल सेटिंग की जांच करें.
  • Remote Config रोल आउट का इस्तेमाल करके, मॉडल पैरामीटर में किए गए बदलावों को धीरे-धीरे रिलीज़ करें.
  • मशीन लर्निंग का इस्तेमाल करके, हर उपयोगकर्ता के लिए सबसे अच्छी सेटिंग तय करने के लिए, Remote Config मनमुताबिक बनाने का इस्तेमाल करें.