مرحبًا بك مرة أخرى في سلسلة منشورات المدونة “إنشاء تطبيقات Android الذكية” حيث نأخذ تطبيق Android أساسيًا ونحوله إلى شخصية وذكية, و وكيل خبرة. في منشورنا السابق قدمنا Jetpacker، التطبيق التجريبي الذي سنستخدمه خلال هذه السلسلة.
في منشور المدونة هذا، سنشارك كيف يمكنك استخدام Gemini Nano من خلال واجهة برمجة تطبيقات ML Kit’s Prompt API لإنشاء ميزات ذكية على الجهاز.
يشير إنشاء ميزات ذكية على الجهاز إلى القدرة على معالجة المطالبات والبيانات مباشرة على الجهاز دون إرسال البيانات إلى الخادم. وهذا يقدم بعض المزايا:
- يمكن معالجة بيانات المستخدم محليا على الجهاز، مع الحفاظ على خصوصية المستخدم
- وظيفة النموذج هي موثوق حتى مع وجود اتصال متقطع أو عدم وجود اتصال بالإنترنت
- لا يوجد استنتاج سحابة إضافية يكلفلأن كل شيء يعمل على أجهزة المستخدم
مع وضع فوائد الاستخدام على الجهاز في الاعتبار، حددنا ثلاث ميزات لإضافتها في Jetpacker يمكنها تحسين تجربة المستخدم: تلخيص مسارات الرحلات، وإدارة النفقات، وتدوين الملاحظات الصوتية.
الميزات الموجودة على الجهاز في Jetpacker: تلخيص مسارات الرحلات وإدارة النفقات والملاحظات الصوتية
تلخيص عالي الجودة للنصوص القصيرة
توفر شاشة خط سير الرحلة للمستخدمين نظرة عامة سريعة على جميع الأنشطة الخاصة برحلة معينة. وبما أن هذه الشاشة تحتوي على الكثير من المعلومات، فإنها يمكن أن تصبح مرهقة بسرعة. لمساعدة المستخدمين على الاستعداد دون الشعور بالإرهاق، يمكننا إضافة “الاستعداد لرحلتك“القسم في الأعلى.

تتلخص رحلة باريس الرومانسية في مغامرة باريسية كلاسيكية تمزج بين الفن والمعالم السياحية والطعام اللذيذ. يتم أيضًا إضافة نصيحة وبعض العبارات المفيدة.
من خلال إدخال خط سير الرحلة ومطالبة ماجستير إدارة الأعمال بتلخيصه، يمكننا إنشاء ملخص سريع للرحلة بالإضافة إلى نصائح التعبئة والعبارات المحلية المفيدة. تعد هذه حالة استخدام رائعة للطراز الموجود على الجهاز لعدة أسباب:
- الأداء والجودة: كل من نص الإدخال والإخراج قصير نسبيًا. وبهذا، يمكننا أن نتوقع أن يكون أداء وجودة الحل الموجود على الجهاز على قدم المساواة مع النماذج السحابية الأكثر قوة.
- قابلية التوسع: يتيح لنا تحويل الاستدلال على الجهاز توسيع نطاق هذه الميزة من عدد قليل من المستخدمين إلى الملايين دون القلق بشأن إدارة تكاليف الاستدلال السحابي المتزايدة.
- الكمون المنخفض والموثوقية: يضمن الاستدلال على الجهاز زمن وصول منخفض، مما يوفر تجربة موثوقة حتى عندما يكون المستخدمون غير متصلين بالإنترنت.
للبناء على الجهاز، نستخدم الجوزاء نانو، نموذج Google الأكثر كفاءة والمحسّن لأجهزة الجوال. تم تقديم Gemini Nano لأول مرة منذ بضع سنوات، ويعمل الآن على أكثر من 140 مليون جهاز. تم بناء أحدث إصدار من الطراز، Gemini Nano 4، على الأساس المعماري لنموذج Gemma 4 الذي تم إصداره مؤخرًا، وتم تحسينه أيضًا لتحقيق أقصى قدر من كفاءة البطارية والأداء.
استخدام ML Kit واجهة برمجة التطبيقات السريعة، يمكننا الاستفادة من إمكانات النموذج الجديد لـ Gemini Nano 4 لوضع نماذج أولية لميزاتنا الموجودة على الجهاز. سنقوم بإنشاء مطالبة تتضمن خط سير الرحلة ونطلب من النموذج إنشاء ملخص بالإضافة إلى أي نصائح للتحضير.
// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// Define the configuration for Gemini Nano 4 E2B preview model
val previewFastConfig = generationConfig {
modelConfig = modelConfig {
releaseStage = ModelReleaseStage.PREVIEW
preference = ModelPreference.FAST
}
}
val geminiNano2BPreviewModel = Generation.getClient(previewFastConfig)
val tripItinerary = ...
val getReadyForYourTripSummary = geminiNano2BPreviewModel
.generateContent("Given this trip itinerary: $tripItinerary,
generate the following: overall vibe, tips on how to prepare for this
trip, and common short phrases to learn for the trip.")
عادةً ما يتطلب العثور على الموجه الأمثل بعض التكرار، ويعتبر تطبيق AICore مثاليًا لهذه الخطوة في العملية. بعد الاشتراك في خيار معاينة المطور لـ AICore، يمكننا تنزيل نماذج المعاينة مثل Gemini Nano 4 لاختبار المطالبات ورؤية المخرجات المتوقعة للنموذج. مع بعض التكرارات على الموجه، تمكنا من تحسين سرعة الاستجابة من 13 ثانية إلى أقل من ثانيتين! تحقق من تنفيذ الكود النهائي والمطالبة هنا.

لقد أدى التكرار الأول لمطالبتنا إلى توليد عدد كبير جدًا من الرموز المميزة، وقد ساعد تحسينها في الحفاظ على سرعة الاستجابات وفي صلب الموضوع.
المعالجة المحلية لإدخال المستخدم الحساسة
بعد ذلك، لمساعدة المستخدمين على الاستمتاع برحلتهم بشكل أكبر، سنقوم بإنشاء مدير نفقات بسيط يتولى العمل اليدوي بعيدًا عن فرز الإيصالات وحساب الميزانيات.

عند التقاط صورة لفاتورة المطعم، يتم تحليل البيانات وعرضها في شاشة نظرة عامة على النفقات في التطبيق.
نظرًا لأن الإيصالات قد تحتوي على معلومات حساسة مثل رقم بطاقة الائتمان والعناوين، فهذه حالة استخدام رائعة أخرى للحل الموجود على الجهاز. ومع وجوده على الجهاز، يمكن للمستخدمين أن يكونوا واثقين من أنه ستتم معالجة المعلومات الخاصة محليًا على الجهاز دون إرسال أي من بياناتهم إلى السحابة.
بالإضافة إلى ذلك، قام Gemini Nano 4 بتحسين قدرات النموذج للوسائط المتعددة، خاصة لمهام فهم الصور مثل التعرف الضوئي على الحروف واستخراج البيانات المرئية، مما يجعله حلاً رائعًا لمهام مثل استخراج المعلومات من الإيصالات.
بالنسبة لحالة الاستخدام هذه، ستقوم المطالبة بتحليل صورة الإيصال وإخراج المعلومات مثل: العنوان الذي تم إنشاؤه والمبلغ الذي تم إنفاقه وفئة النفقات. للتأكد من أن النموذج يقوم بإخراج المعلومات بالتنسيق المفضل، يمكننا استخدام واجهة برمجة التطبيقات (Structured Output 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
مدخلات متعددة الوسائط
وأخيرًا، لمساعدة المستخدمين على تسجيل المذكرات الصوتية أثناء الرحلة، فلننشئ ميزة الملاحظات الصوتية بالكامل على الجهاز. باستخدام واجهة برمجة تطبيقات التعرف على الكلام الخاصة بـ ML Kit، سنمكن المستخدمين من تسجيل ملاحظات صوتية قصيرة يتم تحويلها تلقائيًا إلى نص. باستخدام النص المكتوب، سنستخدم واجهة برمجة تطبيقات ML Kit’s Prompt لتحديد نشاط الرحلة المرتبط بالملاحظة الصوتية المسجلة، مما يسمح للمستخدمين بتلخيص رحلتهم بسهولة أثناء التمرير عبر خط سير الرحلة.

يعرض خط سير العطلة الرومانية مقتطفات من الملاحظات الصوتية.
تسمح لك واجهة برمجة تطبيقات التعرف على الكلام ML Kit GenAI بنسخ المحتوى الصوتي إلى نص بالكامل على الجهاز باستخدام وضعين متميزين. الوضع الأساسي يستخدم نموذجًا تقليديًا للتعرف على الكلام على الجهاز، وهو متاح على معظم أجهزة Android ذات مستوى API 31 والإصدارات الأحدث. الوضع المتقدم يستخدم Gemini Nano لتقديم تغطية لغوية أوسع وجودة أفضل، وهو مدعوم حاليًا على أجهزة Pixel 10.
بالنسبة لميزتنا، نقوم بدمج واجهة برمجة تطبيقات التعرف على الكلام مع واجهة برمجة تطبيقات ML Kit GenAI Prompt API:
// 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) {
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 Kit، تمكنا من الاستفادة من Gemini Nano لتطوير ميزات ذكية كاملة على الجهاز لتطبيق JetPacker، وتوفير تجربة مستخدم محسنة دون أي تكاليف سحابية إضافية.
تحقق من الكود المصدري الكامل لـ Jetpacker على Github، وشاهد الفيديو قم ببناء تطبيقات Android الذكية باستخدام الذكاء الاصطناعي من Google لمعرفة المزيد حول كيفية دمج الميزات الذكية مباشرة في تطبيقك باستخدام النماذج الموجودة على الجهاز، والتفكير المدعوم بالسحابة، وأحدث أطر العمل الوكيلة.
يتعلم أكثر
تحقق من الأجزاء الأخرى من سلسلة منشورات المدونة هذه:
الجزء 1: مقدمة عن التطبيق ونظرة عامة رفيعة المستوى.
الجزء الثاني (هذا المنشور!): الذكاء على الجهاز. تعمق في واجهات برمجة تطبيقات GenAI الخاصة بـ ML Kit وGemini Nano لإنشاء ميزات الخصوصية أولاً مثل تلخيص خط سير الرحلة، وتحليل الإيصالات، ومعالجة الصوت المحلي.
الجزء 3: المنطق الهجين والسحابي. اكتشف كيفية استخدام Firebase AI Logic لربط إجابات LLM ببيانات العالم الحقيقي مثل خرائط Google وسياق الويب.
الجزء 4: تكامل النظام. التكامل مع نظام Android الذكي باستخدام AppFunctions.
الجزء 5 (قريبًا): سير العمل الوكيل داخل التطبيق. قم بتوسيع التطبيق باستخدام مساعد الحجز الشامل المدعوم من A2UI وADK.
هل أنت مهتم بمعرفة المزيد عن تطوير Android؟ اتبع مطوري Android على YouTube أو LinkedIn!
تتبع جميع مقتطفات التعليمات البرمجية الموجودة في منشور المدونة هذا إشعار حقوق الطبع والنشر التالي:
Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0

