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

Firebase रिमोट कॉन्फ़िगरेशन अब Firebase एडमिन Node.js SDK टूल v12.1.0+ का इस्तेमाल करके, सर्वर साइड कॉन्फ़िगरेशन के साथ काम करता है. इस नई सुविधा की मदद से रिमोट कॉन्फ़िगरेशन का इस्तेमाल करके सर्वर-साइड ऐप्लिकेशन के व्यवहार और कॉन्फ़िगरेशन को डाइनैमिक तौर पर मैनेज किया जा सकता है. इसमें बिना सर्वर वाले इस्तेमाल को लागू करना भी शामिल है, जैसे कि Cloud Functions.

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

सर्वर-साइड रिमोट कॉन्फ़िगरेशन की मदद से, ये काम किए जा सकते हैं:

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

Cloud Run, Cloud फ़ंक्शन या खुद होस्ट किए गए सर्वर एनवायरमेंट पर सर्वर-साइड रिमोट कॉन्फ़िगरेशन डिप्लॉय किया जा सकता है.

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

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

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

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

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

// Initialize Firebase
const firebaseApp = initializeApp();

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

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

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

पैरामीटर का नाम जानकारी टाइप डिफ़ॉल्ट वैल्यू
model_name मॉडल एपीआई का नाम स्ट्रिंग gemini-1.5-pro
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}

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

रिमोट कॉन्फ़िगरेशन की मदद से इस्तेमाल किए जाने वाले पैरामीटर तय करने के बाद, अपने ऐप्लिकेशन को डिफ़ॉल्ट वैल्यू सेट करने, सर्वर का खास रिमोट कॉन्फ़िगरेशन टेंप्लेट फ़ेच करने, और उसकी वैल्यू इस्तेमाल करने के लिए कॉन्फ़िगर करें. यहां दिए गए चरणों में, 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. रिमोट कॉन्फ़िगरेशन बैकएंड सर्वर से कनेक्शन में रुकावट आने पर भी ऐप्लिकेशन सही तरीके से काम करता रहे, यह पक्का करने के लिए अपने ऐप्लिकेशन में हर पैरामीटर के लिए डिफ़ॉल्ट वैल्यू जोड़ें. ऐसा करने के लिए, अपने 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. इसके अलावा, अगर आपने अपने रिमोट कॉन्फ़िगरेशन टेंप्लेट में प्रतिशत शर्तें सेट की हैं, तो वह randomizationId तय करें और दें जिसका इस्तेमाल आपको template.evaluate() फ़ंक्शन में अपनी शर्तों का आकलन करने के लिए करना है.

    उदाहरण के लिए, Firebase इंस्टॉलेशन आईडी को randomizationId या यूज़र आईडी के तौर पर सेट किया जा सकता है. इससे यह पक्का किया जा सकेगा कि आपके सर्वर से संपर्क करने वाले हर उपयोगकर्ता को किसी भी क्रम में लगाए गए ग्रुप में जोड़ा जाए. यह उदाहरण एक सामान्य उदाहरण है, लेकिन आप अलग-अलग क्लाइंट अनुरोधों के लिए अलग-अलग randomizationIds जनरेट करने के लिए अपने सर्वर को कॉन्फ़िगर कर सकते हैं. इससे यह पक्का किया जा सकेगा कि उपयोगकर्ताओं को रिमोट कॉन्फ़िगरेशन से एक जैसी वैल्यू दी जा रही हैं. ये वैल्यू, प्रतिशत की शर्तों वाले ग्रुप में उनकी सदस्यता के आधार पर दी जा रही हैं.

    प्रतिशत की शर्तों के बारे में ज़्यादा जानकारी के लिए, किसी भी क्रम में उपयोगकर्ता का प्रतिशत देखें.

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

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

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

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

चौथा चरण: रिमोट कॉन्फ़िगरेशन में सर्वर के हिसाब से पैरामीटर वैल्यू सेट करना

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

किसी सर्वर के हिसाब से रिमोट कॉन्फ़िगरेशन टेंप्लेट बनाने के लिए:

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

पांचवां चरण: Cloud फ़ंक्शन के तौर पर डिप्लॉय करना या Cloud Run का इस्तेमाल करना

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

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

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