欢迎回到“构建智能 Android 应用”系列博文,我们将在此系列博文中介绍如何将基本的 Android 应用转变为 个性化、智能 且 智能体驱动 的体验。在 上一篇博文中,我们介绍了 Jetpacker,这是我们将在整个系列中使用的演示版应用。
在本博文中,我们将分享如何通过 机器学习套件的 Prompt API 使用 Gemini Nano 来构建智能设备端功能。
构建智能设备端功能是指直接在设备上处理提示和数据,而无需将数据发送到服务器。这具有以下几个优势:
- 用户数据可以在设备上本地 处理,从而保护用户隐私
- 即使网络连接不稳定或没有网络连接,模型的功能也可靠
- 由于所有内容都在用户的硬件上运行,因此无需支付额外的云推理费用
考虑到设备端推理的优势,我们确定了在 Jetpacker 中添加三项功能,以改善用户体验:总结行程、管理费用和录制语音备注。
高质量的短文本定制总结
行程界面可让用户快速了解给定行程的所有活动。由于此界面包含大量信息,因此很快就会让人感到不知所措。为了帮助用户做好准备,而不会感到不知所措,我们可以在顶部添加一个“为您的行程做好准备” 部分。
通过输入行程并要求 LLM 对其进行总结,我们可以生成行程的快速总结,以及打包提示和实用的当地短语。由于以下几个原因,这是一个非常适合使用设备端模型的用例:
- 性能和质量: 输入和输出文本都相对较短。因此,我们可以预期设备端解决方案的性能和质量与功能更强大的云模型相当。
- 可伸缩性: 将推理转移到设备端后,我们可以将此功能从少数用户扩展到数百万用户,而无需担心管理不断增加的云推理费用。
- 低延迟时间和可靠性: 设备端推理可保证低延迟时间,即使在用户离线时也能提供可靠的体验。
为了使用设备端推理进行构建,我们使用了 Gemini Nano,这是 Google 针对移动设备优化的最高效模型。Gemini Nano 最早于几年前推出,目前已在超过 1.4 亿台设备上运行。该模型的最新版本 Gemini Nano 4 基于最近发布的 Gemma 4 模型的架构基础构建,并针对电池和性能效率进行了进一步优化。
借助机器学习套件的 Prompt API,我们可以利用 Gemini Nano 4 的新模型功能来为设备端功能制作原型。我们将创建一个提示,其中包含行程的行程,并要求模型生成摘要以及任何准备提示。
找到最佳提示通常需要一些迭代,而 AICore 应用非常适合此步骤。选择加入 AICore 的开发者预览版选项后,我们可以下载预览模型(例如 Gemini Nano 4)来测试提示并查看模型的预期输出。经过几次提示迭代,我们将响应速度从 13 秒提高到了 2 秒以内!点击此处查看最终代码实现和提示。
[ASSET HERE - FILE TOO LARGE ATM]
本地处理敏感用户输入
接下来,为了帮助用户更好地享受旅程,我们将构建一个简单的费用管理器,让用户无需手动整理收据和计算预算。
由于收据可能包含信用卡号和地址等敏感信息,因此这是另一个非常适合使用设备端解决方案的用例。借助设备端推理,用户可以确信私人信息将在设备上本地处理,而不会将任何数据发送到云端。
此外,Gemini Nano 4 还改进了多模态的模型功能,尤其是针对 OCR 和视觉数据提取等图片理解任务,使其成为从收据中提取信息等任务的绝佳解决方案。
对于此用例,提示将分析收据的图片,并输出生成标题、支出金额和费用类别等信息。为了确保模型以首选格式输出信息,我们可以使用 机器学习套件的结构化输出 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多模态输入
最后,为了帮助用户在旅途中录制音频备忘录,我们来构建一个完全在设备端运行的语音备注功能。借助 机器学习套件的 Speech Recognition API,我们将让用户能够录制简短的语音备注,这些备注会自动转录为文本。有了转写的文本,我们将使用机器学习套件的 Prompt API 来识别与录制的语音记事关联的行程活动,让用户在滚动浏览行程时轻松回顾行程。
借助 机器学习套件 GenAI Speech Recognition API,您可以使用两种不同的模式完全在设备端将音频内容转录为文本。基本模式 使用传统的设备端语音识别模型,适用于 API 级别为 31 及更高级别的大多数 Android 设备。高级模式 使用 Gemini Nano,可提供更广泛的语言覆盖范围和更高的质量,目前在 Pixel 10 设备上受支持。
对于我们的功能,我们将 Speech Recognition API 与机器学习套件 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)
}总结
借助机器学习套件的 GenAI API,我们能够利用 Gemini Nano 为 JetPacker 应用开发完全在设备端运行的智能功能,并在不产生任何额外云费用的情况下提供更好的用户体验。
在 GitHub 上查看 Jetpacker 的完整源代码,并观看视频 使用 Google 的 AI 构建智能 Android 应用,详细了解如何使用设备端模型、云端推理和最新的智能体框架将智能功能直接集成到您的应用中。
了解详情
查看本系列博文的其他部分:
第 1 部分: 应用简介和概览。
第 2 部分(本博文!): 设备端智能。深入了解机器学习套件的生成式 AI API 和 Gemini Nano,以构建隐私至上的功能,例如行程总结、收据解析和本地音频处理。
第 3 部分: 混合云和云端推理。了解如何使用 Firebase AI Logic 将 LLM 回答基于 Google 地图和网络上下文等真实世界数据。
第 4 部分: 系统集成。使用 AppFunctions 与 Android 智能系统集成。
第 5 部分(即将推出): 应用内智能体工作流。使用 A2UI 和 ADK 扩展应用,使其具有端到端预订助理功能。
想了解更多有关 Android 开发的信息?请在 YouTube 或 LinkedIn 上关注 Android Developers!
本博文中的所有代码段均遵循以下版权声明:
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 功能。
Ben Weiss • 6 分钟阅读时间
每周都会将最新的 Android 开发见解发送到您的收件箱 每周。