智慧型應用程式

使用 Firebase AI Logic 和 Gemini Nano 4,建構安全且符合成本效益的 Android 應用程式

喇叭

  • Ankita Saxena

    產品經理

  • Arthur Thompson

    開發人員關係工程師

關於

講座簡介

如要在 Android 應用程式中建構可用於正式環境的生成式 AI,不只要連結 LLM,還需要企業級安全防護和成本控管機制。在本場講座中,您將瞭解 Firebase AI Logic 如何協助開發人員大規模部署安全、符合預算的 AI 體驗。

涵蓋安全性基礎、Firebase App Check、成本管理、動態模型路由,以及多模態功能。

摘要

  • Firebase AI Logic 會將用戶端 SDK 的要求直接轉送至 Gemini API,不需自訂後端。伺服器提示詞範本會將提示詞儲存在雲端,避免應用程式更新。
  • Firebase App Check 會確認要求是否來自您的應用程式,避免資源遭到濫用。在強制執行檢查前,這項服務會整合 Play Integrity 和 reCAPTCHA Enterprise 等認證供應商。
  • Gemini Nano 4 會執行裝置端推論,降低延遲並保護使用者隱私。Firebase AI Logic 會視需要管理備用轉送至雲端。
  • 支出上限和 Firebase AI Logic 觸發條件可讓雲端成本更易於預測。Firebase 會在支出達到 100% 時自動暫停 AI 服務,並透過觸發條件,在生成內容前後執行自訂函式。
  • Gemini Live API 支援雙向對話式音訊和影片串流。用戶端 SDK 會管理基礎 WebSocket 連線和串流通訊協定。

Gemini Notebook

主題

  • firebase-ai-logic
  • gemini-nano
  • firebase-app-check
  • on-device-ai
  • 成本最佳化
  • gemini-live-api

轉錄稿

簡介和 Firebase AI Logic 總覽

  • 歡迎參加 Android 開發人員高峰會。

  • 我是 Firebase 產品經理 Ankita Saxena。

  • 我是 Arthur Thompson,Firebase 團隊的開發人員關係工程師。

  • 今天,我們將示範如何在 Android 應用程式中加入生成式功能。

  • 現在我們來做個小測驗

  • 什麼是 Firebase?

  • 聽過 Firebase 的人請舉手。

  • 喔,我看到很多。

  • 太好了!

  • Firebase 是 Google 的應用程式開發平台。

  • Firebase 提供整合 20 多項產品的統一平台,因此您不會像使用其他軟體一樣,獲得零碎的使用體驗。

  • 接著來談談將生成式 AI 導入行動應用程式的挑戰。

  • 我們發現三大挑戰。

  • 首先,API 金鑰外洩:只要幾分鐘就能擷取金鑰。

  • 第二,更新模型名稱:我們一律建議開發人員不要在應用程式中硬式編碼,否則每次有新模型推出時,就必須推送另一個版本。

  • 第三是檔案隱私權:對任何開發人員或應用程式使用者來說,保護資料並為應用程式設定適當的防護措施非常重要。

  • 介紹 Firebase AI Logic,這是解決上述挑戰的主要方案。

  • Firebase AI Logic 為您提供的價值主張為何?

  • 我們基本上會處理所有複雜的自訂後端,因此您不必自行開發。

  • 第二,使用我們的用戶端 SDK,即可直接從行動應用程式安全呼叫 Gemini API。

  • 讓我們深入瞭解架構的運作方式。

  • 左側是 Firebase 用戶端 SDK。

  • 我們目前支援多種用戶端 SDK。

  • 我想指出我們也支援 Kotlin。

  • 當開發人員想執行 AI 動作時,SDK 會將要求傳送至 Firebase AI Logic,再由 Firebase AI Logic 安全地轉送至 Gemini Developer API 或 Agent Platform Gemini API。

  • 基本上,我們會處理您目前建立的所有自訂後端。

  • 我們從中獲得的價值是,您可以在零成本的情況下加快上市時間。

FriendlyMeals 應用程式示範

  • 現在來到有趣的部分。

  • 這場示範將展示 FriendlyMeals 應用程式。

  • 順帶一提,本課程的其餘示範都會使用同一個應用程式,歡迎下載。

  • 你可以掃描這裡的 QR code。

  • 我們來看看示範說明。

  • FriendlyMeals 應用程式基本上會根據您輸入的食材,找出合適的食譜。

  • 因此,在這個工作流程中,您可以看到基本上有兩種方式可以擷取這些要素。

  • 第一種是輸入現有食材。

  • 第二,拍下食材。

  • 我會使用第一個工作流程,也就是輸入食材。

  • 這是我在冰箱裡找到的所有食材。

  • 在生成食譜時,我想特別說明幾點。

  • 因此,我們在幕後呼叫 Gemini 模型。

  • 在這個特定用途中,我們會呼叫三個 Gemini 3.8 Flash。

  • 上方的圖片實際上是使用 Gemini Nano Banana 模型,也就是最新版本 2.1 Nano Banana。

  • 在開始編寫程式碼之前,我想先強調 Firebase AI Logic 的價值主張。

  • 首先是無伺服器 SDK。

  • 您想新增 AI 功能,但不想建立後端。

  • 這時用戶端 SDK 就能派上用場。

  • 直接從 Android 應用程式呼叫 Gemini。

  • 第二個是強大的內建安全防護功能。

  • 因此,呼叫 Gemini 時,您可以使用 Firebase App Check 和伺服器提示詞範本等功能,稍後我們會進一步介紹這些安全防護功能。

  • 第三,支援多模態輸入和串流等進階功能。

  • 假設您想建構一個應用程式,並加入簡單的 AI 功能,生成關於魔法背包的故事。

    import com.google.firebase.Firebase
    import com.google.firebase.ai.ai
    
    @Composable
    fun MagicBackpackGenerator() {
        var output by remember { mutableStateOf("") }
    
        LaunchedEffect(Unit) {
    
           val model=Firebase.ai.generativeModel("gemini-4-argon")
    
            val response = model.generateContent("Write a story about a magic backpack")
    
            output = response.text.toString()
    
        }
        MagicBackpackUI(output)
    }
  • 只要完成這三個簡單步驟,就能新增 AI 功能,並準備好用於正式環境。

  • Firebase AI Logic 讓您輕鬆在應用程式中加入 AI 功能,因此您首先要思考的問題是,如何確保這項功能安全無虞?

安全性與提示管理

  • 接著,我們來深入探討安全性細節,首先是 Firebase App Check。

  • Firebase App Check 會驗證要求是否來自您的應用程式,協助您保護資料和使用者,並控管 API 資源的存取權。

  • 這項額外安全防護機制可防止應用程式遭到濫用。

  • 在開始編寫程式碼之前,您需要在 Firebase 控制台中完成幾個步驟。

  • 因此,請在 Firebase 控制台的 App Check 頁面註冊 Android 應用程式,並新增相應的認證供應商。

  • 例如 Play Integrity 或 reCAPTCHA Enterprise。

  • 請注意,設定 App Check 後,請先從未強制執行模式開始。

  • 這樣一來,應用程式就能提供遙測資料,確保所有應用程式都能成功向後端發出 API 呼叫,然後再強制執行。

  • 確認遙測資料正常傳送後,即可強制執行 App Check。屆時,任何不具備有效硬體驗證權杖的要求都會遭到拒絕。

  • 以下是實作 App Check 的程式碼。

    class FireTravelApp : Application() {
       lateinit var appContainer: AppContainer
           private set
       override fun onCreate() {
           super.onCreate()
           if (BuildConfig.DEBUG) {
               Firebase.appCheck.installAppCheckProviderFactory(
                   DebugAppCheckProviderFactory.getInstance()
               )
           } else {
               Firebase.appCheck.installAppCheckProviderFactory(
                   PlayIntegrityAppCheckProviderFactory.getInstance()
               )
           }
           appContainer = AppContainer(this)
       }
    }
  • 在應用程式類別中,安裝 App Check 供應器。

  • 在開發階段,您會想使用開發偵錯服務,等到準備好進入正式環境時,再切換至 Play Integrity 或 reCAPTCHA Enterprise。

  • 不過請務必記得,您必須先設定 App Check,才能發出任何其他 Firebase 呼叫。

  • 開發人員建構 AI 功能時,通常會直接在應用程式程式碼中硬式編碼提示,但這會造成兩大難題。

  • 第一,如果需要修改提示,就必須推送完整更新。

  • 第二,任何人只要解壓縮您的應用程式,就能存取您的專屬提示工程。

  • 為解決這個問題,Firebase AI Logic 採用伺服器提示詞範本。

  • 提示不會保留在裝置上,而是儲存在雲端。

  • 這是 Firebase 控制台中的伺服器提示詞範本檢視畫面。

  • 您可以使用 .prompt 格式編寫範本。

    ---
    model: 'gemini-3-flash'
    input:
      schema:...
    tools:...
    ---
    {{role "system"}}
    You're a storyteller that tells nice and joyful stories with happy endings.
    
    {{role "user"}}
    Create a story about {{topic}} with the length of {{length}} words in the {{language}} language.
  • 您可以在這裡設定模型名稱。

  • 您隨時可以更新。

  • 不必推送完整的應用程式更新。

  • 您也可以更新系統指令,並採用嚴格的 JSON 結構定義來輸入和輸出。

  • 同樣地,您不需要發布應用程式。

  • 由於這項功能位於雲端,您可以立即調整提示或更換模型。

  • 這是 Kotlin 程式碼的樣子。

    val generativeModel = Firebase.ai.templateGenerativeModel()
    
    val response = generativeModel.generateContent("storyteller-v1",
        mapOf(
            "topic" to topic,
            "length" to length,
            "language" to language
        )
    )
    
    output.value = response.text
  • 這裡要特別說明的是,伺服器提示詞範本目前為公開預先發布版。

  • 您也可以導入僅限授權模式。

  • 這項功能會使用 Firebase Auth 使用者權杖授權要求。

  • 如要完善安全防護功能,並完全鎖定應用程式,您也可以直接在 Firebase 控制台使用「僅限範本」模式。

AI 監控和遙測資訊主頁

  • 應用程式上線後,您可能想瞭解其運作情形。

  • 在「AI Monitoring」分頁中,只要按一下滑鼠,就能啟用 AI Monitoring 並設定取樣率。

  • Firebase 會自動擷取指標、延遲時間和權杖數量,您不必為此編寫自訂數據分析程式碼。

  • 請注意,我們剛才看到的兩種模式,都可以在同一個視窗中使用。

  • 在 Firebase 控制台啟用 AI Monitoring 後,資料會直接傳送至 AI Monitoring 資訊主頁。

  • 您可以觀察第 95 個百分位數的延遲時間、找出突然激增的錯誤,並追蹤文字、圖片和音訊等不同模態的詞元消耗量。

  • 您也可以檢查 Trace 檢視器,查看特定追蹤記錄。

  • 在這個例子中,您可以看到我們使用的模型、延遲時間和成功率。

使用 Gemini Nano 進行混合式推論

  • Firebase 控制台:可查看所有遙測資料,並瞭解 AI 功能的運作情形。

  • 因此,在這種情況下,假設您發現權杖用量或延遲時間突然暴增,混合模式是降低這些成本或延遲時間的方法之一。

  • 隨著生成式 AI 功能成為應用程式的重要部分,完全依賴雲端可能不是正確的選擇。

  • 因此,Android 裝置端模型 Nano 4 可帶來三大優勢,您可能都已熟悉。

  • 首先是離線模式。

  • 因此,無論是在大型會議、飛機上或地鐵中,AI 功能都能正常運作。

  • 費用。

  • 因此,由於推論是在裝置上執行,您可以新增這些功能,不必擔心 AI 功能的成本上升。

  • 第三個是資料隱私權。

  • 因此,如果是私密資料,您可以向使用者保證,任何推論都不會離開裝置。

  • 因此,您可以使用 Firebase AI Logic 設定這些推論模式,並制定明確的轉送策略,例如 PREFER_ON_DEVICE、PREFER_IN_CLOUD 或 ONLY_ON_DEVICE。

  • 選擇 ONLY_ON_DEVICE 後,SDK 會直接使用裝置端模型,完全不經過雲端。

  • 我們改用手機吧。

  • 我們再次前往 FriendlyMeals,看看一些裝置端功能。

  • 首先,我們要嘗試根據冰箱裡可能有的食材,建立食譜。

  • 先前 Ankita 示範了手動方法,也就是輸入食材,然後生成食譜。

  • 我們來試試其他方法。

  • 我們來看看這台冰箱,這絕對是真實存在的,不是生成的。

  • 冰箱裡有很多橄欖,來看看會生成什麼食譜。

  • 我想特別指出幾點。

  • 首先,圖片不會離開裝置。

  • 圖片由 Nano by Gemma 在本機分析…

  • Nano 4。

  • 第二點是回應速度。

  • 因此,系統會生成素材。

  • 因此,您可享有兩項優勢。

  • 資料不會離開裝置,延遲時間也大幅縮短。

  • 好,來看看冰箱裡只有橄欖時,會得到什麼食譜。

  • 因此,這次我們將使用雲端。

  • 因此,我們將冰箱中辨識出的食材傳送至雲端,並使用 Firebase AI Logic 生成食譜。

  • 冰箱裡沒有鮭魚,但食譜裡有。

  • 請回到投影片。

  • 如示範影片所示,在本機模型和雲端模型之間切換非常簡單。

  • 目前,Firebase AI Logic 會根據網路可用性,使用基本轉送功能執行推論。

  • 您可以將其視為護欄,

  • 因此,這個架構內建多模態和輸入/輸出結構定義等功能,並與 Gemini Nano 4 完整整合。

  • 接著來看看這些護欄在實際應用中如何實作。

  • 因此,混合式轉送功能不需要您建構複雜的中介軟體,或自行建構大量備用邏輯。

  • 在程式碼方面,這只是一個額外參數。

  • 您可以傳遞 onDeviceConfig 參數,設定偏好的模式。

    import com.google.firebase.Firebase
    import com.google.firebase.ai.ai
    
    @Composable
    fun MagicBackpackGenerator() {
        var output by remember { mutableStateOf("") }
    
        LaunchedEffect(Unit) {
    
            val model = Firebase.ai.generativeModel(modelName = "gemini-3.8-flash",
    onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE))
    
           val response = model.generateContent("Write a story about a magic backpack")
    
            output = response.text.toString()
    
        }
        MagicBackpackUI(output)
    }
  • 在這種情況下,SDK 會先嘗試使用本機模型,如果無法使用,則會自動改用雲端模型。

成本最佳化和 AI Logic 觸發條件

  • 我們已介紹如何建構安全的應用程式,以及如何運用裝置端模型,接下來談談成本最佳化。

  • 生成式功能可快速擴充,Cloud Billing 費用也會隨之增加。

  • 因此,我們必須採取適當的防護措施,確保我們有適當的主動式基礎架構控制項和自動化功能,協助您預測預算,並提高應用程式的財務效率。

  • Arthur 剛才強調,裝置端推論完全免費,但仍會有一些情況需要複雜的推論工作,以及備用方案,這時就需要轉送至雲端。

  • 當雲端呼叫發生時,您需要護欄來確保預算可預測。

  • 這正是 Firebase 支出上限功能派上用場的時候。

  • 您可以設定支出上限,更精細地控管應用程式費用。

  • 因此,您不必採用通用的專案層級預算設定,也不必只透過電子郵件接收預算快訊,而是可以為 Firebase AI Logic 等個別服務設定特定的預算上限。

  • 支出達到 100% 時,Firebase 會自動暫停 AI 服務,避免帳單費用超出預期。

  • 除了簡單的支出上限,還有幾項進階成本最佳化策略。

  • 今天想特別介紹的是 Firebase AI Logic 觸發條件。

  • 如果需要在中間加入自訂邏輯,該怎麼辦?

  • 這就是 Firebase AI Logic 觸發條件。

  • 基本上,您可以在生成內容之前或之後執行函式。

  • 您可以使用這項功能檢查使用者、篩選輸入內容、新增背景資訊,以及調整回覆。

Gemini Live API 和模型功能

  • 現在我們已介紹成本最佳化和安全性,接下來要說明模型功能,看看 Firebase AI Logic 提供哪些服務。

  • 為支援這些多模態體驗,Firebase AI Logic 提供完整的正式環境適用模型和工具目錄。

  • 如需高速推論、文字、程式碼和媒體,可以使用 Gemini 4 Argon、Gemini 3.1 Pro、Gemini 3.8 Flash 等。

  • 您也可以使用 Google 搜尋和 Google 地圖建立基準,將這些模型連結至真實世界的資料。

  • 最後,在語音方面,我們提供自然的文字轉語音和 Gemini Live 音訊生成功能。

  • 我們再切換到手機一次。

  • 所以,這裡有我們的甜味和鹹味。

  • 抱歉,不是那個。

  • 我們將以「快速起司番茄醬吐司」為例。

  • 聽起來很好吃。

  • 首先來看看 Live API。

  • 在這個例子中,我們可以使用回傳的影片,並說:「Gemini,可以告訴我桌上有哪些食材嗎?」

  • 根據筆電螢幕上的圖片,你手邊的食材有麵包、切達起司和番茄醬。

  • 現在我們來做個小測驗

  • 我可以開始進行食譜的第一個步驟了嗎?

  • 是。

  • 第一步是將烤箱或烤架預熱至中高溫。

  • 感謝您!

  • 現在我們來做個小測驗

  • 因此,在這種情況下,Live API 會保持對話開啟,直到我實際關閉為止。

  • 另一個我想展示的是語音轉文字,抱歉,是文字轉語音。

  • 在這個範例中,我們使用文字轉語音功能,將食譜操作說明轉換成語音。

  • 因此,我不需要閱讀,只要點選「生成」或「朗讀」,系統就會將操作說明文字傳送至文字轉語音模型。

  • 系統會生成音訊,並將音訊傳回裝置。

  • 我可以播放、快取供日後使用,並像這樣播放。

  • 1.

  • 將烤箱或烤爐預熱至中高溫。

  • 2.

  • 將兩片麵包放在烤盤或烤箱托盤上。

  • 好極了

  • 很酷吧?

  • 因此,Firebase AI Logic 讓我們只需幾行程式碼,就能實作這類酷炫功能。

  • 讓我們切換回投影片。

  • 看過 Gemini Live API 的運作示範後,您是否想親自打造免持對話式體驗?

  • 這時 Gemini Live API 就能派上用場,協助您建立雙向語音對話。

  • Android 應用程式可以即時串流麥克風音訊和相機影格,並接收自然、低延遲的語音回覆。

  • 在 Kotlin 中,這項設定看起來很熟悉。

    val model = Firebase.ai.liveModel(
        modelName = "gemini-3.1-flash-live-preview",
        generationConfig = liveGenerationConfig {
            responseModality = ResponseModality.AUDIO
       },
       systemInstruction = "Your main job is to change the color...",
       tools = listOf(Tool.functionDeclarations(listOf(changeColorFunction)))
    )
    
    val session = model.connect(::handler)
    
    session.startAudioConversation(::handler)
    
    session.stopAudioConversation()
  • 您會例項化設定為音訊回應的 Live 模型,並使用串流處理常式連線至工作階段。

  • 首先要強調的是,SDK 會在背景處理完整的 WebSocket 內容和串流通訊協定。

  • 所以您不必編寫程式碼,對吧?

  • 繼續寫。

Firebase 代理技能和重點回顧

  • 在示範影片的尾聲,我們想展望應用程式開發的未來,並介紹一項能大幅提升工作流程效率的工具:Firebase 代理技能。

    # Execute to add agent capabilities to your workspace
    npx skills add firebase/agent-skills
  • 此外,如果您使用 Antigravity 和 Android Studio,我們已將 Firebase AI Logic 直接整合至新手上路流程。

  • 最後,請記住三個重點:開始建構、提早使用正式版工具 (例如今天介紹的安全工具),以及盡可能使用代理程式技能。

  • 感謝您!

程式碼

程式碼片段

「FriendlyMeals 應用程式示範」中 05:14 的 Kotlin 程式碼片段
import com.google.firebase.Firebase
import com.google.firebase.ai.ai

@Composable
fun MagicBackpackGenerator() {
    var output by remember { mutableStateOf("") }

    LaunchedEffect(Unit) {

       val model=Firebase.ai.generativeModel("gemini-4-argon")

        val response = model.generateContent("Write a story about a magic backpack")

        output = response.text.toString()

    }
    MagicBackpackUI(output)
}
「Security and prompt management」影片 07:07 的 Kotlin 程式碼片段
class FireTravelApp : Application() {
   lateinit var appContainer: AppContainer
       private set
   override fun onCreate() {
       super.onCreate()
       if (BuildConfig.DEBUG) {
           Firebase.appCheck.installAppCheckProviderFactory(
               DebugAppCheckProviderFactory.getInstance()
           )
       } else {
           Firebase.appCheck.installAppCheckProviderFactory(
               PlayIntegrityAppCheckProviderFactory.getInstance()
           )
       }
       appContainer = AppContainer(this)
   }
}
「Security and prompt management」影片 08:18 處的 YAML 程式碼片段
---
model: 'gemini-3-flash'
input:
  schema:...
tools:...
---
{{role "system"}}
You're a storyteller that tells nice and joyful stories with happy endings.

{{role "user"}}
Create a story about {{topic}} with the length of {{length}} words in the {{language}} language.
「Security and prompt management」影片 08:54 的 Kotlin 程式碼片段
val generativeModel = Firebase.ai.templateGenerativeModel()

val response = generativeModel.generateContent("storyteller-v1",
    mapOf(
        "topic" to topic,
        "length" to length,
        "language" to language
    )
)

output.value = response.text
「使用 Gemini Nano 進行混合推論」影片 15:09 處的 Kotlin 程式碼片段
import com.google.firebase.Firebase
import com.google.firebase.ai.ai

@Composable
fun MagicBackpackGenerator() {
    var output by remember { mutableStateOf("") }

    LaunchedEffect(Unit) {

        val model = Firebase.ai.generativeModel(modelName = "gemini-3.8-flash",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE))

       val response = model.generateContent("Write a story about a magic backpack")

        output = response.text.toString()

    }
    MagicBackpackUI(output)
}
「Gemini Live API 和模型功能」影片 21:02 處的 Kotlin 程式碼片段
val model = Firebase.ai.liveModel(
    modelName = "gemini-3.1-flash-live-preview",
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
   },
   systemInstruction = "Your main job is to change the color...",
   tools = listOf(Tool.functionDeclarations(listOf(changeColorFunction)))
)

val session = model.connect(::handler)

session.startAudioConversation(::handler)

session.stopAudioConversation()
「Firebase 代理技能和重點回顧」影片 21:30 的殼層程式碼片段
# Execute to add agent capabilities to your workspace
npx skills add firebase/agent-skills