ברוכים השבים לסדרת הפוסטים בבלוג בנושא "פיתוח אפליקציות חכמות ל-Android". בסדרה הזו אנחנו לוקחים אפליקציית Android בסיסית והופכים אותה לחוויה מותאמת אישית, חכמה ומבוססת-סוכן. בפוסט הקודם הצגנו את Jetpacker, אפליקציית ההדגמה שבה נשתמש לאורך הסדרה הזו.
בפוסט הזה בבלוג נסביר איך להשתמש ב-Gemini Nano באמצעות Prompt API של ML Kit כדי ליצור תכונות חכמות במכשיר.
פיתוח תכונות חכמות במכשיר מתייחס ליכולת לעבד הנחיות ונתונים ישירות במכשיר בלי לשלוח נתונים לשרת. יש לכך כמה יתרונות:
- עיבוד נתוני המשתמשים יכול להתבצע באופן מקומי במכשיר, וכך נשמרת פרטיות המשתמשים
- הפונקציונליות של המודל אמינה גם כשאין חיבור לאינטרנט או כשהחיבור לא יציב
- אין עלות נוספת להסקת מסקנות בענן, כי הכול פועל בחומרה של המשתמש
בהתחשב ביתרונות של עיבוד נתונים במכשיר, זיהינו שלוש תכונות שאפשר להוסיף ל-Jetpacker כדי לשפר את חוויית המשתמש: סיכום מסלולי טיול, ניהול הוצאות והקלטת תזכורות קוליות.
סיכום מותאם אישית של טקסטים קצרים באיכות גבוהה
במסך מסלול הטיול מוצגת למשתמשים סקירה מהירה של כל הפעילויות בטיול מסוים. המסך הזה מכיל הרבה מידע, ולכן קל מאוד ללכת בו לאיבוד. כדי לעזור למשתמשים להתכונן בלי להרגיש מוצפים, אפשר להוסיף למעלה קטע 'מתכוננים לנסיעה'.
אם מזינים תוכנית נסיעה ומבקשים מ-LLM לסכם אותה, אפשר ליצור סיכום מהיר של הנסיעה, כולל טיפים לאריזה וביטויים מקומיים שימושיים. זהו תרחיש שימוש מצוין למודל במכשיר, מכמה סיבות:
- ביצועים ואיכות: גם טקסט הקלט וגם טקסט הפלט קצרים יחסית. כך אפשר לצפות שהביצועים והאיכות של פתרון במכשיר יהיו ברמה של מודלים חזקים יותר בענן.
- יכולת הרחבה: העברת ההסקה למכשיר מאפשרת לנו להרחיב את התכונה הזו מכמה משתמשים למיליונים, בלי לדאוג לניהול של עלויות הסקה בענן.
- זמן אחזור נמוך ומהימנות: הסקת מסקנות במכשיר מבטיחה זמן אחזור נמוך, ומספקת חוויה מהימנה גם כשהמשתמשים במצב אופליין.
כדי לבנות באמצעות מודל במכשיר, אנחנו משתמשים ב-Gemini Nano, המודל הכי יעיל של Google שעבר אופטימיזציה למכשירים ניידים. Gemini Nano הוצג לראשונה לפני כמה שנים, ועכשיו הוא פועל ביותר מ-140 מיליון מכשירים. הגרסה העדכנית של המודל, Gemini Nano 4, מבוססת על ארכיטקטורת הבסיס של מודל Gemma 4 שהושק לאחרונה, ועברה אופטימיזציה נוספת כדי למקסם את יעילות הסוללה והביצועים.
באמצעות Prompt API של ML Kit, אנחנו יכולים לנצל את היכולות החדשות של מודל Gemini Nano 4 כדי ליצור אב טיפוס של התכונות במכשיר. ניצור הנחיה שכוללת את מסלול הטיול ונבקש מהמודל ליצור סיכום עם טיפים להכנה.
כדי למצוא את ההנחיה האופטימלית, בדרך כלל צריך לבצע כמה איטרציות, והאפליקציה AICore מושלמת לשלב הזה בתהליך. אחרי שמצטרפים לגרסת הטרום-ההשקה למפתחים של AICore, אפשר להוריד מודלים בגרסת טרום-ההשקה כמו Gemini Nano 4 כדי לבדוק הנחיות ולראות את התוצאות הצפויות של המודל. אחרי כמה ניסיונות עם ההנחיה, הצלחנו לשפר את מהירות התגובה מ-13 שניות לפחות מ-2 שניות. כאן אפשר לראות את ההטמעה הסופית של הקוד ואת ההנחיה.
[ASSET HERE - FILE TOO LARGE ATM]
עיבוד מקומי של קלט של משתמשים רגיש
בשלב הבא, כדי לעזור למשתמשים ליהנות מהטיול עוד יותר, ניצור כלי פשוט לניהול הוצאות שיבטל את הצורך בעבודה ידנית של מיון קבלות וחישוב תקציבים.
יכול להיות שקבלות יכילו מידע רגיש כמו מספר כרטיס אשראי וכתובות, ולכן זה עוד מקרה שימוש מצוין לפתרון במכשיר. בעזרת התכונה 'במכשיר', המשתמשים יכולים להיות בטוחים שהמידע הפרטי יעבור עיבוד באופן מקומי במכשיר, בלי שום נתונים שלהם יישלחו לענן.
בנוסף, Gemini Nano 4 כולל יכולות משופרות של מודל למולטי-מודאליות, במיוחד למשימות של הבנת תמונות כמו OCR וחילוץ נתונים חזותיים, מה שהופך אותו לפתרון מצוין למשימות כמו חילוץ מידע מקבלות.
בתרחיש השימוש הזה, ההנחיה תנתח תמונה של הקבלה ותפיק מידע כמו: כותרת שנוצרה, סכום ההוצאה וקטגוריית ההוצאה. כדי לוודא שהמודל יפיק את המידע בפורמט המועדף, אפשר להשתמש ב-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’s Speech Recognition API, נאפשר למשתמשים להקליט תזכורות קוליות קצרות שיתומללו אוטומטית לטקסט. בעזרת הטקסט המתומלל, נשתמש ב-Prompt API של ML Kit כדי לזהות איזו פעילות בטיול משויכת להערה הקולית שהוקלטה, וכך המשתמשים יוכלו לסכם בקלות את הטיול בזמן שהם גוללים במסלול הטיול.
ML Kit GenAI Speech Recognition API מאפשר לתמלל תוכן אודיו לטקסט באופן מלא במכשיר באמצעות שני מצבים שונים. במצב הבסיסי נעשה שימוש במודל מסורתי לזיהוי דיבור במכשיר, והוא זמין ברוב מכשירי Android עם רמת API 31 ומעלה. מצב מתקדם משתמש ב-Gemini Nano כדי להציע כיסוי שפה רחב יותר ואיכות טובה יותר, והוא נתמך כרגע במכשירי Pixel 10.
כדי ליצור את התכונה שלנו, אנחנו משלבים את Speech Recognition API (ממשק ה-API לזיהוי דיבור) עם ML Kit GenAI Prompt API (ממשק ה-API של ML Kit להנחיות ל-AI גנרטיבי):
// 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)
}סיכום
באמצעות ממשקי ה-API של GenAI ב-ML Kit, הצלחנו לנצל את Gemini Nano כדי לפתח תכונות חכמות שפועלות באופן מלא במכשיר עבור אפליקציית JetPacker, ולספק חוויית משתמש משופרת ללא עלויות נוספות בענן.
אפשר לעיין בקוד המקור המלא של Jetpacker ב-GitHub, ולצפות בסרטון Build Intelligent Android apps with Google’s AI כדי לקבל מידע נוסף על שילוב תכונות חכמות ישירות באפליקציה באמצעות מודלים במכשיר, ניתוח מבוסס-ענן ומסגרות העבודה העדכניות ביותר של סוכנים.
מידע נוסף
כדאי לקרוא גם את החלקים האחרים בסדרת הפוסטים הזו בבלוג:
חלק 1: מבוא לאפליקציה וסקירה כללית.
חלק 2 (הפוסט הזה): בינה מובנית במכשיר. הסבר מפורט על ממשקי ה-API של AI גנרטיבי ב-ML Kit ועל Gemini Nano, כדי ליצור תכונות ששומרות על הפרטיות כמו סיכום מסלול נסיעה, ניתוח קבלות ועיבוד אודיו מקומי.
חלק 3: הסברים על ענן היברידי וענן. במאמר הזה נסביר איך להשתמש ב-Firebase AI Logic כדי לעגן תשובות של מודלים גדולים של שפה (LLM) בנתונים מהעולם האמיתי, כמו מפות Google והקשר באינטרנט.
חלק 4: שילוב מערכות. שילוב עם מערכת ה-AI של Android באמצעות AppFunctions.
חלק 5 (בקרוב): תהליכי עבודה מבוססי-סוכנים בתוך האפליקציה. הרחבת האפליקציה באמצעות עוזר הזמנות מקצה לקצה שמבוסס על A2UI ו-ADK.
רוצים לקבל מידע נוסף על פיתוח ל-Android? אתם יכולים לעקוב אחרי מפתחי Android ב-YouTube או ב-LinkedIn.
כל קטעי הקוד בפוסט הזה בבלוג כוללים את ההודעה הבאה על זכויות יוצרים:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
מדריכיםברוכים השבים לסדרת הפוסטים בבלוג בנושא "פיתוח אפליקציות חכמות ל-Android". בסדרה הזו אנחנו לוקחים אפליקציה בסיסית ל-Android והופכים אותה לחוויה מותאמת אישית, חכמה ודינמית.
Thomas Ezan, Jolanda Verhoef, Caren Chang • משך הקריאה: 8 דקות -
מדריכיםJetpacker היא אפליקציה טכנית לדוגמה שהצוות שלנו בנה מאפס לכנס Google I/O של השנה (האפליקציה נבנתה באמצעות Antigravity). המהות של Jetpacker היא לעזור למשתמשים לתכנן את ההרפתקה הגדולה הבאה שלהם, לחקור אותה וליהנות ממנה.
Jolanda Verhoef • משך הקריאה: 4 דקות -
מדריכיםברוכים השבים לסדרת הפוסטים בבלוג בנושא "פיתוח אפליקציות חכמות ל-Android". בסדרה הזו אנחנו לוקחים אפליקציה בסיסית ל-Android והופכים אותה לחוויה מותאמת אישית, חכמה ודינמית. בפוסט הקודם הסברנו איך להשתמש ב-Firebase AI Logic כדי ליצור תכונות AI שמתארחות בענן ותכונות AI היברידיות.
Ben Weiss • משך הקריאה: 6 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?