چگونه‌ها

ساخت برنامه‌های هوشمند اندروید: استنتاج روی دستگاه

مطالعه ۶ دقیقه‌ای
مشاهده پروفایل کارن چانگ
Caren Chang مهندس روابط توسعه‌دهنده

به مجموعه پست‌های وبلاگ «ساخت برنامه‌های هوشمند اندروید» خوش آمدید، جایی که ما یک برنامه اندروید ساده را می‌گیریم و آن را به یک تجربه شخصی‌سازی‌شده ، هوشمند و عامل‌گرا تبدیل می‌کنیم. در پست قبلی‌مان، Jetpacker را معرفی کردیم ، برنامه آزمایشی که در طول این مجموعه از آن استفاده خواهیم کرد.

در این پست وبلاگ، ما نحوه استفاده از Gemini Nano را از طریق Prompt API کیت ML برای ساخت ویژگی‌های هوشمند روی دستگاه به اشتراک خواهیم گذاشت.

ایجاد ویژگی‌های هوشمند روی دستگاه به توانایی پردازش مستقیم اعلان‌ها و داده‌ها روی دستگاه بدون ارسال داده‌ها به سرور اشاره دارد. این امر مزایای متعددی را ارائه می‌دهد:

  • داده‌های کاربر می‌توانند به صورت محلی روی دستگاه پردازش شوند و حریم خصوصی کاربر حفظ شود.
  • عملکرد مدل حتی با اتصال اینترنتی ضعیف یا بدون اتصال به اینترنت قابل اعتماد است
  • بدون هزینه اضافی استنتاج ابری، زیرا همه چیز روی سخت‌افزار کاربر اجرا می‌شود.

با در نظر گرفتن مزایای استفاده از دستگاه، ما سه ویژگی را برای افزودن به Jetpacker شناسایی کردیم که می‌تواند تجربه کاربری را بهبود بخشد: خلاصه کردن برنامه‌های سفر، مدیریت هزینه‌ها و ضبط یادداشت‌های صوتی.

تصویر صفحه ‎2026-07-02‎ ساعت ‎12.57.08PM.png
ویژگی‌های روی دستگاه در Jetpacker: خلاصه کردن برنامه‌های سفر، مدیریت هزینه‌ها و یادداشت‌های صوتی

خلاصه‌سازی سفارشی با کیفیت بالا از متون کوتاه

صفحه برنامه سفر، مروری سریع بر تمام فعالیت‌های یک سفر مشخص به کاربران می‌دهد. از آنجایی که این صفحه حاوی اطلاعات زیادی است، می‌تواند به سرعت گیج‌کننده شود. برای کمک به کاربران برای آماده شدن بدون احساس سردرگمی، می‌توانیم بخش «برای سفر خود آماده شوید» را در بالا اضافه کنیم.

تصویر_20260702_111934.png
سفر رمانتیک پاریس به عنوان یک ماجراجویی کلاسیک پاریسی خلاصه می‌شود که هنر، مناظر و غذاهای خوشمزه را با هم ترکیب می‌کند. یک انعام و چند عبارت مفید نیز اضافه شده است.

با وارد کردن برنامه سفر و درخواست از یک LLM برای خلاصه کردن آن، می‌توانیم خلاصه‌ای سریع از سفر را به همراه نکات بسته‌بندی و عبارات مفید محلی تهیه کنیم. این یک مورد استفاده عالی برای یک مدل روی دستگاه به چند دلیل است:

  • عملکرد و کیفیت: متن ورودی و خروجی هر دو نسبتاً کوتاه هستند. با این اوصاف، می‌توانیم انتظار داشته باشیم که عملکرد و کیفیت یک راهکار روی دستگاه با مدل‌های ابری قدرتمندتر برابری کند.
  • مقیاس‌پذیری: تغییر استنتاج روی دستگاه به ما این امکان را می‌دهد که این ویژگی را از چند کاربر به میلیون‌ها کاربر افزایش دهیم، بدون اینکه نگران مدیریت هزینه‌های فزاینده استنتاج ابری باشیم.
  • تأخیر کم و قابلیت اطمینان: استنتاج روی دستگاه، تأخیر کم را تضمین می‌کند و حتی در صورت آفلاین بودن کاربران، تجربه‌ای قابل اعتماد ارائه می‌دهد.

برای ساخت با استفاده از دستگاه، ما از Gemini Nano ، کارآمدترین مدل گوگل که برای دستگاه‌های تلفن همراه بهینه شده است، استفاده می‌کنیم. Gemini Nano برای اولین بار چند سال پیش معرفی شد و اکنون روی بیش از ۱۴۰ میلیون دستگاه در حال اجرا است. آخرین نسخه این مدل، Gemini Nano 4، بر اساس معماری مدل Gemma 4 که اخیراً منتشر شده است، ساخته شده است و برای حداکثر بهره‌وری باتری و عملکرد، بهینه‌تر شده است.

با استفاده از Prompt API کیت ML، می‌توانیم از قابلیت‌های مدل جدید Gemini Nano 4 برای نمونه‌سازی ویژگی‌های روی دستگاه خود بهره ببریم. ما یک prompt ایجاد می‌کنیم که شامل برنامه سفر است و از مدل می‌خواهیم خلاصه‌ای از آن را به همراه نکات آماده‌سازی ارائه دهد.

پیدا کردن تابع بهینه معمولاً نیاز به کمی تکرار دارد و برنامه AICore برای این مرحله از فرآیند عالی است. پس از انتخاب گزینه پیش‌نمایش توسعه‌دهندگان برای AICore ، می‌توانیم مدل‌های پیش‌نمایش مانند Gemini Nano 4 را دانلود کنیم تا توابع را آزمایش کنیم و خروجی‌های مورد انتظار مدل را ببینیم. با چند تکرار روی تابع، توانستیم سرعت پاسخ را از ۱۳ ثانیه به کمتر از ۲ ثانیه بهبود بخشیم! پیاده‌سازی کد نهایی و تابع را اینجا ببینید.

[دارایی اینجا - فایل خودپرداز خیلی بزرگ است]

پردازش محلی برای ورودی‌های حساس کاربر

در مرحله بعد، برای کمک به کاربران در لذت بردن بیشتر از سفرشان، یک مدیر هزینه ساده خواهیم ساخت که کار دستی مرتب‌سازی رسیدها و محاسبه بودجه را از بین می‌برد.

از آنجایی که رسیدها ممکن است حاوی اطلاعات حساسی مانند شماره کارت اعتباری و آدرس باشند، این یکی دیگر از موارد استفاده عالی برای یک راهکار درون دستگاهی است. با استفاده از درون دستگاه، کاربران می‌توانند مطمئن باشند که اطلاعات خصوصی به صورت محلی در دستگاه پردازش می‌شوند بدون اینکه هیچ یک از داده‌های آنها به فضای ابری ارسال شود.

علاوه بر این، Gemini Nano 4 قابلیت‌های مدل‌سازی چندوجهی را بهبود بخشیده است، به خصوص برای وظایف درک تصویر مانند OCR و استخراج داده‌های بصری، که آن را به یک راه‌حل عالی برای وظایفی مانند استخراج اطلاعات از رسیدها تبدیل می‌کند.

برای این مورد استفاده، اعلان، تصویری از رسید را تجزیه و تحلیل می‌کند و اطلاعاتی مانند: عنوان تولید شده، مبلغ خرج شده و دسته هزینه را به عنوان خروجی ارائه می‌دهد. برای اطمینان از اینکه مدل، اطلاعات را در قالب دلخواه نمایش می‌دهد، می‌توانیم از API خروجی ساختاریافته ML Kit برای خروجی یکپارچه یک شیء داده Kotlin که تعریف می‌کنیم، استفاده کنیم.

// 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

ورودی چندوجهی

در نهایت، برای کمک به کاربران در ضبط یادداشت‌های صوتی در طول سفر، بیایید یک ویژگی یادداشت‌های صوتی کاملاً روی دستگاه بسازیم. با استفاده از API تشخیص گفتار ML Kit ، کاربران را قادر خواهیم ساخت تا یادداشت‌های صوتی کوتاهی را ضبط کنند که به طور خودکار به متن تبدیل می‌شوند. با متن تبدیل شده، از API Prompt ML Kit برای شناسایی فعالیت سفر مرتبط با یادداشت صوتی ضبط شده استفاده خواهیم کرد و به کاربران اجازه می‌دهیم به راحتی سفر خود را در حین پیمایش برنامه سفر خلاصه کنند.

تصویر_20260702_115529.png
برنامه سفر تعطیلات رومی، گزیده‌هایی از نت‌های صوتی را نشان می‌دهد.

رابط برنامه‌نویسی تشخیص گفتار ML Kit GenAI به شما امکان می‌دهد محتوای صوتی را با استفاده از دو حالت مجزا، به‌طور کامل روی دستگاه به متن تبدیل کنید. حالت پایه از یک مدل تشخیص گفتار سنتی روی دستگاه استفاده می‌کند و در اکثر دستگاه‌های اندروید با سطح API 31 و بالاتر در دسترس است. حالت پیشرفته از Gemini Nano برای ارائه پوشش زبانی گسترده‌تر و کیفیت بهتر استفاده می‌کند و در حال حاضر در دستگاه‌های Pixel 10 پشتیبانی می‌شود.

برای این ویژگی، ما API تشخیص گفتار را با API اعلان GenAI کیت یادگیری ماشین ترکیب می‌کنیم:

// 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)
}

نتیجه‌گیری

با استفاده از رابط‌های برنامه‌نویسی کاربردی GenAI کیت ML، ما توانستیم از Gemini Nano برای توسعه ویژگی‌های هوشمند کاملاً روی دستگاه برای برنامه JetPacker بهره ببریم و یک تجربه کاربری بهبود یافته را بدون هیچ گونه هزینه ابری اضافی ارائه دهیم.

کد منبع کامل Jetpacker را در Github بررسی کنید و ویدیوی «ساخت برنامه‌های هوشمند اندروید با هوش مصنوعی گوگل» را تماشا کنید تا در مورد نحوه ادغام مستقیم ویژگی‌های هوشمند در برنامه خود با استفاده از مدل‌های روی دستگاه، استدلال مبتنی بر ابر و جدیدترین چارچوب‌های عامل‌گرا بیشتر بدانید.

بیشتر بدانید

بخش‌های دیگر این مجموعه پست‌های وبلاگ را ببینید:

بخش اول: معرفی اپلیکیشن و بررسی اجمالی آن

بخش دوم (همین پست!):   هوش درون دستگاهی. برای ساخت ویژگی‌های اولویت‌دار حریم خصوصی مانند خلاصه‌سازی برنامه سفر، تجزیه رسید و پردازش صوتی محلی، به بررسی عمیق APIهای GenAI کیت ML و Gemini Nano بپردازید.

قسمت ۳:   استدلال ترکیبی و ابری. نحوه استفاده از منطق هوش مصنوعی فایربیس را برای پایه‌ریزی پاسخ‌های LLM در داده‌های دنیای واقعی مانند نقشه‌های گوگل و زمینه وب بررسی کنید.

بخش ۴: یکپارچه‌سازی سیستم. یکپارچه‌سازی با سیستم هوشمند اندروید با استفاده از AppFunctions.

بخش ۵ (به زودی): گردش‌های کاری درون‌برنامه‌ای. برنامه را با یک دستیار رزرو سرتاسری که توسط A2UI و ADK پشتیبانی می‌شود، گسترش دهید.

به اطلاعات بیشتری در مورد توسعه اندروید علاقه دارید؟ توسعه‌دهندگان اندروید را در یوتیوب یا لینکدین دنبال کنید!

تمام قطعه کدهای موجود در این پست وبلاگ، از اطلاعیه حق نشر زیر پیروی می‌کنند:

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
نوشته شده توسط:
ادامه مطلب