सर्वर एनवायरमेंट में रिमोट कॉन्फ़िगरेशन का इस्तेमाल करना


Firebase Remote Config, Firebase Admin Python SDK टूल के v6.7.0 और उसके बाद के वर्शन का इस्तेमाल करके, सर्वर-साइड कॉन्फ़िगरेशन की सुविधा देता है. इस सुविधा की मदद से, Remote Config का इस्तेमाल करके सर्वर-साइड ऐप्लिकेशन के व्यवहार और कॉन्फ़िगरेशन को डाइनैमिक तरीके से मैनेज किया जा सकता है. इसमें Cloud Functions जैसे, सर्वरलेस तरीके से लागू करने की सुविधाएं भी शामिल हैं.

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

सर्वर साइड Remote Config की मदद से, ये काम किए जा सकते हैं:

  • अपने सर्वर पर चल रहे या उससे ऐक्सेस किए जा रहे ऐप्लिकेशन के लिए कॉन्फ़िगरेशन पैरामीटर तय करें. इससे, एआई मॉडल के पैरामीटर और प्रॉम्प्ट को रिमोट तौर पर कॉन्फ़िगर करने जैसे इस्तेमाल के उदाहरणों के साथ-साथ अन्य इंटिग्रेशन की अनुमति मिलती है. इससे यह पक्का होता है कि आपकी एपीआई कुंजियां सुरक्षित रहें.
  • आपके एनवायरमेंट या ऐप्लिकेशन में होने वाले बदलावों के हिसाब से, पैरामीटर में डाइनैमिक तौर पर बदलाव करता है. जैसे, एलएलएम पैरामीटर और मॉडल एंडपॉइंट को अपडेट करना.
  • अपने सर्वर से कॉल किए जाने वाले एपीआई को रिमोट तौर पर अपडेट करके, लागत को कंट्रोल करें.
  • आपके सर्वर को ऐक्सेस करने वाले क्लाइंट के लिए, कस्टम कॉन्फ़िगरेशन को फ़्लाइट पर जनरेट करें.
  • रिकॉर्ड करें कि किन क्लाइंट को पैरामीटर वैल्यू मिली है और एनटाइटलमेंट की पुष्टि करने वाले सिस्टम के हिस्से के तौर पर, Cloud Functions में इसका इस्तेमाल करें.

सर्वर साइड Remote Config को Cloud Run, Cloud Functions या खुद होस्ट किए जाने वाले सर्वर एनवायरमेंट पर डिप्लॉय किया जा सकता है.

शुरू करने से पहले

Firebase प्रोजेक्ट बनाने, सेवा खाता सेट अप करने, और अपने सर्वर में Firebase Python SDK टूल जोड़ने के लिए, अपने सर्वर में Firebase Admin SDK टूल जोड़ें में दिए गए निर्देशों का पालन करें.

पहला चरण: Firebase Admin Python SDK टूल को शुरू करना और एपीआई अनुरोधों को अनुमति देना

जब Admin SDK टूल को बिना किसी पैरामीटर के शुरू किया जाता है, तो यह Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है. साथ ही, GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल से विकल्प पढ़ता है. SDK टूल को शुरू करने और Remote Config जोड़ने के लिए:

import firebase_admin
import asyncio
import json

firebase_admin.initialize_app()

दूसरा चरण: अपने सर्वर ऐप्लिकेशन के लिए डिफ़ॉल्ट पैरामीटर वैल्यू की पहचान करना

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

उदाहरण के लिए, अगर कोई ऐसा सर्वर ऐप्लिकेशन लिखा जा रहा है जो जनरेटिव एआई फ़ंक्शन को मैनेज करता है, तो डिफ़ॉल्ट मॉडल का नाम, प्रॉम्प्ट के शुरुआती वाक्य, और जनरेटिव एआई कॉन्फ़िगरेशन सेट किया जा सकता है. जैसे:

पैरामीटर का नाम जानकारी टाइप डिफ़ॉल्ट वैल्यू
model_name मॉडल एपीआई का नाम स्ट्रिंग gemini-2.0-flash
preamble_prompt उपयोगकर्ता की क्वेरी के पहले प्रीफ़िक्स के तौर पर जोड़ने के लिए प्रॉम्प्ट स्ट्रिंग I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!
generation_config मॉडल को भेजे जाने वाले पैरामीटर JSON {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

तीसरा चरण: अपना सर्वर ऐप्लिकेशन कॉन्फ़िगर करना

Remote Config के साथ इस्तेमाल करने के लिए पैरामीटर तय करने के बाद, अपने ऐप्लिकेशन को डिफ़ॉल्ट वैल्यू सेट करने के लिए कॉन्फ़िगर करें. साथ ही, सर्वर के हिसाब से Remote Config टेंप्लेट फ़ेच करें और उसकी वैल्यू का इस्तेमाल करें. यहां दिए गए चरणों में, Python ऐप्लिकेशन को कॉन्फ़िगर करने का तरीका बताया गया है.

  1. टेंप्लेट को ऐक्सेस और लोड करें.

    from firebase_admin import remote_config
    
    # Initialize server-side Remote Config
    template = remote_config.init_server_template()
    
    # Load the template from the backend
     asyncio.run(template.load())
    
    

    अगर Cloud Functions के साथ Python का इस्तेमाल किया जा रहा है, तो टेंप्लेट को एक ही चरण में फ़ेच और लोड करने के लिए, एसिंक्रोनस get_server_template का इस्तेमाल किया जा सकता है:

    # Initialize server-side Remote Config
    template = remote_config.get_server_template()
    
  2. यह पक्का करने के लिए कि Remote Config बैकएंड सर्वर से आपके ऐप्लिकेशन के कनेक्शन में रुकावट आने पर भी, आपका ऐप्लिकेशन सही तरीके से काम करे, अपने ऐप्लिकेशन में हर पैरामीटर के लिए डिफ़ॉल्ट वैल्यू जोड़ें. इसके लिए, अपने init_server_template या get_server_template टेंप्लेट फ़ंक्शन में defaultConfig जोड़ें:

    template = remote_config.init_server_template({
      defaultConfig: {
        'model_name': "gemini-pro",
        'generation_config': '{"stopSequences": [], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}',
        'preamble_prompt': "I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!"
      },
    })
    
    # Load Remote Config
    asyncio.run(template.load())
    
    

    टेंप्लेट को शुरू करने का एक और तरीका है. इसके लिए, ज़रूरी सर्वर टेंप्लेट को वापस पाने के लिए, get_server_template फ़ंक्शन का इस्तेमाल करें. template.to_json फ़ंक्शन का इस्तेमाल करके, इस टेंप्लेट को JSON फ़ॉर्मैट में बदला जा सकता है. इस JSON टेंप्लेट को डिवाइस में सेव किया जा सकता है. इसके बाद, init_server_template फ़ंक्शन का इस्तेमाल करके, इस JSON टेंप्लेट को शुरू किया जा सकता है.

  3. टेंप्लेट लोड होने के बाद, टेंप्लेट से पैरामीटर और वैल्यू इंपोर्ट करने के लिए template.evaluate() का इस्तेमाल करें:

    # Add template parameters to config
    config = template.evaluate()
    
  4. अगर आपने अपने Remote Config टेंप्लेट में शर्तें सेट की हैं, तो अपनी पसंद की वैल्यू तय करें और उन्हें दें:

    • अगर प्रतिशत वाली शर्तों का इस्तेमाल किया जा रहा है, तो template.evaluate() फ़ंक्शन में अपनी शर्तों का आकलन करने के लिए, वह randomizationId जोड़ें.
    • अगर कस्टम सिग्नल का इस्तेमाल किया जा रहा है, तो एट्रिब्यूट और उनकी वैल्यू तय करें. कस्टम सिग्नल, Firebase Admin Python SDK टूल के 6.7.0 और उसके बाद के वर्शन के साथ उपलब्ध हैं.

    उदाहरण के लिए, randomizationId या यूज़र आईडी के तौर पर Firebase इंस्टॉलेशन आईडी सेट किया जा सकता है. इससे यह पक्का किया जा सकता है कि आपके सर्वर से संपर्क करने वाला हर उपयोगकर्ता, रैंडमाइज़ किए गए सही ग्रुप में जोड़ा जाए. साथ ही, version को क्लाइंट के खास वर्शन को टारगेट करने के लिए कस्टम सिग्नल के तौर पर और platform को क्लाइंट प्लैटफ़ॉर्म को टारगेट करने के लिए कस्टम सिग्नल के तौर पर सेट किया जा सकता है.

    शर्तों के बारे में ज़्यादा जानने के लिए, शर्त के नियम के टाइप देखें.

    # Add template parameters to `config`. Evaluates the
    # template and returns the parameter value assigned to
    # the group assigned to the {randomizationId} and version.
    config = template.evaluate({
      'randomizationId': "2ac93c28-c459-4760-963d-a3974ec26c04",
      'version': "1.0",
      'platform': "Android"
    })
    
    
  5. इसके बाद, कॉन्फ़िगरेशन कॉन्स्टेंट से अपनी ज़रूरत के मुताबिक पैरामीटर वैल्यू निकालें. Remote Config की वैल्यू को सही फ़ॉर्मैट में कास्ट करने के लिए, getters का इस्तेमाल करें. इन टाइप का इस्तेमाल किया जा सकता है:

    • बूलियन: get_bool
    • ऑब्जेक्ट: get_value
    • नंबर: get_number
    • स्ट्रिंग: get_string

    उदाहरण के लिए, अगर आपने अपने सर्वर पर Vertex AI लागू किया है और आपको मॉडल और मॉडल पैरामीटर बदलने हैं, तो हो सकता है कि आप model_name और generation_config के लिए पैरामीटर कॉन्फ़िगर करना चाहें. Remote Config की वैल्यू को ऐक्सेस करने का तरीका यहां बताया गया है:

    # Replace defaults with values from Remote Config.
    generation_config = json.loads(config.get_string('generation_config'))
    is_ai_enabled = config.get_bool('is_ai_enabled')
    model = config.get_string('model_name')
    
    # Generates a prompt comprised of the Remote Config
    # parameter and prepends it to the user prompt.
    prompt = f"{config.get_string('preamble_prompt')}{req.args.get('prompt')}"
    
  6. अगर आपका सर्वर, सर्वरलेस एनवायरमेंट के बजाय लंबे समय से चल रहा है, तो टेंप्लेट को समय-समय पर रीलोड करने के लिए setInterval का इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि आप समय-समय पर Remote Config सर्वर से सबसे अप-टू-डेट टेंप्लेट फ़ेच कर रहे हैं.

चौथा चरण: Remote Config में, सर्वर के हिसाब से पैरामीटर वैल्यू सेट करना

इसके बाद, सर्वर Remote Config टेंप्लेट बनाएं और अपने ऐप्लिकेशन में इस्तेमाल करने के लिए पैरामीटर और वैल्यू कॉन्फ़िगर करें.

सर्वर के हिसाब से Remote Config टेंप्लेट बनाने के लिए:

  1. Firebase कंसोल Remote Config पैरामीटर पेज खोलें और क्लाइंट/सर्वर सिलेक्टर से, सर्वर चुनें.
  2. Remote Config पैरामीटर को उन पैरामीटर के जैसे ही नाम और डेटा टाइप के साथ तय करें जिन्हें आपने अपने ऐप्लिकेशन में तय किया है. साथ ही, पैरामीटर की वैल्यू दें. टेंप्लेट को फ़ेच और उसका आकलन करने के बाद, इन वैल्यू को अपने वैरिएबल में असाइन करने पर, ये वैल्यू अपने सर्वर ऐप्लिकेशन को कॉन्फ़िगर करें में सेट की गई defaultConfig को बदल देंगी.
  3. इसके अलावा, वैल्यू को लगातार लागू करने के लिए शर्तें सेट करें. ऐसा, तय किए गए इंस्टेंस या कस्टम सिग्नल के किसी भी सैंपल पर किया जा सकता है. शर्तों के बारे में ज़्यादा जानकारी के लिए, शर्त के नियम के टाइप देखें.
  4. पैरामीटर जोड़ने के बाद, बदलाव पब्लिश करें पर क्लिक करें.
  5. बदलावों की समीक्षा करें और बदलावों को पब्लिश करें पर फिर से क्लिक करें.

पांचवां चरण: Cloud Functions या Cloud Run की मदद से डिप्लॉय करना

अगर आपका सर्वर ऐप्लिकेशन छोटा और इवेंट-ड्रिवन है, तो आपको Cloud Functions का इस्तेमाल करके अपना कोड डिप्लॉय करना चाहिए. उदाहरण के लिए, अगर आपके पास ऐसा ऐप्लिकेशन है जिसमें जनरेटिव एआई एपीआई (उदाहरण के लिए, Google AI या Vertex AI) की मदद से, वर्ण के डायलॉग दिखाए जाते हैं. ऐसे में, एलएलएम से जुड़े लॉजिक को किसी ऐसे फ़ंक्शन में होस्ट किया जा सकता है जिसे आपका ऐप्लिकेशन मांग पर कॉल करता है.

अगर आपका ऐप्लिकेशन लंबे समय तक चलने वाला है, जैसे कि एसेट वाला वेब ऐप्लिकेशन, तो Cloud Run का इस्तेमाल करें. Cloud Run पर अपना सर्वर ऐप्लिकेशन डिप्लॉय करने के लिए, क्विकस्टार्ट: Cloud Run पर Python सेवा डिप्लॉय करना पर दी गई गाइड का पालन करें.

Cloud Run और Cloud Functions के इस्तेमाल के सबसे सही उदाहरणों के बारे में ज़्यादा जानने के लिए, Cloud Functions बनाम Cloud Run: किसी एक के बजाय दूसरे का इस्तेमाल कब करना चाहिए लेख पढ़ें.