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


Firebase Remote Config, Firebase Admin Node.js SDK v12.1.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 Admin Node.js SDK टूल जोड़ने के लिए, अपने सर्वर में Firebase Admin SDK टूल जोड़ें में दिए गए निर्देशों का पालन करें.

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

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

import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";

// Initialize Firebase
const firebaseApp = initializeApp();

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

अपने ऐप्लिकेशन में उन वैरिएबल की पहचान करें जिन्हें आपको 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 टेंप्लेट फ़ेच किया जा सकेगा, और उसकी वैल्यू इस्तेमाल की जा सकेंगी. यहां Node.js ऐप्लिकेशन को कॉन्फ़िगर करने का तरीका बताया गया है.

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

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = rc.initServerTemplate();
    
    // Load Remote Config
    await template.load();
    

    अगर Cloud Functions में Node.js का इस्तेमाल किया जा रहा है, तो एक ही चरण में टेंप्लेट को शुरू करने और लोड करने के लिए, एसिंक्रोनस getServerTemplate का इस्तेमाल किया जा सकता है:

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. यह पक्का करने के लिए कि Remote Config बैकएंड सर्वर से कनेक्शन कट जाने पर भी आपका ऐप्लिकेशन ठीक से काम करे, अपने ऐप्लिकेशन में हर पैरामीटर के लिए डिफ़ॉल्ट वैल्यू जोड़ें. इसके लिए, अपने initServerTemplate या getServerTemplate टेंप्लेट फ़ंक्शन में defaultConfig जोड़ें:

    const template = rc.initServerTemplate({
      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
    await template.load()
    
  3. टेंप्लेट लोड होने के बाद, टेंप्लेट से पैरामीटर और वैल्यू इंपोर्ट करने के लिए template.evaluate() का इस्तेमाल करें:

    // Add template parameters to config
    const config = template.evaluate();
    
  4. अगर आपने Remote Config टेंप्लेट में शर्तें सेट की हैं, तो अपनी पसंद के मुताबिक वैल्यू तय करें और उन्हें डालें. हालांकि, ऐसा करना ज़रूरी नहीं है:

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

    उदाहरण के लिए, Firebase इंस्टॉलेशन आईडी को randomizationId या यूज़र आईडी के तौर पर सेट किया जा सकता है. इससे यह पक्का किया जा सकता है कि आपके सर्वर से संपर्क करने वाले हर उपयोगकर्ता को सही रैंडमाइज़्ड ग्रुप में जोड़ा गया हो. साथ ही, 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.
    const config = template.evaluate({
      randomizationId: "2ac93c28-c459-4760-963d-a3974ec26c04",
      version: "1.0",
      platform: "Android"
    });
    
    
  5. इसके बाद, कॉन्फ़िगरेशन कॉन्स्टेंट से अपनी ज़रूरत के पैरामीटर की वैल्यू निकालें. getters का इस्तेमाल करके, Remote Config से मिली वैल्यू को सही फ़ॉर्मैट में बदलें. इन टाइप का इस्तेमाल किया जा सकता है:

    • बूलियन: getBoolean
    • ऑब्जेक्ट: getValue
    • नंबर: getNumber
    • स्ट्रिंग: getString

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

    // Replace defaults with values from Remote Config.
    const generationConfig =
      JSON.parse(
        config.getString('generation_config'));
    
    const is_ai_enabled = config.getBool('is_ai_enabled');
    
    const model = config.getString('model_name');
    
    // Generates a prompt comprised of the Remote Config
    // parameter and prepends it to the user prompt
    const prompt = `${config.getString('preamble_prompt')} ${req.query.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) की मदद से, किरदार के डायलॉग जनरेट किए जाते हैं. इस मामले में, एलएलएम को सेवा देने वाले लॉजिक को ऐसे फ़ंक्शन में होस्ट किया जा सकता है जिसे आपका ऐप्लिकेशन मांग पर कॉल करता है.

अगर आपको सर्वर-रेंडर किया गया वेब ऐप्लिकेशन बनाना है, तो App Hosting में लोकप्रिय वेब फ़्रेमवर्क के लिए सहायता उपलब्ध है.

इसके अलावा, Cloud Run का इस्तेमाल किया जा सकता है. Cloud Run की मदद से सर्वर ऐप्लिकेशन डिप्लॉय करने के लिए, क्विकस्टार्ट: Cloud Run पर Node.js सेवा डिप्लॉय करना में दी गई गाइड पढ़ें.

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