डिवाइस पर मौजूद और क्लाउड पर होस्ट किए गए मॉडल की मदद से, Android ऐप्लिकेशन में हाइब्रिड अनुभव बनाना


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

इस पेज पर, क्लाइंट एसडीके टूल का इस्तेमाल शुरू करने का तरीका बताया गया है. साथ ही, कॉन्फ़िगरेशन के अन्य विकल्प और सुविधाएं दिखाई गई हैं. जैसे, तापमान.

ध्यान दें कि Firebase AI Logic की मदद से, डिवाइस पर इन्फ़रंस की सुविधा, खास डिवाइसों पर चलने वाले Android ऐप्लिकेशन के लिए उपलब्ध है. यह सुविधा, ML Kit की शर्तों के साथ-साथ, ML Kit के जेन एआई पहलुओं से जुड़ी शर्तों के मुताबिक काम करती है.

इस्तेमाल के सुझाए गए मामले और काम करने वाली सुविधाएं

इस्तेमाल के सुझाए गए मामले

  • इन्फ़रंस के लिए, डिवाइस पर मौजूद मॉडल का इस्तेमाल करने से:

    • निजता को बेहतर तरीके से सुरक्षित रखा जा सकता है
    • लोकल कॉन्टेक्स्ट की सुविधा मिलती है
    • बिना किसी शुल्क के इन्फ़रंस की सुविधा मिलती है
    • ऑफ़लाइन काम करने की सुविधा मिलती है
  • हाइब्रिड सुविधा का इस्तेमाल करने से:

    • डिवाइस पर मौजूद मॉडल की उपलब्धता और इंटरनेट कनेक्टिविटी के हिसाब से, ज़्यादा ऑडियंस तक पहुंचा जा सकता है

डिवाइस पर इन्फ़रंस के लिए काम करने वाली सुविधाएं

डिवाइस पर इन्फ़रंस की सुविधा, सिंगल-टर्न टेक्स्ट जनरेशन (चैट नहीं) के साथ काम करती है. इसमें स्ट्रीमिंग या बिना स्ट्रीमिंग वाला आउटपुट मिलता है. यह सुविधा, टेक्स्ट जनरेशन की इन सुविधाओं के साथ काम करती है:

पक्का करें कि आपने इस पेज पर सबसे नीचे, डिवाइस पर इन्फ़रंस के लिए अभी उपलब्ध नहीं कराई गई सुविधाओं की सूची देखी हो.

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

इन बातों का ध्यान रखें:

इसके साथ काम करने वाले Android डिवाइस और उन पर मौजूद मॉडल

डिवाइस पर इन्फ़रंस के लिए, ML Kit के दस्तावेज़ में, इसके साथ काम करने वाले डिवाइसों और उन पर मौजूद मॉडल की सूची देखी जा सकती है. डिवाइस पर इन्फ़रंस के लिए, ML Kit के Prompt API का इस्तेमाल किया जाता है.

शुरू करें

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

पहला चरण: Firebase प्रोजेक्ट सेट अप करना और अपने ऐप्लिकेशन को Firebase से कनेक्ट करना

  1. Firebase कंसोल में साइन इन करें. इसके बाद, अपना Firebase प्रोजेक्ट चुनें.

  2. Firebase कंसोल में, एआई सेवाएं > एआई लॉजिक पर जाएं.

  3. अपने प्रोजेक्ट के लिए ज़रूरी एपीआई और संसाधन सेट अप करने में मदद पाने के लिए, शुरू करें पर क्लिक करें. इससे, चरण-दर-चरण निर्देश वाला वर्कफ़्लो लॉन्च होगा.

  4. "Gemini API" के सेवा देने वाली कंपनी का इस्तेमाल करने के लिए, अपना प्रोजेक्ट सेट अप करें.

    हमारा सुझाव है कि Gemini Developer API का इस्तेमाल करके शुरू करें. Vertex AI Gemini API को कभी भी सेट अप किया जा सकता है. Vertex AI Gemini API साथ ही, इसके लिए बिलिंग की ज़रूरी शर्तें भी पूरी की जा सकती हैं.

    Gemini Developer API के लिए, कंसोल ज़रूरी एपीआई चालू करेगा और आपके प्रोजेक्ट में Gemini एपीआई पासकोड बनाएगा.
    इस Gemini एपीआई पासकोड को अपने ऐप्लिकेशन के कोडबेस में शामिल करें. ज़्यादा जानें.

  5. अगर कंसोल के वर्कफ़्लो में आपसे अपने ऐप्लिकेशन को रजिस्टर करने और उसे Firebase से कनेक्ट करने के लिए कहा जाता है, तो स्क्रीन पर दिखने वाले निर्देशों का पालन करें.

  6. अपने ऐप्लिकेशन में एसडीके टूल जोड़ने के लिए, इस गाइड में अगले चरण पर जाएं.

दूसरा चरण: ज़रूरी एसडीके टूल जोड़ना

Android के लिए Firebase AI Logic SDK टूल (firebase-ai) और Firebase AI Logic On-Device SDK टूल (firebase-ai-ondevice) की मदद से, जनरेटिव मॉडल के साथ इंटरैक्ट करने के लिए एपीआई का ऐक्सेस मिलता है.

अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल में, Android के लिए Firebase AI Logic लाइब्रेरी की डिपेंडेंसी जोड़ें. जैसे, <project>/<app-module>/build.gradle.kts:

Kotlin

dependencies {
  // ... other androidx dependencies

  // Add the dependencies for the Firebase AI Logic libraries
  // Note that the on-device SDK is not yet included in the Firebase Android BoM
  implementation("com.google.firebase:firebase-ai:17.11.0")
  implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01")
}

Java

Java के लिए, आपको दो और लाइब्रेरी जोड़नी होंगी.

dependencies {
  // ... other androidx dependencies

  // Add the dependencies for the Firebase AI Logic libraries
  // Note that the on-device SDK is not yet included in the Firebase Android BoM
  implementation("com.google.firebase:firebase-ai:17.11.0")
  implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta01")

  // Required for one-shot operations (to use `ListenableFuture` from Guava Android)
  implementation("com.google.guava:guava:31.0.1-android")

  // Required for streaming operations (to use `Publisher` from Reactive Streams)
  implementation("org.reactivestreams:reactive-streams:1.0.4")
}

तीसरा चरण: यह देखना कि डिवाइस पर मौजूद मॉडल उपलब्ध है या नहीं

FirebaseAIOnDevice का इस्तेमाल करके, यह देखें कि डिवाइस पर मौजूद मॉडल उपलब्ध है या नहीं. अगर मॉडल उपलब्ध नहीं है, तो उसे डाउनलोड करें.

डाउनलोड होने के बाद, AICore मॉडल को अपने-आप अपडेट करता रहेगा. AICore और डिवाइस पर मौजूद मॉडल के डाउनलोड को मैनेज करने के बारे में ज़्यादा जानने के लिए, स्निपेट के बाद दिए गए नोट देखें.

Kotlin

val status = FirebaseAIOnDevice.checkStatus()
when (status) {
  OnDeviceModelStatus.UNAVAILABLE -> {
    Log.w(TAG, "On-device model is unavailable")
  }

  OnDeviceModelStatus.DOWNLOADABLE -> {
    FirebaseAIOnDevice.download().collect { status ->
      when (status) {
        is DownloadStatus.DownloadStarted ->
          Log.w(TAG, "Starting download - ${status.bytesToDownload}")

        is DownloadStatus.DownloadInProgress ->
          Log.w(TAG, "Download in progress ${status.totalBytesDownloaded} bytes downloaded")

        is DownloadStatus.DownloadCompleted ->
          Log.w(TAG, "On-device model download complete")

        is DownloadStatus.DownloadFailed ->
          Log.e(TAG, "Download failed ${status}")
      }
    }
  }
  OnDeviceModelStatus.DOWNLOADING -> {
    Log.w(TAG, "On-device model is being downloaded")
  }

  OnDeviceModelStatus.AVAILABLE -> {
    Log.w(TAG, "On-device model is available")
  }
}

Java

Checking for and downloading the model is not yet available for Java.

However, all other APIs and interactions in this guide are available for Java.

डिवाइस पर मौजूद मॉडल डाउनलोड करने के बारे में इन बातों का ध्यान रखें:

  • डिवाइस पर मौजूद मॉडल को डाउनलोड होने में लगने वाला समय, कई चीज़ों पर निर्भर करता है. जैसे, आपका नेटवर्क.

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

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

  • AICore (Android सिस्टम सेवा) मैनेज करती है कि कौनसे मॉडल और वर्शन को डाउनलोड किया गया है. साथ ही, यह मॉडल को अपडेट रखती है. ध्यान दें कि डिवाइस पर सिर्फ़ एक मॉडल डाउनलोड किया जाएगा. इसलिए, अगर डिवाइस पर मौजूद किसी दूसरे ऐप्लिकेशन ने पहले ही डिवाइस पर मौजूद मॉडल को डाउनलोड कर लिया है, तो यह जांच करने पर पता चलेगा कि मॉडल उपलब्ध है.

इंतज़ार के समय को ऑप्टिमाइज़ करना

पहले इन्फ़रंस कॉल के लिए ऑप्टिमाइज़ करने के लिए, आपका ऐप्लिकेशन warmup() को कॉल कर सकता है. इससे, डिवाइस पर मौजूद मॉडल मेमोरी में लोड हो जाता है और रनटाइम कॉम्पोनेंट शुरू हो जाते हैं.

चौथा चरण: सेवा शुरू करना और मॉडल इंस्टेंस बनाना

इस पेज पर, सेवा देने वाली कंपनी के हिसाब से कॉन्टेंट और कोड देखने के लिए, अपने Gemini API सेवा देने वाली कंपनी पर क्लिक करें.

मॉडल को प्रॉम्प्ट का अनुरोध भेजने से पहले, यह सेट अप करें.

  1. चुने गए एपीआई के सेवा देने वाली कंपनी के लिए, सेवा शुरू करें.

  2. GenerativeModel इंस्टेंस बनाएं और mode को इनमें से किसी एक पर सेट करें. यहां दी गई जानकारी, बहुत सामान्य है. हालांकि, इन्फ़रंस मोड सेट करना में, इन मोड के व्यवहार के बारे में ज़्यादा जानकारी देखी जा सकती है.

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

    • ONLY_ON_DEVICE: डिवाइस पर मौजूद मॉडल का इस्तेमाल करने की कोशिश करें. अगर ऐसा नहीं होता है, तो गड़बड़ी दिखाएं.

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

    • ONLY_IN_CLOUD: क्लाउड पर होस्ट किए गए मॉडल का इस्तेमाल करने की कोशिश करें. अगर ऐसा नहीं होता है, तो गड़बड़ी दिखाएं.

Kotlin

// Using this SDK to access on-device inference is an Experimental release and requires opt-in
@OptIn(PublicPreviewAPI::class)

// ...

// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE)
    )

Java

// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
    .generativeModel(
        "MODEL_NAME",
        new OnDeviceConfig(InferenceMode.PREFER_ON_DEVICE)
    );

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

पांचवां चरण: मॉडल को प्रॉम्प्ट का अनुरोध भेजना

इस सेक्शन में, अलग-अलग तरह के आउटपुट जनरेट करने के लिए, अलग-अलग तरह के इनपुट भेजने का तरीका बताया गया है. जैसे:

सिर्फ़ टेक्स्ट वाले इनपुट से टेक्स्ट जनरेट करना

इस सैंपल को आज़माने से पहले, पक्का करें कि आपने इस गाइड का शुरू करने का तरीका सेक्शन पूरा कर लिया हो.

टेक्स्ट वाले प्रॉम्प्ट से टेक्स्ट जनरेट करने के लिए, generateContent() का इस्तेमाल किया जा सकता है:

Kotlin

// Imports + initialization of Gemini API backend service + creation of model instance

// Provide a prompt that contains text
val prompt = "Write a story about a magic backpack."

// To generate text output, call generateContent with the text input
val response = model.generateContent(prompt)
print(response.text)

Java

// Imports + initialization of Gemini API backend service + creation of model instance

// Provide a prompt that contains text
Content prompt = new Content.Builder()
    .addText("Write a story about a magic backpack.")
    .build();

// To generate text output, call generateContent with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

ध्यान दें कि Firebase AI Logic टेक्स्ट वाले जवाबों की स्ट्रीमिंग की सुविधा भी देता है. इसके लिए, generateContentStream का इस्तेमाल किया जाता है (बजाय generateContent के).

टेक्स्ट और इमेज (मल्टीमॉडल) वाले इनपुट से टेक्स्ट जनरेट करना

इस सैंपल को आज़माने से पहले, पक्का करें कि आपने इस गाइड का शुरू करने का तरीका सेक्शन पूरा कर लिया हो.

टेक्स्ट और ज़्यादा से ज़्यादा एक इमेज फ़ाइल (सिर्फ़ बिटमैप) वाले प्रॉम्प्ट से टेक्स्ट जनरेट करने के लिए, generateContent() का इस्तेमाल किया जा सकता है. इसके लिए, हर इनपुट फ़ाइल का mimeType और फ़ाइल उपलब्ध कराएं.

Kotlin

// Imports + initialization of Gemini API backend service + creation of model instance

// Loads an image from the app/res/drawable/ directory
val bitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)

// Provide a prompt that includes the image specified above and text
val prompt = content {
  image(bitmap)
  text("What developer tool is this mascot from?")
}

// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)

Java

// Imports + initialization of Gemini API backend service + creation of model instance

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);

// Provide a prompt that includes the image specified above and text
Content content = new Content.Builder()
        .addImage(bitmap)
        .addText("What developer tool is this mascot from?")
        .build();

// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

ध्यान दें कि Firebase AI Logic टेक्स्ट वाले जवाबों की स्ट्रीमिंग की सुविधा भी देता है. इसके लिए, generateContentStream का इस्तेमाल किया जाता है (बजाय generateContent के).

तुम और क्या कर सकती हो?

हाइब्रिड अनुभवों के लिए, कॉन्फ़िगरेशन के अन्य विकल्प और सुविधाएं इस्तेमाल की जा सकती हैं:

डिवाइस पर इन्फ़रंस के लिए, अभी उपलब्ध नहीं कराई गई सुविधाएं

एक्सपेरिमेंटल रिलीज़ के तौर पर, क्लाउड मॉडल की सभी सुविधाएं, डिवाइस पर इन्फ़रंस के लिए उपलब्ध नहीं हैं.

इस सेक्शन में बताई गई सुविधाएं, डिवाइस पर इन्फ़रंस के लिए अभी उपलब्ध नहीं हैं. अगर आपको इनमें से किसी भी सुविधा का इस्तेमाल करना है, तो हमारा सुझाव है कि ज़्यादा बेहतर अनुभव के लिए, ONLY_IN_CLOUD इन्फ़रंस मोड का इस्तेमाल करें.

  • स्ट्रक्चर्ड आउटपुट जनरेट करना. जैसे, JSON या enum

  • बिटमैप (मेमोरी में लोड की गई इमेज) के अलावा, इमेज फ़ाइल के अन्य इनपुट टाइप से टेक्स्ट जनरेट करना

  • एक से ज़्यादा इमेज फ़ाइल से टेक्स्ट जनरेट करना

  • ऑडियो, वीडियो, और दस्तावेज़ों (जैसे, PDF) के इनपुट से टेक्स्ट जनरेट करना

  • Gemini या Imagen मॉडल का इस्तेमाल करके इमेज जनरेट करना

  • मल्टीमॉडल अनुरोधों में, यूआरएल का इस्तेमाल करके फ़ाइलें उपलब्ध कराना. डिवाइस पर मौजूद मॉडल को, इनलाइन डेटा के तौर पर फ़ाइलें उपलब्ध कराएं

  • 4,000 से ज़्यादा टोकन (या करीब 3,000 अंग्रेज़ी शब्दों) वाले अनुरोध भेजना.

  • Multi-turn चैट

  • मॉडल को जवाब जनरेट करने में मदद करने के लिए टूल उपलब्ध कराना. जैसे, फ़ंक्शन कॉलिंग, कोड एक्ज़ीक्यूशन, यूआरएल कॉन्टेक्स्ट, और Google Search के साथ ग्राउंडिंग

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

अन्य सीमाएं

ऊपर बताई गई सीमाओं के अलावा, डिवाइस पर इन्फ़रंस की ये सीमाएं भी हैं. ज़्यादा जानने के लिए, ML Kit का दस्तावेज़ देखें:

  • आपके ऐप्लिकेशन के एंड-यूज़र को, डिवाइस पर इन्फ़रंस के लिए, इसके साथ काम करने वाला डिवाइस इस्तेमाल करना होगा.

  • आपका ऐप्लिकेशन, डिवाइस पर इन्फ़रंस की सुविधा का इस्तेमाल सिर्फ़ तब कर सकता है, जब वह स्क्रीन पर दिख रहा हो.

  • डिवाइस पर इन्फ़रंस के लिए, सिर्फ़ अंग्रेज़ी और कोरियन की पुष्टि की गई है.

  • डिवाइस पर इन्फ़रंस के पूरे अनुरोध के लिए, टोकन की ज़्यादा से ज़्यादा सीमा 4,000 टोकन है. अगर आपके अनुरोध इस सीमा से ज़्यादा हो सकते हैं, तो पक्का करें कि आपने ऐसा इन्फ़रंस मोड कॉन्फ़िगर किया हो जो क्लाउड पर होस्ट किए गए मॉडल का इस्तेमाल कर सके.

  • हमारा सुझाव है कि डिवाइस पर इन्फ़रंस के उन इस्तेमाल के मामलों से बचें जिनमें ज़्यादा आउटपुट (256 से ज़्यादा टोकन) की ज़रूरत होती है.

  • AICore (Android सिस्टम सेवा, जो डिवाइस पर मौजूद मॉडल को मैनेज करती है) इन्फ़रंस कोटा लागू करती है हर ऐप्लिकेशन के लिए. कम समय में, एपीपी के बहुत ज़्यादा अनुरोध करने पर, एक ErrorCode.BUSY जवाब मिलेगा. अगर आपको यह गड़बड़ी मिल रही है, तो अनुरोध को फिर से करने के लिए, एक्स्पोनेंशियल बैकऑफ़ का इस्तेमाल करें. इसके अलावा, अगर कोई ऐप्लिकेशन, लंबी अवधि के कोटे (उदाहरण के लिए, रोज़ का कोटा) से ज़्यादा इस्तेमाल करता है, तो ErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDED जवाब मिल सकता है.


सुझाव/राय देना या शिकायत करना के बारे में अपने अनुभव के साथ Firebase AI Logic