Akıllı Android uygulamaları geliştirme: Cihaz üzerinde çıkarım
Okuma süresi 6 dakika
Temel bir Android uygulamasını kişiselleştirilmiş, akıllı ve etkileşimli bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" blog yayınları serisine tekrar hoş geldiniz. Önceki gönderimizde, bu seride kullanacağımız demo uygulaması Jetpacker'ı tanıtmıştık.
Bu blog yayınında, cihaz üzerinde akıllı özellikler oluşturmak için ML Kit'in Prompt API'si aracılığıyla Gemini Nano'yu nasıl kullanabileceğinizi açıklayacağız.
Cihaz üzerinde akıllı özellikler oluşturma, verileri bir sunucuya göndermeden doğrudan cihaz üzerinde istemleri ve verileri işleme özelliğini ifade eder. Bu durumun bazı avantajları vardır:
- Kullanıcı verileri, kullanıcı gizliliğini koruyarak cihazda yerel olarak işlenebilir.
- Modelin işlevselliği, düzensiz veya hiç internet bağlantısı olmasa bile güvenilirdir.
- Her şey kullanıcının donanımında çalıştığından ek bulut çıkarımı maliyeti yoktur.
Cihaz üzerinde yapay zeka kullanımının avantajlarını göz önünde bulundurarak Jetpacker'a eklenmesi gereken üç özellik belirledik: Seyahat planlarını özetleme, harcamaları yönetme ve sesli not alma. Bu özellikler, kullanıcı deneyimini iyileştirecek.
Kısa metinlerin yüksek kaliteli ve özel özetleri
Seyahat planı ekranı, kullanıcılara belirli bir gezideki tüm etkinliklere dair hızlı bir genel bakış sunar. Bu ekranda çok fazla bilgi yer aldığından, ekran kısa sürede karmaşık bir hâl alabilir. Kullanıcıların kendilerini bunalmış hissetmeden hazırlanmalarına yardımcı olmak için en üste "Seyahatinize hazırlanın" bölümünü ekleyebiliriz.
Bir seyahat planı girip LLM'den bunu özetlemesini isteyerek geziyle ilgili hızlı bir özetin yanı sıra paketleme ipuçları ve faydalı yerel ifadeler oluşturabiliriz. Bu, cihaz üzerinde model için çeşitli nedenlerle mükemmel bir kullanım alanıdır:
- Performans ve kalite: Hem giriş hem de çıkış metni nispeten kısadır. Bu sayede, cihaz üzerinde çözümün performans ve kalitesinin daha güçlü bulut modelleriyle aynı seviyede olmasını bekleyebiliriz.
- Ölçeklenebilirlik: Çıkarım işlemini cihaz üzerinde yapma, artan bulut çıkarım maliyetlerini yönetme konusunda endişelenmeden bu özelliği birkaç kullanıcıdan milyonlarca kullanıcıya ölçeklendirmemize olanak tanır.
- Düşük gecikme süresi ve güvenilirlik: Cihaz üzerinde çıkarım, düşük gecikme süresini garanti ederek kullanıcılar çevrimdışıyken bile güvenilir bir deneyim sunar.
Cihaz üzerinde geliştirme için Google'ın mobil cihazlar için optimize edilmiş en verimli modeli olan Gemini Nano'yu kullanırız. Birkaç yıl önce kullanıma sunulan Gemini Nano, şu anda 140 milyondan fazla cihazda çalışıyor. Modelin en yeni sürümü olan Gemini Nano 4, kısa süre önce kullanıma sunulan Gemma 4 modelinin mimari temeli üzerine kurulmuştur ve maksimum pil ile performans verimliliği için daha da optimize edilmiştir.
ML Kit'in Prompt API'sini kullanarak cihaz üzerinde özelliklerimizin prototipini oluşturmak için Gemini Nano 4'ün yeni model özelliklerinden yararlanabiliriz. Gezinin seyahat planını içeren bir istem oluşturup modelden hazırlıkla ilgili ipuçlarının yanı sıra bir özet oluşturmasını isteyeceğiz.
En uygun istemi bulmak genellikle birkaç yineleme gerektirir. AICore uygulaması, sürecin bu adımı için mükemmeldir. AICore için geliştirici önizleme seçeneğini etkinleştirdikten sonra, istemleri test etmek ve modelin beklenen çıkışlarını görmek için Gemini Nano 4 gibi önizleme modellerini indirebiliriz. İstemde birkaç yineleme yaparak yanıt hızını 13 saniyeden 2 saniyenin altına düşürmeyi başardık. Son kod uygulamasına ve isteme buradan göz atın.
[ASSET HERE - FILE TOO LARGE ATM]
Hassas kullanıcı girişleri için yerel işleme
Ardından, kullanıcıların seyahatlerinden daha fazla keyif almalarına yardımcı olmak için makbuzları ayıklama ve bütçeleri hesaplama gibi manuel işlemleri ortadan kaldıran basit bir gider yöneticisi oluşturacağız.
Makbuzlar kredi kartı numarası ve adres gibi hassas bilgiler içerebileceğinden bu da cihaz üzerinde çözüm için bir başka harika kullanım alanıdır. Cihaz üzerinde işleme sayesinde kullanıcılar, özel bilgilerinin buluta gönderilmeden cihaz üzerinde yerel olarak işleneceğinden emin olabilir.
Ayrıca Gemini Nano 4, çok formatlılık için geliştirilmiş model özelliklerine sahiptir. Özellikle OCR ve görsel veri çıkarma gibi görüntü anlama görevlerinde daha iyi performans gösterir. Bu nedenle, makbuzlardan bilgi çıkarma gibi görevler için mükemmel bir çözümdür.
Bu kullanım alanında istem, makbuzun resmini analiz edecek ve oluşturulan başlık, harcanan tutar ve gider kategorisi gibi bilgileri çıkış olarak verecek. Modelin bilgileri tercih edilen biçimde vermesini sağlamak için ML Kit'in Yapılandırılmış Çıkış API'sini kullanarak tanımladığımız bir Kotlin veri nesnesini sorunsuz bir şekilde çıkış olarak verebiliriz.
// 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Çok formatlı giriş
Son olarak, kullanıcıların gezi sırasında sesli notlar kaydetmesine yardımcı olmak için tamamen cihaz üzerinde çalışan bir sesli not özelliği oluşturalım. ML Kit'in Konuşma Tanıma API'sini kullanarak kullanıcıların, metne otomatik olarak dönüştürülen kısa sesli notlar kaydetmesini sağlayacağız. ML Kit'in Prompt API'sini kullanarak, kaydedilen sesli notla hangi gezi etkinliğinin ilişkilendirildiğini belirleriz. Böylece kullanıcılar, gezi planında ilerlerken gezilerini kolayca özetleyebilir.
ML Kit GenAI Speech Recognition API, iki farklı mod kullanarak ses içeriklerini tamamen cihaz üzerinde metne dönüştürmenize olanak tanır. Temel mod, geleneksel bir cihaz üzerinde konuşma tanıma modeli kullanır ve API düzeyi 31 ile daha yüksek olan çoğu Android cihazda kullanılabilir. Gelişmiş mod, daha geniş dil desteği ve daha iyi kalite sunmak için Gemini Nano'yu kullanır ve şu anda Pixel 10 cihazlarda desteklenmektedir.
Özelliğimiz için Speech Recognition API'yi ML Kit GenAI Prompt API ile birleştiriyoruz:
// 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)
}Sonuç
ML Kit'in üretken yapay zeka API'lerini kullanarak Gemini Nano'dan yararlanıp JetPacker uygulaması için tamamen cihaz üzerinde çalışan akıllı özellikler geliştirdik ve ek bulut maliyeti olmadan daha iyi bir kullanıcı deneyimi sunduk.
Github'da Jetpacker'ın kaynak kodunun tamamına göz atın ve cihaz üzerinde modeller, bulut destekli akıl yürütme ve en yeni aracı çerçevelerini kullanarak akıllı özellikleri doğrudan uygulamanıza nasıl entegre edeceğiniz hakkında daha fazla bilgi edinmek için Google'ın yapay zekasıyla akıllı Android uygulamaları geliştirme başlıklı videoyu izleyin.
Daha fazla bilgi
Bu blog yayını dizisinin diğer bölümlerine göz atın:
1. Bölüm: Uygulamanın tanıtımı ve genel bakış.
2. Bölüm (bu gönderi!): Cihaz üzerinde zeka. Seyahat planı özetleme, makbuz ayrıştırma ve yerel ses işleme gibi gizliliğe öncelik veren özellikler oluşturmak için ML Kit'in üretken yapay zeka API'lerini ve Gemini Nano'yu ayrıntılı olarak inceleyin.
3. bölüm: Karma ve bulut muhakemesi. LLM yanıtlarını Google Haritalar ve web bağlamı gibi gerçek dünya verilerine dayandırmak için Firebase AI Logic'i nasıl kullanacağınızı keşfedin.
4. Bölüm: Sistem entegrasyonu. AppFunctions kullanarak Android Intelligence sistemiyle entegrasyon.
5. bölüm (yakında): Uygulama içi ajan tabanlı iş akışları. Uygulamayı A2UI ve ADK destekli uçtan uca rezervasyon asistanıyla genişletin.
Android geliştirme hakkında daha fazla bilgi edinmek ister misiniz? Android Developers'ı YouTube veya LinkedIn'de takip edin.
Bu blog yayınındaki tüm kod snippet'leri aşağıdaki telif hakkı bildirimine tabidir:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
"Nasıl yapılır?" rehberleriTemel bir Android uygulamasını kişiselleştirilmiş, akıllı ve etkileşimli bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" blog yayınları serisine tekrar hoş geldiniz.
Thomas Ezan, Jolanda Verhoef, Caren Chang • Okuma süresi 8 dakika -
"Nasıl yapılır?" rehberleriJetpacker, ekibimizin bu yılki Google I/O için sıfırdan oluşturduğu teknik bir tanıtım uygulamasıdır (Antigravity kullanılarak oluşturulmuştur). Jetpacker, kullanıcıların bir sonraki büyük macerasını planlamasına, keşfetmesine ve maceradan keyif almasına yardımcı olur.
Jolanda Verhoef • Okuma süresi 4 dakika -
"Nasıl yapılır?" rehberleriTemel bir Android uygulamasını kişiselleştirilmiş, akıllı ve etkileşimli bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" blog yayınları serisine tekrar hoş geldiniz. Önceki yayınımızda, bulutta barındırılan ve karma yapay zeka özellikleri oluşturmak için Firebase AI Logic'ten nasıl yararlanılacağını ele almıştık.
Ben Weiss • Okuma süresi 6 dakika
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.