1. 事前準備
您可以透過 Gemini API 存取 Gemini 系列的生成式 AI 模型,打造先前無法提供的全新使用體驗。
本程式碼研究室會逐步引導您在 JetNews 應用程式中加入摘要功能。JetNews 是新聞閱讀應用程式,使用 compose-samples 存放區的 Jetpack Compose 部分建構而成。
本程式碼研究室涵蓋下列內容:
- 在 Vertex AI Studio 中編寫提示,用於生成新聞報導摘要。
- 將 Vertex AI in Firebase SDK 整合至 JetNews。
- 在文章檢視畫面頂端新增「Gemini summary」專區,並在底部列中新增「summarization」按鈕。
JetNews 應用程式採用 Gemini API 提供的摘要功能。
必要條件
- 具備 Kotlin 基本知識
- 熟悉 Android Studio 使用方式,且能在搭載 Android API 級別 21 以上版本的實體裝置或模擬器上測試應用程式
- 可存取 Firebase 的 Google 帳戶
2. 設計提示
提示是指應用程式透過 Gemini API 傳送至 Gemini 模型的訊息,可包含文字、圖片、音訊和影片檔案。
為特定用途設計理想的提示,不只是科學,更是一門藝術,通常需要經過多次修改才能完成。Vertex AI Studio 是編寫提示的好工具。
在本範例中,您將在 Vertex AI Studio 中建立文字提示。開啟 Vertex AI Studio,按一下左側導覽面板中的「任意形式」。
在本程式碼研究室中,您要將一篇技術文章的內容摘要出四個重點項目。這項提示的目標在於確保摘要與內容相關,且以純文字呈現,不含任何 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
請按照本程式碼研究室步驟 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 專案註冊應用程式,並在 Android 專案中新增必要的 Firebase 檔案、外掛程式和依附元件,所有操作都能在 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)
- 按一下「Sync now」即可擷取 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 更具成本效益。請參閱 Vertex AI in Firebase 說明文件,進一步瞭解可用的 Gemini 模型。
本範例也將溫度值設為 0,進一步確保摘要生成作業的一致性。請參閱 Vertex AI in Firebase 說明文件,進一步瞭解模型設定參數。
最後,本範例定義了安全設定,確保模型能在回應中生成適當的語言。請參閱 Vertex AI in Firebase 說明文件,進一步瞭解安全設定功能。
使用 Gemini 生成摘要
接著,更新 summarizePost()
函式,針對以參數形式傳遞的文章生成摘要。
首先,請從文章中擷取文字,並傳遞至模型:
val postString = StringBuilder()
for (paragraph in post.paragraphs) {
postString.append(paragraph.text)
}
根據在本程式碼研究室步驟 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 summary」專區:
JetNews 應用程式架構
JetNews 是為展示 Jetpack Compose 目前的 UI 功能而建構,其實作方式可支援不同的螢幕大小 (詳情請參閱這篇網誌文章)。
本程式碼研究室的目的並非深入探討 JetNews 應用程式架構。Gemini 整合作業大多會透過 GeminiRepositoryImpl
類別進行。
不過,如果您想瞭解按鈕如何觸發摘要功能,可以查看 JetnewsIcons.kt
中的 SummaryButton()
。此外,您也可以查看 PostContent.kt
中 SummarySection()
函式的摘要 UI 實作項目。
7. 結語
在本程式碼研究室中,您已瞭解如何進行以下作業:
- 在 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 程式碼範例和說明文件。