इंटेलिजेंट Android ऐप्लिकेशन बनाना: क्लाउड और हाइब्रिड इन्फ़रेंस
8 मिनट में पढ़ा जा सकता है
"इंटेलिजेंट Android ऐप्लिकेशन बनाना" ब्लॉग पोस्ट सीरीज़ में आपका फिर से स्वागत है. इस सीरीज़ में, हम एक सामान्य Android ऐप्लिकेशन को उपयोगकर्ता की दिलचस्पी के हिसाब से बनाए गए, इंटेलिजेंट, और एजेंटिक अनुभव में बदलते हैं. हमने पिछली पोस्ट में, ML Kit के Prompt API की मदद से Gemini Nano का इस्तेमाल करके, उपयोगकर्ता के डिवाइस पर काम करने वाली बेहतर सुविधाएं बनाने का तरीका बताया था.
इस पोस्ट में, हम देखेंगे कि क्लाउड पर होस्ट की गई और हाइब्रिड एआई सुविधाएं बनाने के लिए, Firebase AI Logic का इस्तेमाल कैसे किया जा सकता है:
- जवाबों को असल दुनिया के कॉन्टेक्स्ट के हिसाब से तैयार करना
- हाइब्रिड इन्फ़्रेंस का इस्तेमाल करके, क्लाउड और लोकल एक्ज़ीक्यूशन के बीच अनुरोधों को डाइनैमिक तरीके से रूट करना
- कस्टम रूटिंग सिस्टम की मदद से कॉन्टेंट का अनुवाद करना
कभी-कभी, किसी इस्तेमाल के उदाहरण के लिए, ऐसे एआई मॉडल की ज़रूरत होती है जिनके पास दुनिया भर की ज़्यादा जानकारी हो, बड़ी कॉन्टेक्स्ट विंडो हो या जटिल क्वेरी को हैंडल करने की क्षमता हो. ऐसे मामलों में, हम क्लाउड मॉडल का इस्तेमाल कर सकते हैं.
कभी-कभी, आपको दोनों दुनिया का सबसे अच्छा अनुभव चाहिए होता है. जैसे, जब उपयोगकर्ता के डिवाइस पर हाइब्रिड इन्फ़्रेंसिंग की सुविधा उपलब्ध हो, तो उसका इस्तेमाल करके लागत कम करना. वहीं, जब यह सुविधा उपलब्ध न हो, तो क्लाउड का इस्तेमाल करके यह पक्का करना कि सभी डिवाइसों पर इन्फ़्रेंसिंग की सुविधा काम कर रही है.
आइए, देखते हैं कि हमने Jetpacker में क्लाउड और हाइब्रिड की तीन सुविधाओं को कैसे लागू किया:
- म्यूज़ियम असिस्टेंट, जो वेब पर उपलब्ध भरोसेमंद स्रोतों से जानकारी लेता हो
- रेस्टोरेंट की समीक्षा लिखने के लिए हाइब्रिड सुविधा
- होटल के लिए सहायता चैट की सुविधा, जिसमें कस्टम-रूट की गई लाइव अनुवाद की सुविधा शामिल है.
ताज़ा जानकारी पाने के लिए, एलएलएम ग्राउंडिंग का इस्तेमाल करनाएलएलएम ग्राउंडिंग की सुविधा वाला म्यूज़ियम असिस्टेंट चैटबॉट
म्यूज़ियम असिस्टेंट एक इंटरैक्टिव चैटबॉट है. इसे लोगों को म्यूज़ियम जाने का प्लान बनाने में मदद करने के लिए डिज़ाइन किया गया है. इससे लोगों को खास प्रदर्शनियों, खुलने के मौजूदा समय, टिकट की कीमत वगैरह के बारे में अप-टू-डेट जानकारी मिलती है.
एआई की सुविधाएं बनाते समय, मॉडल से ताज़ा, सटीक, और असल दुनिया की जानकारी के साथ जवाब पाना एक आम चुनौती है. क्लाउड मॉडल के पास दुनिया भर की जानकारी का भंडार होता है. हालांकि, हो सकता है कि उन्हें सीज़न के हिसाब से लगने वाली प्रदर्शनियों या आज के दिन के खुलने के समय के बारे में जानकारी न हो.
इस अंतर को कम करने के लिए, हम ग्राउंडिंग तकनीकों का इस्तेमाल कर सकते हैं. इससे मॉडल की कॉन्टेक्स्ट विंडो में ज़्यादा कॉन्टेक्स्ट जोड़ा जा सकता है. Firebase AI Logic SDK में तीन तरह की ग्राउंडिंग की सुविधा उपलब्ध है:
- यूआरएल ग्राउंडिंग: किसी वेबपेज के कॉन्टेंट का इस्तेमाल करके जवाब देना. उदाहरण के लिए, टिकट की मौजूदा कीमतें या संग्रहालय के नियम.
- Google Search से जानकारी पाना: मॉडल को Google Search के रीयल-टाइम इंडेक्स से क्वेरी करने की अनुमति देना, ताकि उसे अप-टू-डेट जानकारी मिल सके.
- Maps grounding: इसमें Google Maps के जगह की जानकारी का डेटा का इस्तेमाल किया जाता है.
Jetpacker में, चालू की गई सुविधा के फ़्लैग के आधार पर उपलब्ध टूल को डाइनैमिक तरीके से बनाया जाता है. साथ ही, Firebase AI SDK का इस्तेमाल करके जनरेटिव मॉडल को शुरू किया जाता है:
// implementation("com.google.firebase:firebase-ai-logic") private var toolList = mutableListOf<Tool>() init { if (ENABLE_SEARCH_GROUNDING) { toolList.add(Tool.googleSearch()) } if (ENABLE_URL_GROUNDING) { toolList.add(Tool.urlContext()) } } private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash", systemInstruction = content { text("You are a helpful museum assistant answering questions about a museum. Use plain text.") }, tools = toolList )
जब उपयोगकर्ता, Assistant से कोई सवाल पूछता है और यूआरएल ग्राउंडिंग की सुविधा चालू होती है, तो हम सीधे तौर पर प्रॉम्प्ट में, म्यूज़ियम के संसाधन के यूआरएल जोड़ देते हैं:
val groundingText = if (FeatureFlags.ENABLE_URL_GROUNDING) { "\n If the following message above is about the rules and terms to visit Le Louvre, " + "if needed answer this urls ${urlList.joinToString()}" } else { "" } val prompt = "$text $groundingText" var response = chat.sendMessage(prompt)
हाइब्रिड इन्फ़रेंस: Maps के डीप लिंक के साथ डिवाइस पर समीक्षा जनरेट करना
एआई के हर टास्क के लिए, क्लाउड पर आधारित मॉडल की ज़रूरत नहीं होती. साथ ही, हर डिवाइस ऑनलाइन नहीं होता. डेवलपर को लेटेन्सी, लागत, और ऑफ़लाइन उपलब्धता को बैलेंस करने में मदद करने के लिए, हमने हाल ही में हाइब्रिड इन्फ़रेंस के लिए Firebase API लॉन्च किया है.
Jetpacker में, रेस्टोरेंट की समीक्षा करने की सुविधा मिलती है. इसकी मदद से, लोग कुछ विषयों की समीक्षा कर सकते हैं. साथ ही, यह सुविधा अपने-आप एक समीक्षा का ड्राफ़्ट तैयार कर देती है. सभी उपयोगकर्ताओं के लिए इस सुविधा को चालू करने के लिए, हम Gemini Nano की मदद से स्थानीय तौर पर प्रोसेस करने को प्राथमिकता देते हैं. साथ ही, उन डिवाइसों पर क्लाउड मॉडल का इस्तेमाल करते हैं जिन पर Gemini Nano काम नहीं करता.
// implementation("com.google.firebase:firebase-ai-logic") // implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta03") // Initialize the model with hybrid routing configuration val reviewModel = Firebase.ai.generativeModel( modelName = "gemini-3.1-flash-lite", onDeviceConfig = OnDeviceConfig( inferenceMode = InferenceMode.PREFER_ON_DEVICE ) )
हाइब्रिड इन्फ़रेंस एपीआई में, राउटिंग के चार अलग-अलग मोड इस्तेमाल किए जा सकते हैं:
- PREFER_ON_DEVICE: इसमें, डिवाइस पर मौजूद डेटा को प्रोसेस करने को प्राथमिकता दी जाती है. अगर Gemini Nano उपलब्ध नहीं है, तो क्लाउड का इस्तेमाल किया जाता है.
- PREFER_IN_CLOUD: इसमें क्लाउड पर प्रोसेस करने को प्राथमिकता दी जाती है. अगर डिवाइस ऑफ़लाइन हो जाता है, तो उपयोगकर्ता के डिवाइस पर प्रोसेस करने की सुविधा का इस्तेमाल किया जाता है.
- ONLY_ON_DEVICE: इस मोड में, सिर्फ़ डिवाइस पर कार्रवाई की जा सकती है.
- ONLY_IN_CLOUD: यह विकल्प, सिर्फ़ क्लाउड पर एक्ज़ीक्यूट करने की अनुमति देता है.
समीक्षा जनरेट होने के बाद, हम उसे क्लिपबोर्ड पर कॉपी करते हैं. इसके बाद, हम Google Maps को सीधे तौर पर रेस्टोरेंट के समीक्षा पेज पर खोलने के लिए इंटेंट का इस्तेमाल करते हैं. इससे उपयोगकर्ता को बेहतर अनुभव मिलता है:
private fun copyAndOpenMapsReview(context: Context, reviewText: String, placeId: String) { val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clip = ClipData.newPlainText("User Review", reviewText) clipboard.setPrimaryClip(clip) val uri = Uri.parse("https://search.google.com/local/writereview/mobile?placeid=$placeId") val intent = Intent(Intent.ACTION_VIEW, uri).apply { setPackage("com.google.android.apps.maps") } context.startActivity(intent) }
कस्टम हाइब्रिड रूटिंग: होटल की सहायता टीम से चैट करने के दौरान, सिम्युलेट किए गए पर्सोना के साथ अनुवाद करने की सुविधा
होटल की सहायता के लिए चैट की सुविधा इसलिए बनाई गई है, ताकि उपयोगकर्ता लॉजिस्टिक्स को फ़ाइनल कर सकें और होटल की जानकारी देख सकें. यह सुविधा, सिस्टम के निर्देशों का इस्तेमाल करके, स्थानीय भाषा में रिसेप्शनिस्ट असिस्टेंट को कॉन्फ़िगर करती है. निर्देशों में कुछ खास जानकारी देकर, जैसे कि पसंदीदा भाषा और होटल की जानकारी, हम किसी होटल के लिए बातचीत करने वाला पर्सोना सेट अप कर सकते हैं.
private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( systemInstruction = content { text(""" You are a helpful hotel receptionist at $hotelName only speaking $language. Answer politely in $language. The bar closes at 10pm and breakfast is from 7am to 10am. There's someone at the desk 24/7. You can retrieve your luggage from the storage room at the back of the lobby at any time. """) }, modelName = "gemini-3-flash-preview" )
रिसेप्शनिस्ट के जवाब, होटल की स्थानीय भाषा में होते हैं. उदाहरण के लिए, पैरिस के होटल Le Meurice के लिए फ़्रेंच भाषा. इसलिए, हमें मैसेज को उपयोगकर्ता की पसंदीदा भाषा में अनुवाद करना होता है.
हाइब्रिड मॉडल में, राउटिंग की सामान्य सेटिंग कॉन्फ़िगर की जा सकती हैं. हालांकि, जटिल स्थितियों के लिए, राउटिंग के कस्टम लॉजिक की ज़रूरत होती है. Jetpacker में, हम कस्टम रूटिंग स्टैक लागू करते हैं. इसमें इन बातों का ध्यान रखा जाता है:
- भाषा की पहचान करना: उपयोगकर्ता के डिवाइस पर मौजूद ML Kit Language Identification API का इस्तेमाल करके, हम आने वाले मैसेज की भाषा का पता लगा सकते हैं.
- उपयोगकर्ता के डिवाइस पर अनुवाद करने की सुविधा (Gemini Nano): ML Kit के Prompt API की मदद से, हम सामान्य भाषा के जोड़े का अनुवाद सीधे डिवाइस पर कर सकते हैं. इससे बैंडविथ और क्लाउड की लागत बचती है.
- क्लाउड ट्रांसलेशन (Gemini 3 Flash): ज़्यादा मुश्किल भाषाओं के लिए, हम Gemini 3 Flash का इस्तेमाल करते हैं, ताकि बेहतर क्वालिटी में अनुवाद किया जा सके.
// implementation("com.google.android.gms:play-services-mlkit-language-id:17.0.0") // ML Kit for Language Identification (powered by Google Play Services) private val languageIdentifier = LanguageIdentification.getClient() // On-device translator model (prefer Gemini Nano) for translating common language pairs private val hybridTranslationModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash", onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE) ) // Cloud translator model for more complex language pairs private val cloudTranslationModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash" )
जब किसी मैसेज का अनुवाद करना होता है, तो हम जिस भाषा का अनुवाद करना है उसकी पहचान करते हैं और अपने कस्टम रूटिंग लॉजिक को लागू करते हैं. इसके बाद, उपयोगकर्ता के डिवाइस पर या क्लाउड पर अनुवाद किया जाता है:
fun translateMessage(message: SupportChatMessage) { viewModelScope.launch { // 1. Detect language using ML Kit Language Identification val sourceLang = try { Tasks.await(languageIdentifier.identifyLanguage(message.text)) } catch (e: Exception) { "Undefined" } // 2. Custom routing: we've verified the translation quality for English and Korean with Gemini Nano, and will translate message on-device for those two languages val routeToCloud = sourceLang != "en" && sourceLang != "kr" val prompt = "Translate the following text to $selectedLanguage. Just return the translated sentence: ${message.text}." val (translatedText, routePrefix) = if (routeToCloud) { val result = cloudTranslationModel.generateContent(prompt) result.text to "[Cloud]" } else { val result = hybridTranslationModel.generateContent(prompt) result.text to "[On-Device]" } if (translatedText != null) { _translations.update { current -> current + (message.id to "$routePrefix: $translatedText") } } } }
इस उदाहरण में, कस्टम राउटिंग लॉजिक सिर्फ़ अनुवाद की सोर्स और टारगेट भाषा को ध्यान में रखता है. हालांकि, आपके ऐप्लिकेशन के इस्तेमाल के उदाहरण के आधार पर, राउटिंग लॉजिक को बढ़ाया जा सकता है. इसमें उपयोगकर्ता के डिवाइस पर मौजूद मॉडल का वर्शन, इंटरनेट कनेक्शन, बैटरी की स्थिति वगैरह जैसे अन्य फ़ैक्टर शामिल किए जा सकते हैं.
एआई पाइपलाइन को सुरक्षित करना: Firebase App Check
आखिर में, क्लाउड में एआई का इस्तेमाल करने से, एपीआई कुंजी के गलत इस्तेमाल या बिना अनुमति के बिलिंग की संभावनाएं बढ़ जाती हैं. एपीआई कॉल को सुरक्षित बनाने के लिए, हमने Firebase App Check को इंटिग्रेट किया है. इसके लिए, हमने Play Integrity (प्रोडक्शन) और लोकल डेवलपमेंट या एम्युलेटर के लिए लोकल Debug Provider, दोनों का इस्तेमाल किया है.
JetPackerApplication.kt फ़ाइल में, हम स्टार्टअप के समय डीबग प्रोवाइडर को इंस्टॉल करते हैं. साथ ही, सुरक्षित उपयोगकर्ता सेशन बनाने के लिए, पहचान छिपाकर पुष्टि करने की सुविधा को ट्रिगर करते हैं:
// implementation("com.google.firebase:firebase-appcheck-playintegrity") // implementation("com.google.firebase:firebase-appcheck-debug") // implementation("com.google.firebase:firebase-auth") override fun onCreate() { super.onCreate() Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance() ) Firebase.auth.signInAnonymously() }
एम्युलेटर पर स्थानीय तौर पर ऐप्लिकेशन बनाते समय, App Check, logcat में एक लोकल टोकन सीक्रेट प्रिंट करता है:
Enter this debug secret into the allow list in the Firebase Console: a8c2dd4c-xxxx-xxxx-xxxx-ef6c114ba27e
Firebase कंसोल में रजिस्टर करने के बाद, स्थानीय अनुरोधों की पूरी तरह से पुष्टि की जाती है. साथ ही, App Check से इनकी पुष्टि की जाती है. इससे हमारे बैकएंड की सुरक्षा होती है. साथ ही, हमें ऐप्लिकेशन को स्थानीय तौर पर टेस्ट करने की अनुमति मिलती है.
नतीजा
हमने क्लाउड मॉडल की सुविधाओं (भरोसेमंद स्रोतों से जानकारी लेने की सुविधा, सिस्टम के निर्देश) को उपयोगकर्ता के डिवाइस पर मौजूद सुविधाओं (हाइब्रिड राउटिंग, अनुवाद, सुरक्षा के लिए App Check) के साथ मिलाकर, एक ऐसा यात्रा ऐप्लिकेशन बनाया है जो स्मार्ट, सुरक्षित, और ऑफ़लाइन उपलब्ध है.
GitHub पर Jetpacker का पूरा सोर्स कोड देखें. साथ ही, शुरू करने के लिए Firebase का दस्तावेज़ पढ़ें:
Firebase AI Logic का दस्तावेज़
Firebase Hybrid Inference API
ज़्यादा जानें
इस ब्लॉग पोस्ट सीरीज़ के अन्य हिस्से देखें:
पहला हिस्सा: इसमें ऐप्लिकेशन के बारे में बताया गया है और इसकी खास जानकारी दी गई है.
दूसरा हिस्सा: इसमें उपयोगकर्ता के डिवाइस पर मौजूद इंटेलिजेंस के बारे में बताया गया है. निजता को प्राथमिकता देने वाली सुविधाओं को बनाने के लिए, ML Kit के GenAI API और Gemini Nano के बारे में ज़्यादा जानें. जैसे, यात्रा की योजना की खास जानकारी, रसीद पार्स करना, और स्थानीय ऑडियो प्रोसेसिंग.
तीसरा भाग (यह पोस्ट!): हाइब्रिड और क्लाउड रीज़निंग. Google Maps और वेब कॉन्टेक्स्ट जैसे असल दुनिया के डेटा में एलएलएम के जवाबों को शामिल करने के लिए, Firebase के एआई लॉजिक का इस्तेमाल करने का तरीका जानें.
चौथा हिस्सा: सिस्टम इंटिग्रेशन. AppFunctions का इस्तेमाल करके, Android के इंटेलिजेंस सिस्टम के साथ इंटिग्रेट करना.
पांचवां हिस्सा (जल्द ही उपलब्ध होगा): ऐप्लिकेशन में एजेंटिक वर्कफ़्लो. A2UI और ADK की मदद से, बुकिंग की पूरी प्रोसेस में मदद करने वाले एआई को ऐप्लिकेशन में शामिल करें.
क्या आपको Android डेवलपमेंट के बारे में ज़्यादा जानना है? Android Developers को YouTube या LinkedIn पर फ़ॉलो करें!
इस ब्लॉग पोस्ट में दिए गए सभी कोड स्निपेट के लिए, कॉपीराइट से जुड़ा यह नोटिस लागू होता है:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
कैसे करें"इंटेलिजेंट Android ऐप्लिकेशन बनाएं" ब्लॉग पोस्ट सीरीज़ में आपका फिर से स्वागत है. इस सीरीज़ में, हम एक सामान्य Android ऐप्लिकेशन को आपकी दिलचस्पी के हिसाब से बनाए गए, इंटेलिजेंट, और एजेंटिक अनुभव में बदलते हैं. हमने अपनी पिछली पोस्ट में Jetpacker के बारे में बताया था. यह एक डेमो ऐप्लिकेशन है, जिसका इस्तेमाल हम इस सीरीज़ में करेंगे.
Caren Chang • पढ़ने में छह मिनट लगेंगे -
कैसे करेंJetpacker, तकनीकी प्रदर्शन वाला एक ऐप्लिकेशन है. इसे हमारी टीम ने इस साल के Google I/O के लिए बनाया है. इसे Antigravity का इस्तेमाल करके बनाया गया है. Jetpacker का मुख्य काम, उपयोगकर्ताओं को उनके अगले रोमांचक सफ़र की योजना बनाने, उसे एक्सप्लोर करने, और उसका आनंद लेने में मदद करना है.
Jolanda Verhoef • पढ़ने में 4 मिनट लगेंगे -
कैसे करें"इंटेलिजेंट Android ऐप्लिकेशन बनाएं" ब्लॉग पोस्ट सीरीज़ में आपका फिर से स्वागत है. इस सीरीज़ में, हम एक सामान्य Android ऐप्लिकेशन को आपकी दिलचस्पी के हिसाब से बनाए गए, इंटेलिजेंट, और एजेंटिक अनुभव में बदलते हैं. पिछली पोस्ट में, हमने क्लाउड पर होस्ट की गई और हाइब्रिड एआई सुविधाएं बनाने के लिए, Firebase AI Logic का इस्तेमाल करने का तरीका बताया था.
Ben Weiss • पढ़ने में छह मिनट लगेंगे
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.