歡迎回到「建構智慧型 Android 應用程式」系列網誌文章。我們將以基本 Android 應用程式為基礎,逐步改造為個人化、智慧型和代理式體驗。在上一篇文章中,我們介紹了 Jetpacker,也就是本系列文章中會用到的示範應用程式。
在這篇網誌文章中,我們將說明如何透過 ML Kit 的 Prompt API 使用 Gemini Nano,建構智慧型裝置端功能。
建構裝置端智慧功能是指直接在裝置上處理提示和資料,不必將資料傳送至伺服器。這有幾個優點:
- 使用者資料可在裝置本機處理,保護使用者隱私
- 即使網路連線不穩或沒有網路連線,模型功能仍可靠
- 由於所有作業都在使用者的硬體上執行,因此不會產生額外的雲端推論費用
考量到裝置端 AI 的優勢,我們決定在 Jetpacker 中加入三項功能,提升使用者體驗:總結行程、管理支出及錄製語音記事。
根據簡短文字生成高品質摘要
行程畫面可讓使用者快速查看特定行程的所有活動。由於這個畫面包含大量資訊,因此很快就會讓人感到眼花撩亂。為協助使用者做好前置準備,但又不會感到不知所措,我們可以在頂端新增「為旅程做好前置準備」專區。
輸入行程並要求 LLM 製作摘要,即可快速生成行程摘要,以及打包提示和實用的當地用語。由於下列原因,這項用途非常適合使用裝置端模型:
- 效能和品質:輸入和輸出文字都相對較短。因此,我們預期裝置端解決方案的效能和品質,將能與功能更強大的雲端模型相提並論。
- 可擴充性:將推論作業轉移到裝置端,可讓我們將這項功能從少數使用者擴展到數百萬使用者,不必擔心管理不斷增加的雲端推論成本。
- 低延遲和可靠性:裝置端推論可確保低延遲,即使使用者離線也能提供可靠的體驗。
如要使用裝置端模型建構應用程式,我們會使用 Gemini Nano,這是 Google 專為行動裝置最佳化調整的高效模型。Gemini Nano 於幾年前首次推出,目前已在超過 1.4 億部裝置上執行。最新版模型 Gemini Nano 4 是以最近發布的 Gemma 4 模型架構為基礎建構而成,並進一步最佳化,可盡量提升電池續航力和效能。
使用 ML Kit 的 Prompt API,我們可以善用 Gemini Nano 4 的新模型功能,為裝置端功能製作原型。我們會建立包含旅遊行程的提示,並要求模型生成摘要和任何準備提示。
通常需要經過幾次疊代,才能找出最佳提示,而 AICore 應用程式非常適合這個步驟。選擇加入 AICore 開發人員預先發布選項後,即可下載 Gemini Nano 4 等預先發布模型,測試提示並查看模型預期輸出內容。經過幾次提示迭代,我們成功將回覆速度從 13 秒提升至 2 秒以下!請參閱這裡的最終程式碼實作和提示。
[ASSET HERE - FILE TOO LARGE ATM]
在本機處理敏感的使用者輸入內容
接著,為了讓使用者更盡情享受旅程,我們將建構簡單的費用管理工具,免去整理收據和計算預算的手動作業。
由於收據可能含有信用卡號碼和地址等私密資訊,因此這也是裝置端解決方案的絕佳用途。有了裝置端 AI,使用者可以放心,私密資訊會在裝置上處理,不會將任何資料傳送至雲端。
此外,Gemini Nano 4 的多模態模型功能也獲得提升,特別是 OCR 和視覺資料擷取等圖像解讀工作,因此非常適合從收據擷取資訊等工作。
在這個用途中,提示會分析收據圖片,並輸出資訊,例如:產生的標題、支出金額和費用類別。為確保模型以偏好的格式輸出資訊,我們可以透過 ML Kit 的結構化輸出 API,順暢輸出我們定義的 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 的 Speech Recognition API,讓使用者錄製簡短語音記事,並自動轉錄為文字。系統會使用 ML Kit 的 Prompt API,根據轉錄的文字判斷錄音記事與哪個行程活動相關聯,讓使用者在捲動瀏覽行程時,輕鬆回顧行程內容。
ML Kit GenAI Speech Recognition API 提供兩種不同模式,可讓您完全在裝置端將音訊內容轉錄為文字。基本模式使用傳統的裝置端語音辨識模型,適用於 API 級別 31 以上的大多數 Android 裝置。進階模式會使用 Gemini Nano,提供更廣泛的語言支援和更優質的翻譯,目前支援 Pixel 10 裝置。
我們的功能結合了 Speech Recognition API 和 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<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)
}結論
我們運用 ML Kit 的 GenAI API,充分發揮 Gemini Nano 的功能,為 JetPacker 應用程式開發完全在裝置端執行的智慧功能,並在不增加任何雲端費用的情況下,提供更優質的使用者體驗。
如要查看 Jetpacker 的完整原始碼,請前往 GitHub,並觀看「使用 Google AI 建構智慧型 Android 應用程式」影片,進一步瞭解如何使用裝置端模型、雲端輔助推論和最新的代理功能架構,直接將智慧型功能整合到應用程式中。
瞭解詳情
歡迎參閱本系列網誌文章的其他部分:
第 1 部分:介紹應用程式並提供概略總覽。
第 2 部分 (就是這篇文章!) 裝置端智慧功能。深入瞭解 ML Kit 的 GenAI API 和 Gemini Nano,建構以隱私權為優先考量的功能,例如行程摘要、收據剖析和本機音訊處理。
第 3 部分: 混合式雲端和雲端推理。瞭解如何使用 Firebase AI Logic,以 Google 地圖和網頁脈絡等真實世界資料為基礎,生成大型語言模型回覆。
第 4 部分:系統整合。使用 AppFunctions 與 Android 智慧系統整合。
第 5 部分 (即將推出):應用程式內代理式工作流程。使用 A2UI 和 ADK 擴充應用程式,加入端對端預訂助理。
想進一步瞭解 Android 開發作業嗎?在 YouTube 或 LinkedIn 上追蹤 Android 開發人員!
本網誌文章中的所有程式碼片段均遵守下列著作權通知:
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 功能。
每週透過電子郵件接收最新的 Android 開發洞察資料。