কীভাবে করবেন

বুদ্ধিমান অ্যান্ড্রয়েড অ্যাপ তৈরি করুন: অন-ডিভাইস ইনফারেন্স

৬ মিনিটের পাঠ
ক্যারেন চ্যাং-এর প্রোফাইল দেখুন
Caren Chang ডেভেলপার সম্পর্ক প্রকৌশলী

"বুদ্ধিমান অ্যান্ড্রয়েড অ্যাপ তৈরি করুন" ব্লগ পোস্ট সিরিজে আপনাকে আবার স্বাগত জানাই, যেখানে আমরা একটি সাধারণ অ্যান্ড্রয়েড অ্যাপকে একটি ব্যক্তিগতকৃত , বুদ্ধিমান এবং সক্রিয় অভিজ্ঞতায় রূপান্তরিত করি। আমাদের আগের পোস্টে আমরা জেটপ্যাকার (Jetpacker)-এর সাথে পরিচয় করিয়ে দিয়েছিলাম , যা এই সিরিজ জুড়ে আমরা ডেমো অ্যাপ হিসেবে ব্যবহার করব।

এই ব্লগ পোস্টে আমরা আলোচনা করব, কীভাবে আপনি এমএল কিট-এর প্রম্পট এপিআই (Prompt API) ব্যবহার করে জেমিনি ন্যানো (Gemini Nano)-তে ইন্টেলিজেন্ট অন-ডিভাইস ফিচার তৈরি করতে পারেন।

ডিভাইসে বুদ্ধিমান বৈশিষ্ট্য তৈরি করা বলতে সার্ভারে ডেটা না পাঠিয়ে সরাসরি ডিভাইসে নির্দেশাবলী এবং ডেটা প্রক্রিয়াকরণ করার ক্ষমতাকে বোঝায়। এর কয়েকটি সুবিধা রয়েছে:

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

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

Screenshot 2026-07-02 at 12.57.08PM.png
জেটপ্যাকারে ডিভাইসের ফিচারসমূহ: ভ্রমণের কার্যসূচির সারসংক্ষেপ, খরচ ব্যবস্থাপনা, এবং ভয়েস নোট।

সংক্ষিপ্ত পাঠ্যের উচ্চ মানের ও প্রয়োজন অনুযায়ী সারসংক্ষেপ

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

Screenshot_20260702_111934.png
রোমান্টিক প্যারিস ভ্রমণকে শিল্পকলা, দর্শনীয় স্থান এবং সুস্বাদু খাবারের এক চিরায়ত মিশ্রণ হিসেবে সংক্ষেপে বর্ণনা করা হয়েছে। এর সাথে একটি পরামর্শ এবং কিছু দরকারি বাক্যও যোগ করা হয়েছে।

ভ্রমণের একটি কার্যসূচি ইনপুট করে এবং একটি এলএলএম-কে (LLM) তা সংক্ষিপ্ত করতে বলে, আমরা প্যাকিং টিপস এবং দরকারি স্থানীয় বাক্যাংশ সহ ভ্রমণটির একটি দ্রুত সারাংশ তৈরি করতে পারি। বিভিন্ন কারণে অন-ডিভাইস মডেলের জন্য এটি একটি চমৎকার ব্যবহার:

  • পারফরম্যান্স এবং গুণমান: ইনপুট এবং আউটপুট উভয় টেক্সটই তুলনামূলকভাবে সংক্ষিপ্ত। এর ফলে, আমরা আশা করতে পারি যে একটি অন-ডিভাইস সলিউশনের পারফরম্যান্স এবং গুণমান আরও শক্তিশালী ক্লাউড মডেলগুলোর সমতুল্য হবে।
  • পরিমাপযোগ্যতা: ডিভাইসে ইনফারেন্স স্থানান্তর করার ফলে আমরা ক্রমবর্ধমান ক্লাউড ইনফারেন্স খরচ ব্যবস্থাপনার চিন্তা না করেই এই ফিচারটিকে কয়েকজন ব্যবহারকারী থেকে লক্ষ লক্ষ ব্যবহারকারীর জন্য স্কেল করতে পারি।
  • স্বল্প লেটেন্সি এবং নির্ভরযোগ্যতা: অন-ডিভাইস ইনফারেন্স স্বল্প লেটেন্সি নিশ্চিত করে, ফলে ব্যবহারকারীরা অফলাইনে থাকলেও একটি নির্ভরযোগ্য অভিজ্ঞতা লাভ করেন।

ডিভাইসে বিল্ড করার জন্য আমরা জেমিনি ন্যানো (Gemini Nano) ব্যবহার করি, যা মোবাইল ডিভাইসের জন্য অপ্টিমাইজ করা গুগলের সবচেয়ে কার্যকর মডেল। জেমিনি ন্যানো প্রথম কয়েক বছর আগে চালু হয়েছিল এবং এখন ১৪ কোটিরও বেশি ডিভাইসে চলছে। এই মডেলের সর্বশেষ সংস্করণ, জেমিনি ন্যানো ৪ (Gemini Nano 4), সম্প্রতি প্রকাশিত জেমা ৪ (Gemma 4) মডেলের আর্কিটেকচারের উপর ভিত্তি করে তৈরি এবং সর্বোচ্চ ব্যাটারি ও পারফরম্যান্স দক্ষতার জন্য এটিকে আরও অপ্টিমাইজ করা হয়েছে।

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

সর্বোত্তম প্রম্পট খুঁজে পেতে সাধারণত কিছু পুনরাবৃত্তির প্রয়োজন হয়, এবং এই প্রক্রিয়ার এই ধাপটির জন্য AICore অ্যাপটি একদম উপযুক্ত। AICore-এর ডেভেলপার প্রিভিউ অপশনটি বেছে নেওয়ার পর, আমরা প্রম্পট পরীক্ষা করতে এবং মডেলটির প্রত্যাশিত আউটপুট দেখতে Gemini Nano 4-এর মতো প্রিভিউ মডেল ডাউনলোড করতে পারি। প্রম্পটটিতে কয়েকবার পুনরাবৃত্তি করার মাধ্যমে, আমরা প্রতিক্রিয়ার গতি ১৩ সেকেন্ড থেকে কমিয়ে ২ সেকেন্ডেরও নিচে আনতে সক্ষম হয়েছি! চূড়ান্ত কোড ইমপ্লিমেন্টেশন এবং প্রম্পটটি এখানে দেখুন।

[এখানে সম্পদ - ফাইলটি বর্তমানে অনেক বড়]

সংবেদনশীল ব্যবহারকারীর ইনপুটের জন্য স্থানীয় প্রক্রিয়াকরণ

এরপরে, ব্যবহারকারীদের ভ্রমণ আরও আনন্দদায়ক করে তোলার জন্য, আমরা একটি সহজ ব্যয় ব্যবস্থাপক তৈরি করব যা রসিদ বাছাই করা এবং বাজেট গণনার মতো ম্যানুয়াল কাজগুলো দূর করে দেবে।

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

এছাড়াও, জেমিনি ন্যানো ৪-এর মাল্টিমোডালিটির জন্য উন্নত মডেল সক্ষমতা রয়েছে, বিশেষ করে ওসিআর এবং ভিজ্যুয়াল ডেটা এক্সট্র্যাকশনের মতো ইমেজ আন্ডারস্ট্যান্ডিং টাস্কের জন্য, যা এটিকে রসিদ থেকে তথ্য বের করার মতো কাজের জন্য একটি চমৎকার সমাধান করে তুলেছে।

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

// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// ksp("com.google.mlkit:genai-schema-compiler:1.0.0-alpha1")

@Generable("Information extracted from an expense receipt")
data class ParsedReceipt(
  @Guide("Generated title for the expense less than 6 words. Based on restaurant or activity name.")
  val title: String,
  @Guide("Total amount of the expense. Look for values at the bottom and words like total or balance due.")
  val amount: Double,
  @Guide("Type of expense", enumValues = ["travel", "food", "shopping", "entertainment", "other"])
  val category: String,
)

val prompt = "Determine if the image is a receipt or expense. 
    If it is NOT a receipt or expense, output the text 'NOT_A_RECEIPT'.
    Otherwise, parse the receipt information."

val request = generateContentRequest(ImagePart(bitmap), TextPart(prompt)) {}
val requestWithStructuredOutput = generateTypedContentRequest(request, ParsedReceipt::class)

// Define the configuration for Gemini Nano 4 E4B preview model  
// When selecting models, you can specify which performance charactertists are most important
//  for your use case. Use ModelPreference.FULL when you want to prioritize reasoning power over speed. 
//  Use ModelPreference.FAST when complex logic is not required and latency is a priority.
val previewFullConfig = generationConfig {
    modelConfig = modelConfig {
        releaseStage = ModelReleaseStage.PREVIEW
        preference = ModelPreference.FULL
    }
}

val geminiNano4BPreviewModel = Generation.getClient(previewFullConfig)
val response = geminiNano4BPreviewModel.generateContent(requestWithStructuredOutput)
val parsedReceipt: ParsedReceipt? = response.candidates.firstOrNull()?.response

মাল্টিমোডাল ইনপুট

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

Screenshot_20260702_115529.png
রোমে ছুটি কাটানোর ভ্রমণসূচিতে ভয়েস নোটের অংশবিশেষ দেখানো হয়েছে।

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

আমাদের ফিচারের জন্য আমরা স্পিচ রিকগনিশন এপিআই-এর সাথে এমএল কিট জেনএআই প্রম্পট এপিআই-কে একত্রিত করি:

// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")

val tripEvents = ... 

// Set up speech recognition
val speechRecognizerOptions =
    speechRecognizerOptions {
        locale = Locale.US
        preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
    }
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(speechRecognizerOptions)

suspend fun transcribeVoiceNote(recognizer: SpeechRecognizer) {
    // Display partial text as the user is recording audio
    var partialTextResponse = ""

    // Display the full text once user is finished recording audio
    var transcription = ""

    val request: SpeechRecognizerRequest
        = speechRecognizerRequest { audioSource = AudioSource.fromMic() }
    recognizer.startRecognition(request).collect { response ->
        when (response) {
            is SpeechRecognizerResponse.PartialTextResponse -> {
                partialTextResponse = response.text
            }
            is SpeechRecognizerResponse.FinalTextResponse -> {
                transcription = response.text
                processAndCategorizeVoiceNote(transcription, tripEvents)
            }
        }
    }
}

fun processAndCategorizeVoiceNote(transcribedVoiceNote: String, events: List<Event>) {
    val prompt = "Given the voice note $transcribedVoiceNote
     and the following events for this trip: $events, rewrite this transcription
     to remove filler words. Then, identify which events from the
     list this rewritten transcription matches to."

     // Utilize ML Kit's Prompt API to process voice note and tag it with the relevant trip activities
     Generation.getClient().generateContent(prompt)
}

উপসংহার

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

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

আরও জানুন

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

পর্ব ১: অ্যাপটির পরিচিতি এবং একটি সামগ্রিক সংক্ষিপ্ত বিবরণ।

পর্ব ২ (এই পোস্টটি!):   ডিভাইস-ভিত্তিক ইন্টেলিজেন্স। ভ্রমণসূচির সারাংশ, রসিদ বিশ্লেষণ এবং স্থানীয় অডিও প্রক্রিয়াকরণের মতো গোপনীয়তা-কেন্দ্রিক ফিচার তৈরি করতে এমএল কিট-এর জেনএআই এপিআই এবং জেমিনি ন্যানো-র গভীরে প্রবেশ করুন।

পর্ব ৩:   হাইব্রিড ও ক্লাউড রিজনিং। গুগল ম্যাপস এবং ওয়েব কনটেক্সটের মতো বাস্তব-জগতের ডেটার ওপর ভিত্তি করে এলএলএম (LLM) উত্তর তৈরিতে কীভাবে ফায়ারবেস এআই লজিক (Firebase AI Logic) ব্যবহার করা যায়, তা জানুন।

পর্ব ৪: সিস্টেম ইন্টিগ্রেশন। অ্যাপফাংশন ব্যবহার করে অ্যান্ড্রয়েড ইন্টেলিজেন্স সিস্টেমের সাথে ইন্টিগ্রেট করা।

পর্ব ৫ (শীঘ্রই আসছে): অ্যাপের মধ্যেই এজেন্টিক ওয়ার্কফ্লো। A2UI এবং ADK দ্বারা চালিত একটি এন্ড-টু-এন্ড বুকিং অ্যাসিস্ট্যান্টের মাধ্যমে অ্যাপটিকে আরও উন্নত করুন।

অ্যান্ড্রয়েড ডেভেলপমেন্ট সম্পর্কে আরও জানতে আগ্রহী? ইউটিউব বা লিঙ্কডইন- এ অ্যান্ড্রয়েড ডেভেলপারদের অনুসরণ করুন!

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

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
লিখেছেন:
পড়তে থাকুন