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


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

Firebase क्लाइंट एसडीके, क्लाइंट के हिसाब से कॉन्फ़िगरेशन फ़ेच करते हैं. यह कॉन्फ़िगरेशन, Remote Config टेंप्लेट से तैयार किया जाता है. हालांकि, सर्वर-साइड Remote Config एसडीके, 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 को शुरू किया जाता है, तो SDK Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है. साथ ही, GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल से विकल्प पढ़ता है. एसडीके टूल को शुरू करने और 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 = await remote_config.get_server_template()
    
  2. यह पक्का करने के लिए कि Remote Config बैकएंड सर्वर से कनेक्शन कट जाने पर भी आपका ऐप्लिकेशन ठीक से काम करे, अपने ऐप्लिकेशन में हर पैरामीटर के लिए डिफ़ॉल्ट वैल्यू जोड़ें. इसके लिए, अपने init_server_template या get_server_template टेंप्लेट फ़ंक्शन में default_config जोड़ें:

    template = remote_config.init_server_template({
      default_config: {
        '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 टेंप्लेट में शर्तें सेट की हैं, तो अपनी पसंद के मुताबिक वैल्यू तय करें और उन्हें डालें. हालांकि, ऐसा करना ज़रूरी नहीं है:

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

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

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

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

    • बूलियन: get_bool
    • पूर्णांक: get_int
    • फ़्लोट: get_float
    • स्ट्रिंग: get_string
    • वैल्यू का सोर्स: get_value_source

    उदाहरण के लिए, अगर आपको अपने सर्वर पर 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. अगर आपका सर्वर लंबे समय तक चलता है, तो सर्वरलेस एनवायरमेंट के बजाय, समय-समय पर टेंप्लेट को फिर से लोड करें. इससे यह पक्का किया जा सकेगा कि Remote Config सर्वर से सबसे नया टेंप्लेट फ़ेच किया जा रहा है.

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

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

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

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