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

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

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

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

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

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

वेब कंटेनर इंस्टॉल करने से पहले

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

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

जब 'एडमिन 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 Functions या Cloud Run के साथ डिप्लॉय करें

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

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

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