1. 准备工作
通过 Gemini API,您不仅可以使用 Gemini 模型系列中的生成式 AI 模型,还可以打造迄今为止尚未实现的新体验。
此 Codelab 将指导您向 JetNews 应用添加总结功能。JetNews 是一款新闻阅读应用,构建该应所用的 Jetpack Compose 属于 compose-samples 代码库的一部分。
在此 Codelab 中,您将执行以下操作:
- 在 Vertex AI Studio 中编写提示,用于总结新闻报道。
- 将 Vertex AI in Firebase SDK 集成到 JetNews 中。
- 在报道视图顶部添加“Gemini 摘要”部分,在底部栏中添加“总结”按钮。
JetNews 应用的总结功能由 Gemini API 提供支持。
前提条件
- 具备 Kotlin 基础知识
- 熟悉如何使用 Android Studio,以及如何在搭载 Android API 级别 21 或更高版本的模拟器或实体设备中测试应用
- 一个用于访问 Firebase 的 Google 账号
2. 设计提示
提示是指您的应用通过 Gemini API 发送给 Gemini 模型的消息,其中可以包括文本、图片、音频和视频文件。
为特定用例设计理想的提示与其说是科学,不如说是艺术,而且通常需要多次迭代。Vertex AI Studio 是设计提示的出色工具。
在本示例中,您将在 Vertex AI Studio 中创建文本提示。打开 Vertex AI Studio,然后点击左侧导航栏中的“自由格式”。
在此 Codelab 中,您需要将一篇技术文章的内容总结为四个要点。此提示的目标是确保摘要相关且为纯文本,且不带任何 Markdown 格式。
经过几次迭代后,您可能会发现效果特别好的提示。如下所示:
Summarize the core findings of the following article in 4 concise bullet points. Ensure each bullet point is specific, informative and relevant. Return just the bullet points as plain text. Don't use markdown.
[article body]
对输出结果满意后,您就可以将 Gemini API 集成到 Android 应用中。
3. 查看代码
首先,查看 GitHub 中的起始源代码:
git clone https://github.com/android/codelab-gemini-summary
JetNews 应用完全从零开始设计,遵循 Android 架构最佳实践,并能够针对各种大小的移动设备进行扩缩。
详细了解 JetNews 支持大屏设备的实现方法。
如果 JetNews 应用的源代码让您感到难以理解,请不要担心。要添加由 Gemini 提供支持的总结功能,您只需修改 GeminiRepositoryImpl
类中的代码。我们已为您实现可在应用中触发总结并显示摘要的代码。
最终实现
您可以通过查看此分支来直接访问源代码的最终实现:
git clone https://github.com/android/codelab-gemini-summary git switch final
您需要按照本 Codelab 的第 4 步中详述的说明创建和设置 Firebase 项目。
4. 设置 Firebase 项目
创建 Firebase 项目
在 Firebase 控制台中创建 Firebase 项目。在“创建项目”工作流的第一步中输入新项目名称,创建一个新的 Firebase 项目。系统会自动创建底层 Google Cloud 项目。
在项目中,前往使用 Gemini 进行构建页面,然后执行以下操作:
- 升级您的项目,以使用随用随付 Blaze 定价方案。请注意,如果您是 Firebase 和 Google Cloud 的新用户,请确认您是否有资格获得 300 美元赠金。
- 在项目中启用所需的 API,即 Vertex AI API 和 Vertex AI in Firebase API。
将应用连接到 Firebase
现在,您已经设置好 Firebase 项目,接下来您需要将 Android 应用连接到该项目。
- 在 Firebase 控制台中,选择您的项目。
- 点击“添加应用”,然后选择“Android”。
- 按照屏幕上的说明操作,通过提供应用的软件包名称来注册您的应用。
- 下载
google-services.json
文件,并将其添加到应用的模块(应用级)根目录中。 - 继续按照屏幕上的说明操作,将 Google 服务 Gradle 插件和 Firebase 物料清单 (BoM) Gradle 依赖项添加到您的应用中。
替代方案:使用 Android Studio 中的 Firebase Assistant 来连接应用
或者,您也可以使用 Android Studio 中的 Firebase Assistant,只需点击几下按钮,就能将应用与 Firebase 连接起来。
借助 Firebase Assistant,您可以在 Firebase 项目中注册您的应用,并将必要的 Firebase 文件、插件和依赖项添加到您的 Android 项目中 - 这一切均可在 Android Studio 中完成!
请参阅 Firebase 文档中的详细说明。
5. 更新 Gradle 导入项
JetNews 应用使用 Gradle 版本目录功能,可帮助集中管理依赖项的版本。
- 如需为 Vertex AI in Firebase SDK 添加 Gradle 导入项,请将以下代码添加到
libs.versions.toml
:[versions] ... vertexai = "16.0.0" [libraries] ... firebase-vertexai = { module = "com.google.firebase:firebase-vertexai", version.ref = "vertexai"}
- 更新
build.gradle.kts
:implementation(libs.firebase.vertexai)
- 点击“立即同步”,以提取 Gradle 工件。
如果您不想使用 Gradle 版本目录,可以直接在 build.gradle.kts
中添加导入项:
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:33.5.1"))
implementation("com.google.firebase:firebase-vertexai")
6. Kotlin 集成
您已经添加了相应的依赖项,接下来请更新 Kotlin 代码。
打开 GeminiRepositoryImpl
类。此类将包含与 Gemini API 交互的所有代码。
Gemini 模型初始化
将 GenerativeModel
实例化:
private val generativeModel = Firebase.vertexAI.generativeModel(
"gemini-1.5-flash",
generationConfig = generationConfig {
temperature = 0f
},
safetySettings = listOf(
SafetySetting(HarmCategory.HARASSMENT, HarmBlockThreshold.LOW_AND_ABOVE),
SafetySetting(HarmCategory.HATE_SPEECH, HarmBlockThreshold.LOW_AND_ABOVE),
SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, HarmBlockThreshold.LOW_AND_ABOVE),
SafetySetting(HarmCategory.DANGEROUS_CONTENT, HarmBlockThreshold.LOW_AND_ABOVE),
)
)
在此示例中,您访问的是 Gemini 1.5 Flash 模型。此模型能够处理此示例的文本总结用例,并且比 Gemini 1.5 Pro 更具成本效益。如需详细了解可用的 Gemini 模型,请参阅 Vertex AI in Firebase 文档。
此示例还将温度值设为 0,从而更好地确保摘要生成的一致性。如需详细了解模型配置参数,请参阅 Vertex AI in Firebase 文档。
最后,此示例定义了安全设置,以确保模型在回答中使用恰当的语言。如需详细了解安全设置功能,请参阅 Vertex AI in Firebase 文档。
使用 Gemini 进行总结
接下来,更新 summarizePost()
函数,对作为参数传递的帖子进行总结。
首先,从帖子中提取文本,以将其传递给模型:
val postString = StringBuilder()
for (paragraph in post.paragraphs) {
postString.append(paragraph.text)
}
根据本 Codelab 的第 2 步中设计的提示创建 prompt
,并传入帖子内容:
val prompt =
"Summarize the following article in 4 concise bullet points. " +
"Ensure each bullet point is specific, informative and relevant. " +
"Return just the bullet points as plain text. " +
"Use plain text, don't use markdown. \n $postString"
最后,将提示传递给模型并返回回答:
return generativeModel.generateContent(prompt).text
测试实现
如需测试实现,请在 Android Studio 中点击“Run app”(运行应用),然后在模拟器或实体设备上安装 JetNews 应用。
在首页打开任意报道,然后点击底部栏中的“总结”按钮:
您应该会看到报道顶部显示的“Gemini 摘要”部分,该部分位于报道插图下方:
JetNews 应用架构
JetNews 旨在展示 Jetpack Compose 的最新界面功能。它是为了支持不同的屏幕尺寸而实现的(如需了解详情,请参阅这篇博文)。
此 Codelab 的目的并非深入了解 JetNews 应用架构的细节。Gemini 集成主要发生在 GeminiRepositoryImpl
类中。
不过,如果您想了解按钮如何触发总结,可以查看 JetnewsIcons.kt
中的 SummaryButton()
。您还可以查看 PostContent.kt
中 SummarySection()
函数中的总结界面的界面实现。
7. 总结
在此 Codelab 中,您学习了如何执行以下操作:
- 在 Vertex AI Studio 中创建并测试提示。
- 在 Firebase 中设置项目以使用 Vertex AI in Firebase 和 Gemini API。
- 配置 Gradle 依赖项,以便在 Android 应用中使用 Vertex AI in Firebase。
- 调用 Gemini API 以通过 Kotlin 代码访问 Gemini 1.5 Flash 模型。
如果您想详细了解 Android 应用中的 Vertex AI in Firebase,可以查看 Android 代码示例和文档。