কীভাবে করবেন

স্মার্ট Android অ্যাপ তৈরি করা: ক্লাউড ও হাইব্রিড ইনফারেন্স

৮ মিনিট রিডিং
৩ লেখক
Thomas Ezan, Jolanda Verhoef, Caren Chang

"স্মার্ট Android অ্যাপ তৈরি করুন" ব্লগ পোস্ট সিরিজে আপনাকে স্বাগত জানাই, যেখানে আমরা একটি সাধারণ Android অ্যাপ নিয়ে সেটিকে পছন্দমতো, স্মার্ট ও এজেন্টিক অভিজ্ঞতায় রূপান্তরিত করি। আমাদের আগের পোস্টে, আমরা ML Kit-এর Prompt API-এর মাধ্যমে Gemini Nano ব্যবহার করে কীভাবে বুদ্ধিমান অন-ডিভাইস ফিচার তৈরি করতে হয় তা এক্সপ্লোর করেছি।

এই পোস্টে, আমরা দেখব যে কীভাবে আপনি ক্লাউড-হোস্টেড এবং হাইব্রিড AI ফিচার তৈরি করতে Firebase AI Logic ব্যবহার করতে পারবেন: 

  • বাস্তব জগতের প্রসঙ্গ অনুযায়ী উত্তর দেওয়া
  • হাইব্রিড ইনফারেন্স ব্যবহার করে ক্লাউড ও লোকাল এক্সিকিউশনের মধ্যে ডায়নামিক অনুরোধ রাউটিং করা
  • কাস্টম রাউটিং সিস্টেমের মাধ্যমে কন্টেন্ট অনুবাদ করা

কখনও কখনও, কোনও ব্যবহারের ক্ষেত্রে আরও বেশি বিশ্ব জ্ঞান, অনেক বড় কন্টেক্সট উইন্ডো বা জটিল কোয়েরি হ্যান্ডেল করার ক্ষমতা সহ AI মডেলের প্রয়োজন হয়। সেইসব পরিস্থিতিতে, আমরা ক্লাউড মডেল ব্যবহার করতে পারি। 

অন্যান্য ক্ষেত্রে, আপনি দুটি পদ্ধতিই ব্যবহার করতে চান: খরচ কমানোর জন্য উপলভ্য হলে অন-ডিভাইস চালানোর জন্য হাইব্রিড ইনফারেন্স ব্যবহার করা, তবে সব ডিভাইসের সাথে কম্প্যাটিবিলিটি নিশ্চিত করতে ক্লাউড ব্যবহার করা।

features.png
Jetpacker-এ ক্লাউড ও হাইব্রিড ফিচার: ওয়েব গ্রাউন্ডিং সহ মিউজিয়াম অ্যাসিস্ট্যান্ট, হাইব্রিড রেস্তোরাঁ রিভিউ ড্রাফটিং এবং  কাস্টম-রাউটেড লাইভ ট্রান্সলেশন ফিচার সহ সহায়তা চ্যাট।

Jetpacker-এ কীভাবে আমরা তিনটি ক্লাউড ও হাইব্রিড ফিচার প্রয়োগ করেছি তা দেখে নেওয়া যাক:

  • ওয়েব গ্রাউন্ডিং সহ মিউজিয়াম অ্যাসিস্ট্যান্ট
  • হাইব্রিড রেস্তোরাঁ রিভিউ ড্রাফ্ট করা
  • কাস্টম-রাউটেড লাইভ অনুবাদ সহ হোটেল সহায়তা চ্যাট।

আপ-টু-ডেট তথ্যের জন্য LLM গ্রাউন্ডিং ব্যবহার করাLLM গ্রাউন্ডিং সহ মিউজিয়াম অ্যাসিস্ট্যান্ট চ্যাটবট

মিউজিয়াম অ্যাসিস্ট্যান্ট হল একটি ইন্ট্যার‍্যাক্টিভ চ্যাটবট যা ব্যবহারকারীদের মিউজিয়াম ভিজিট প্ল্যান করতে সাহায্য করার জন্য ডিজাইন করা হয়েছে। এটি নির্দিষ্ট প্রদর্শনী, বর্তমান খোলা থাকার সময়, টিকিটের দাম এবং আরও অনেক কিছু সম্পর্কে দর্শকদের আপ-টু-ডেট বিবরণ প্রদান করে।

museum_assistant_upscaled.png
মিউজিয়াম অ্যাসিস্ট্যান্ট হল একটি চ্যাটবট যা ‘আমি কীভাবে ল্যুভরের টিকিটে ছাড় পেতে পারি?’-এর মতো প্রশ্নের উত্তর দেয়।

AI ফিচার তৈরি করার সময়, মডেলের থেকে বাস্তব-জগতের নতুন, সঠিক ও নির্দিষ্ট তথ্য পাওয়া একটি সাধারণ চ্যালেঞ্জ। ক্লাউড মডেলে বিশ্ব সম্পর্কে প্রচুর তথ্য থাকলেও, এটি হয়ত কোনও সিজনাল প্রদর্শনী বা আজকের দিনের খোলার সময় সম্পর্কে জানে না।

grounding.png
মডেলকে সঠিকভাবে ও নির্ভুলভাবে প্রশ্নের উত্তর দিতে সক্ষম করতে, কনটেক্সট উইন্ডোতে গ্রাউন্ডিং ডেটা যোগ করা হয়।

এই ফাঁক পূরণ করতে, মডেলের কন্টেক্সট উইন্ডোতে অতিরিক্ত প্রসঙ্গ যোগ করার জন্য আমরা গ্রাউন্ডিং টেকনিক ব্যবহার করতে পারি। Firebase AI Logic SDK তিন ধরনের গ্রাউন্ডিং সাপোর্ট করে:

  • URL গ্রাউন্ডিং: নির্দিষ্ট ওয়েবপেজের কন্টেন্ট ব্যবহার করে উত্তর গ্রাউন্ড করা (যেমন, টিকিটের বর্তমান দাম বা মিউজিয়ামের নিয়ম)।
  • Google Search গ্রাউন্ডিং: আপ-টু-ডেট বিবরণের জন্য মডেলকে রিয়েল-টাইম Google Search ইন্ডেক্স কোয়েরি করতে দেওয়া।
  • Maps গ্রাউন্ডিং: 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
    )

ব্যবহারকারী অ্যাসিস্ট্যান্টকে কোয়েরি করলে এবং URL গ্রাউন্ডিং চালু করা থাকলে, আমরা নির্দিষ্ট মিউজিয়াম রিসোর্স URL সরাসরি প্রম্পটে যোগ করি:

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)

সব AI টাস্কের জন্য ক্লাউড-ভিত্তিক মডেলের প্রয়োজন হয় না এবং সব ডিভাইস অনলাইন থাকে না। লেটেন্সি, খরচ ও অফলাইন উপলভ্যতা ব্যালেন্স করার ব্যাপারে ডেভেলপারদের সাহায্য করতে, আমরা সম্প্রতি হাইব্রিড ইনফারেন্সের জন্য Firebase API চালু করেছি।

Jetpacker-এ, রেস্তোরাঁ রিভিউ ফিচার ব্যবহার করে ব্যবহারকারীরা নির্দিষ্ট বিষয় পর্যালোচনা করতে এবং অটোমেটিক রিভিউয়ের ড্রাফ্ট তৈরি করতে পারেন। সব ব্যবহারকারীর জন্য এটি চালু করতে, আমরা Gemini Nano-এর মাধ্যমে লোকাল এক্সিকিউশনকে অগ্রাধিকার দিই এবং যেসব ডিভাইসে Gemini Nano কাজ করে না সেগুলিতে ক্লাউড মডেল ব্যবহার করি। 

review_upscaled.png
রেস্তোরাঁ রিভিউ ফিচার, বিষয়ভিত্তিক রিভিউয়ের ড্রাফ্ট তৈরি করতে হাইব্রিড ইনফারেন্স ব্যবহার করে
// 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
    )
)

হাইব্রিড ইনফারেন্স API চারটি আলাদা আলাদা রাউটিং মোড সাপোর্ট করে:

  • PREFER_ON_DEVICE: লোকাল এক্সিকিউশনকে অগ্রাধিকার দেয় এবং Gemini Nano উপলভ্য না থাকলে ক্লাউড ব্যবহার করে।
  • PREFER_IN_CLOUD: ক্লাউডে এক্সিকিউশনকে অগ্রাধিকার দেয় এবং ডিভাইস অফলাইন হয়ে গেলে ডিভাইসে এক্সিকিউশন করে।
  • ONLY_ON_DEVICE: ডিভাইসের মধ্যেই এক্সিকিউশন সীমাবদ্ধ রাখে।
  • ONLY_IN_CLOUD: ক্লাউডেই শুধু এক্সিকিউট করার অনুমতি দেয়।

পর্যালোচনা তৈরি হয়ে গেলে, আমরা সেটি ক্লিপবোর্ডে কপি করি এবং রেস্তোরাঁর পর্যালোচনা পৃষ্ঠা সরাসরি খুলতে একটি ইনটেন্ট ব্যবহার করি, এর ফলে ব্যবহারকারী নির্বিঘ্নে অভিজ্ঞতা পান:

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"
    )

কারণ রিসেপশনিস্টের উত্তর হোটেলের স্থানীয় ভাষায় (যেমন, প্যারিসের Hotel Le Meurice-এর ক্ষেত্রে ফরাসি) দেওয়া হয়, তাই আমাদের মেসেজ ব্যবহারকারীর পছন্দের ভাষায় অনুবাদ করতে হবে।

translation_upscaled.png
হোটেল সহায়তা চ্যাট মেসেজ ব্যবহারকারীর পছন্দের ভাষায় অটোমেটিক অনুবাদ করা হয় 

হাইব্রিড মডেল সাধারণ রাউটিং সংক্রান্ত পছন্দ কনফিগার করতে পারলেও, জটিল পরিস্থিতির ক্ষেত্রে কাস্টম রাউটিং লজিক প্রয়োজন হয়। Jetpacker-এ, আমরা একটি কাস্টম রাউটিং স্ট্যাক প্রয়োগ করি যা নিম্নলিখিত বিষয়গুলি বিবেচনা করে:

  • ভাষা শনাক্তকরণ: অন-ডিভাইস ML Kit ভাষা শনাক্তকরণ API ব্যবহার করে, আমরা ইনকামিং মেসেজের ভাষা শনাক্ত করতে পারি।
  • অন-ডিভাইস অনুবাদ (Gemini Nano): ML Kit-এর প্রম্পট API আমাদের ডিভাইসে সরাসরি সাধারণ ভাষার পেয়ার অনুবাদ করতে দেয়, এর ফলে ব্যান্ডউইথ ও ক্লাউড খরচ বাঁচে।
  • ক্লাউড ট্রান্সলেশন (Gemini 3 Flash): আরও জটিল ভাষার ক্ষেত্রে, আরও উন্নত কোয়ালিটির অনুবাদ পেতে আমরা Gemini Flash 3 ব্যবহার করি।
// 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")
            }
        }
    }
}

এই উদাহরণে, কাস্টম রাউটিং লজিক শুধুমাত্র অনুবাদের সোর্স ও টার্গেট ভাষাকেই বিবেচনা করে। তবে, আপনার অ্যাপের ব্যবহারের কেস অনুযায়ী, আপনি রাউটিং লজিককে আরও বিস্তৃত করতে পারেন যাতে ডিভাইসে থাকা মডেলের ভার্সন, নেটওয়ার্ক কানেক্টিভিটি, ব্যাটারির স্ট্যাটাস এবং আরও অনেক কিছু অন্তর্ভুক্ত থাকে।

AI পাইপলাইন সুরক্ষিত করা: Firebase App Check

সবশেষে, ক্লাউডে AI ব্যবহার করলে API কী অপব্যবহার বা অননুমোদিত বিলিংয়ের সম্ভাবনা বেড়ে যায়। API কল সুরক্ষিত করতে, আমরা Play Integrity (প্রোডাকশন) এবং লোকাল ডিবাগ প্রোভাইডার (লোকাল ডেভেলপমেন্ট বা এমুলেটরের জন্য) দু'টিই ব্যবহার করে Firebase অ্যাপ চেক ইন্টিগ্রেট করেছি।

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-এর মাধ্যমে লোকাল অনুরোধ সম্পূর্ণভাবে যাচাই ও প্রমাণীকরণ করা হয়, এর ফলে আমাদের ব্যাকএন্ড সুরক্ষিত থাকে এবং আমরা লোকালি অ্যাপ পরীক্ষা করতে পারি।

সিদ্ধান্ত

ক্লাউড মডেলের ক্ষমতা (গ্রাউন্ডিং, সিস্টেম নির্দেশাবলী) এবং ডিভাইসে থাকা ক্ষমতা (হাইব্রিড রাউটিং, অনুবাদ, নিরাপত্তা অ্যাপ চেক) একত্রিত করে, আমরা একটি ট্রাভেল অ্যাপ তৈরি করেছি যা স্মার্ট, সুরক্ষিত এবং অফলাইনে উপলভ্য।

GitHub-এ Jetpacker-এর সম্পূর্ণ সোর্স কোড দেখুন এবং শুরু করতে Firebase ডকুমেন্টেশন এক্সপ্লোর করুন:

Firebase AI Logic ডকুমেন্টেশন
Firebase Hybrid Inference API

আরও জানুন

এই ব্লগ পোস্ট সিরিজের অন্যান্য অংশ দেখুন:

পার্ট ১: অ্যাপের ভূমিকা ও হাই-লেভেল ওভারভিউ।
পার্ট ২: অন-ডিভাইস ইন্টেলিজেন্স। ভ্রমণসূচি সংক্ষিপ্তকরণ, রসিদ পার্সিং এবং লোকাল অডিও প্রসেসিংয়ের মতো গোপনীয়তা-কেন্দ্রিক ফিচার তৈরি করতে ML Kit-এর GenAI API ও Gemini Nano-তে ডিপ-ডাইভ করুন।
পার্ট ৩ (এই পোস্ট!): হাইব্রিড ও ক্লাউড রিজনিং। Google Maps ও ওয়েব কনটেক্সটের মতো বাস্তব-জগতের ডেটার ভিত্তিতে LLM উত্তর গ্রাউন্ড করার জন্য Firebase AI Logic কীভাবে ব্যবহার করতে হয় তা এক্সপ্লোর করুন।
পার্ট ৪: সিস্টেম ইন্টিগ্রেশন। AppFunctions ব্যবহার করে Android ইন্টেলিজেন্স সিস্টেমের সাথে ইন্টিগ্রেট করা। 
পার্ট ৫ (শীঘ্রই আসছে): ইন-অ্যাপ এজেন্টিক ওয়ার্কফ্লো। A2UI ও ADK দ্বারা পরিচালিত এন্ড-টু-এন্ড বুকিং অ্যাসিস্ট্যান্টের মাধ্যমে অ্যাপ এক্সটেন্ড করা।

Android ডেভেলপমেন্ট সম্পর্কে আরও জানতে আগ্রহী? YouTube বা LinkedIn-এ Android Developers-কে ফলো করুন!

এই ব্লগ পোস্টের সব কোড স্নিপেট নিম্নলিখিত কপিরাইট বিজ্ঞপ্তি মেনে চলে:

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
এর লেখা:
পড়া চালিয়ে যান