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

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

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

जब Admin SDK टूल को बिना किसी पैरामीटर के शुरू किया जाता है, तो यह Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है. साथ ही, GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल से विकल्प पढ़ता है. उदाहरण के लिए, SDK टूल को शुरू करने और 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-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}

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

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 और इसके बाद के वर्शन के साथ उपलब्ध हैं.

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

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

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

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

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