從 Vertex AI in Firebase SDK 的預先發布版遷移至 Firebase AI Logic SDK


Firebase AI Logic 和用戶端 SDK 先前稱為「Vertex AI in Firebase」。為更貼切地反映我們擴展的服務和功能 (例如,我們現在支援 Gemini Developer API!),我們將服務重新命名並重新封裝為 Firebase AI Logic。

如要直接從行動或網頁應用程式安全存取 Google 的生成式 AI 模型,現在可以選擇「Gemini API」供應商,包括長期提供的 Agent Platform Gemini API (formerly Vertex AI) 或現在的 Gemini Developer API。也就是說,您現在可以選擇使用 Gemini Developer API,免付費層級提供合理的速率限制和配額。

遷移至 Firebase AI Logic SDK 的步驟總覽

  • 步驟 1:為應用程式和用途選擇最合適的「Gemini API」供應商。

  • 步驟 2:啟用必要的 API。

  • 步驟 3:更新應用程式使用的程式庫。

  • 步驟 4:更新應用程式中的初始化設定。

  • 步驟 5:根據使用的功能更新程式碼。

步驟 1:為應用程式選擇最合適的「Gemini API」供應商

遷移時,您可以選擇「Gemini API」供應商:

  • 舊版「Vertex AI in Firebase」SDK 只能使用 Agent Platform Gemini API (formerly Vertex AI)。

  • 新的 Firebase AI Logic SDK 可讓您選擇要直接從行動或網頁應用程式呼叫哪個「Gemini API」供應商,包括 Gemini Developer API 或 Agent Platform Gemini API (formerly Vertex AI)。

請先瞭解這兩個 Gemini API 供應商的差異,特別是支援的功能、價格和速率限制。舉例來說,Gemini Developer API 不支援使用 Cloud Storage 網址提供檔案,但如果您想善用免付費方案和合理的配額,這或許是不錯的選擇。

步驟 2:啟用必要的 API

請確認 Firebase 專案已啟用所有必要 API,才能使用所選的「Gemini API」供應商。

請注意,您可以在專案中同時啟用這兩個 API 供應商。

  1. 登入 Firebase 控制台,然後選取 Firebase 專案。

  2. 在 Firebase 控制台,依序前往「AI Services」(AI 服務) > 「AI Logic」

  3. 按一下「Get started」(開始使用),啟動引導式工作流程,協助您設定專案所需的 API 和資源。

  4. 選取要搭配 Firebase AI Logic SDK 使用的「Gemini API」供應商。你之後隨時可以設定及使用其他 API 供應商。

    • Gemini Developer API — 帳單 (選用) (適用於免付費的 Spark 定價方案)
      控制台的工作流程會啟用必要的 API,並在專案中建立 Gemini API 金鑰。
      請勿將這個 Gemini API 金鑰加入應用程式的程式碼集。 瞭解詳情。

    • Agent Platform Gemini API (formerly Vertex AI) - 需要付費 (需要採用 Blaze 即付即用定價方案)
      控制台的工作流程會在專案中啟用必要的 API。

  5. 請繼續閱讀本遷移指南,瞭解如何更新應用程式中的程式庫和初始化作業。

步驟 3:更新應用程式使用的程式庫

更新應用程式的程式碼集,改用 Firebase AI Logic 程式庫。

Swift

  1. 在 Xcode 中開啟應用程式專案,然後使用下列任一選項,將 Firebase 軟體包更新至 12.5.0 以上版本:

    • 選項 1:更新所有套件:依序前往「File」>「Packages」>「Update to Latest Package Versions」。

    • 方法 2:個別更新 Firebase:前往「Package Dependencies」(套件依附元件)部分,找到 Firebase 套件。在 Firebase 套件上按一下滑鼠右鍵,然後選取「Update Package」。

  2. 確認 Firebase 套件現在顯示 12.5.0 以上版本。如果不是,請確認您指定的套件需求允許更新至 12.5.0 以上版本。

  3. 在專案編輯器中選取應用程式的目標,然後前往「Frameworks, Libraries, and Embedded Content」部分。

  4. 新增程式庫:選取「+」按鈕,然後從 Firebase 套件新增 FirebaseAILogic。

  5. 完成應用程式遷移作業後 (請參閱本指南的其餘章節),請務必移除舊程式庫:
    選取「FirebaseVertexAI-Preview」,然後按下「—」按鈕。

Kotlin

  1. 在模組 (應用程式層級) Gradle 檔案 (通常是 <project>/<app-module>/build.gradle.kts 或 <project>/<app-module>/build.gradle) 中,將舊依附元件 (如適用) 替換為下列內容。

    請注意,在刪除舊的依附元件之前,遷移應用程式的程式碼集 (請參閱本指南的其餘部分) 可能會比較容易。

    // BEFORE
    dependencies {
      implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")
    }
    
    
    // AFTER
    dependencies {
      // Import the BoM for the Firebase platform
      implementation(platform("com.google.firebase:firebase-bom:35.0.0"))
    
      // Add the dependency for the Firebase AI Logic library
      // When using the BoM, you don't specify versions in Firebase library dependencies
      implementation("com.google.firebase:firebase-ai")
    }
  2. 將 Android 專案與 Gradle 檔案同步處理。

請注意,如果您選擇不使用 Firebase Android BoM,只要新增 firebase-ai 程式庫的依附元件,並接受 Android Studio 建議的最新版本即可。

Java

  1. 在模組 (應用程式層級) Gradle 檔案 (通常是 <project>/<app-module>/build.gradle.kts 或 <project>/<app-module>/build.gradle) 中,將舊依附元件 (如適用) 替換為下列內容。

    請注意,在刪除舊的依附元件之前,遷移應用程式的程式碼集 (請參閱本指南的其餘部分) 可能會比較容易。

    // BEFORE
    dependencies {
      implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")
    }
    
    
    // AFTER
    dependencies {
      // Import the BoM for the Firebase platform
      implementation(platform("com.google.firebase:firebase-bom:35.0.0"))
    
      // Add the dependency for the Firebase AI Logic library
      // When using the BoM, you don't specify versions in Firebase library dependencies
      implementation("com.google.firebase:firebase-ai")
    }
  2. 將 Android 專案與 Gradle 檔案同步處理。

請注意,如果您選擇不使用 Firebase Android BoM,只要新增 firebase-ai 程式庫的依附元件,並接受 Android Studio 建議的最新版本即可。

Web

  1. 使用 npm 取得最新版 Firebase JS SDK for Web:

    npm i firebase@latest

    或

    yarn add firebase@latest
  2. 在匯入程式庫的位置,更新匯入陳述式,改用 firebase/ai。

    請注意,在刪除舊的匯入項目之前,遷移應用程式的程式碼集 (請參閱本指南的其餘部分) 可能會比較容易。

    // BEFORE
    import { initializeApp } from "firebase/app";
    import { getVertexAI, getGenerativeModel } from "firebase/vertexai-preview";
    
    
    // AFTER
    import { initializeApp } from "firebase/app";
    import { getAI, getGenerativeModel } from "firebase/ai";

Dart

  1. 在 Flutter 專案目錄中執行下列指令,更新 pubspec.yaml 檔案,改用 firebase_ai 套件:

    flutter pub add firebase_ai
  2. 重建 Flutter 專案:

    flutter run
  3. 完成應用程式遷移後 (請參閱本指南的其餘部分),請務必刪除舊套件:

    flutter pub remove firebase_vertexai

Unity

「Vertex AI in Firebase」不支援 Unity。

瞭解如何開始使用 Firebase AI Logic SDK for Unity。

步驟 4:更新應用程式中的初始化設定

按一下您的Gemini API供應商,即可在這個頁面查看供應商專屬內容和程式碼。

更新所選 API 供應商的服務初始化方式,並建立 GenerativeModel 執行個體。

Swift


import FirebaseAILogic

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-3.8-flash")

Kotlin


// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-3.8-flash")

Java


// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-3.8-flash");

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

Web


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });

Dart


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-3.8-flash');

Unity

「Vertex AI in Firebase」不支援 Unity。

瞭解如何開始使用 Firebase AI Logic SDK for Unity。

請注意,視您使用的功能而定,您不一定會建立 GenerativeModel 執行個體。如要 使用 Gemini Live API 串流輸入和輸出內容 ,請建立 LiveModel 執行個體。

步驟 5:根據使用的功能更新程式碼

這個步驟說明可能需要進行的變更,具體視您使用的功能而定。

  • 如果您使用 Cloud Storage 網址 並在這次遷移作業中改用 Gemini Developer API,則必須更新多模態要求,將檔案納入為內嵌資料 (或使用 YouTube 網址)。

  • 「Vertex AI in Firebase」SDK 的正式發布版有多項異動。如要使用 Firebase AI Logic SDK,也必須進行這些變更。請查看下列清單,瞭解是否需要修改程式碼,才能採用 Firebase AI Logic SDK。

所有語言和平台皆須提供

  • 函式呼叫
    如果您在正式發布前實作這項功能,則需要更新結構定義的定義方式。建議您參閱更新後的函式呼叫指南,瞭解如何編寫函式宣告。

  • 使用 responseSchema
    生成結構化輸出內容 (例如 JSON):如果您在正式發布前實作這項功能,則需要更新定義結構定義的方式。建議您參閱新的結構化輸出指南,瞭解如何編寫 JSON 結構定義。

  • 逾時

    • 將要求的預設逾時時間變更為 180 秒。

視平台或語言而定

Swift

  • 列舉

    • 將大部分 enum 型別換成具有靜態變數的 struct。這項變更可讓 API 以回溯相容的方式演進,更具彈性。使用 switch 陳述式時,現在必須加入 default: 案例,涵蓋未知或未處理的值,包括日後新增至 SDK 的新值。

    • 將 BlockThreshold 列舉重新命名為 HarmBlockThreshold;這個類型現在是 struct。

    • 從下列列舉中移除 unknown 和 unspecified 案例 (現在為 struct):HarmCategory、HarmBlockThreshold、HarmProbability、BlockReason 和 FinishReason。

    • 將列舉 ModelContent.Part 替換為名為 Part 的通訊協定,以便以回溯相容的方式新增類型。如要進一步瞭解這項異動,請參閱「內容部分」一節。

  • 內容部分

    • 移除 ThrowingPartsRepresentable 通訊協定,並簡化 ModelContent 的初始化工具,避免偶爾發生編譯器錯誤。如果圖片未正確編碼,在 generateContent 中使用時仍會擲回錯誤。

    • 已將 ModelContent.Part 案例替換為下列 struct 型別, 這些型別符合 Part 通訊協定:

      • .text 至 TextPart
      • .data 至 InlineDataPart
      • .fileData 至 FileDataPart
      • .functionCall 至 FunctionCallPart
      • .functionResponse 至 FunctionResponsePart
  • 危害類別

    • HarmCategory 不再以巢狀結構置於 SafetySetting 類型中。如果您將其稱為 SafetySetting.HarmCategory,則可以替換為 HarmCategory。
  • 安全回報

    • 由於任何回應都未使用 SafetyFeedback 型別,因此已移除該型別。
  • 引用中繼資料

    • 已在 CitationMetadata 中將 citationSources 屬性重新命名為 citations。
  • 計費字元總數

    • 將 CountTokensResponse 中的 totalBillableCharacters 屬性變更為選用,以反映未傳送任何字元的情況。
  • 候選人回覆

    • 將 CandidateResponse 重新命名為 Candidate,以便與其他平台保持一致。
  • 生成設定

    • 已將 GenerationConfig 的公開屬性變更為 internal。您仍可在初始化工具中設定所有這些項目。

Kotlin

  • 列舉

    • 以一般類別取代 enum 類別和 sealed 類別。這項變更可讓 API 演進時,更具向後相容性。

    • 將 BlockThreshold 列舉重新命名為 HarmBlockThreshold。

    • 從下列列舉中移除值:HarmBlockThreshold、HarmProbability、HarmSeverity、BlockReason 和 FinishReason。

  • Blob 方法

    • 已重新命名所有名稱包含 Blob 的方法,改為使用 InlineData。
  • 安全性設定

    • 將 method 欄位變更為可為空值。
  • Duration 類別

    • 移除 Kotlin 的 Duration 類別的所有用法,並替換為 long。這項變更可提升與 Java 的互通性。
  • 引用中繼資料

    • 將先前在 CitationMetadata 中宣告的所有欄位包裝到名為 Citation 的新類別中。您可以在 CitationMetadata 的 citations 清單中找到引用內容。這項變更可讓各平台上的型別更一致。
  • 計算權杖

    • 將 totalBillableCharacters 欄位變更為可為空值。
  • 計費字元總數

    • 將 CountTokensResponse 中的 totalBillableCharacters 屬性變更為選用,以反映未傳送任何字元的情況。
  • 例項化模型

    • 將 requestOptions 參數移至參數清單結尾,與其他平台保持一致。
  • Live API

    • 移除了列舉類別 ResponseModality 的 UNSPECIFIED 值。請改用 null。

    • 「LiveGenerationConfig.setResponseModalities」已重新命名為「LiveGenerationConfig.setResponseModality」。

    • 移除 LiveContentResponse.Status 類別,並將狀態欄位巢狀化為 LiveContentResponse 的屬性。

    • 移除 LiveContentResponse 類別,改為提供與模型回應相符的 LiveServerMessage 子類別。

    • 將 LiveModelFutures.connect 變更為回傳 ListenableFuture<LiveSessionFutures>,而不是 ListenableFuture<LiveSession>。

Java

  • 列舉

    • 以一般類別取代 enum 類別和 sealed 類別。這項變更可讓 API 演進時,更具向後相容性。

    • 將 BlockThreshold 列舉重新命名為 HarmBlockThreshold。

    • 從下列列舉中移除值:HarmBlockThreshold、HarmProbability、HarmSeverity、BlockReason 和 FinishReason。

  • Blob 方法

    • 已重新命名所有名稱包含 Blob 的方法,改為使用 InlineData。
  • 安全性設定

    • 將 method 欄位變更為可為空值。
  • Duration 類別

    • 移除 Kotlin 的 Duration 類別的所有用法,並替換為 long。這項變更可提升與 Java 的互通性。
  • 引用中繼資料

    • 將先前在 CitationMetadata 中宣告的所有欄位包裝到名為 Citation 的新類別中。您可以在 CitationMetadata 的 citations 清單中找到引用內容。這項變更可讓各平台上的型別更一致。
  • 計算權杖

    • 將 totalBillableCharacters 欄位變更為可為空值。
  • 計費字元總數

    • 將 CountTokensResponse 中的 totalBillableCharacters 屬性變更為選用,以反映未傳送任何字元的情況。
  • 例項化模型

    • 將 requestOptions 參數移至參數清單結尾,與其他平台保持一致。
  • Live API

    • 移除了列舉類別 ResponseModality 的 UNSPECIFIED 值。請改用 null。

    • 「LiveGenerationConfig.setResponseModalities」已重新命名為「LiveGenerationConfig.setResponseModality」。

    • 移除 LiveContentResponse.Status 類別,並將狀態欄位巢狀化為 LiveContentResponse 的屬性。

    • 移除 LiveContentResponse 類別,改為提供與模型回應相符的 LiveServerMessage 子類別。

    • 將 LiveModelFutures.connect 變更為回傳 ListenableFuture<LiveSessionFutures>,而不是 ListenableFuture<LiveSession>。

  • 變更各種 Java 建構工具方法,現在可正確傳回其類別的例項,而非 void。

Web

  • 列舉

    • 已從下列列舉中移除值:HarmCategory、BlockThreshold、HarmProbability、HarmSeverity、BlockReason 和 FinishReason。
  • 封鎖原因

    • 將 PromptFeedback 中的 blockReason 變更為選用。

只有在開始使用 Gemini Developer API (而非 Agent Platform Gemini API (formerly Vertex AI)) 時,才需要進行變更:

  • 安全性設定

    • 移除不支援的 SafetySetting.method 用法。
  • 內嵌資料

    • 移除不支援的 InlineDataPart.videoMetadata 用途。

Dart

  • 列舉

    • 從下列列舉中移除值:HarmCategory、HarmProbability、BlockReason 和 FinishReason。
  • 資料部分

    • 將 DataPart 重新命名為 InlineDataPart,並將 static data 函式重新命名為 inlineData,以便與其他平台保持一致。
  • 要求選項

    • 由於 timeout 無法運作,因此已移除 RequestOptions。我們會在不久後重新加入,但會移至 GenerativeModel 類型,以便與其他平台保持一致。
  • 停止序列

    • 將 GenerationConfig 中的 stopSequences 參數變更為選用,並預設為 null,而非空陣列。
  • 引用資料

    • 在 CitationMetadata 中,將 citationSources 屬性重新命名為 citations。為配合其他平台,CitationSource 型別已重新命名為 Citation。
  • 不必要的公開類型、方法和屬性

    • 移除下列意外公開的類型、方法和屬性:defaultTimeout、CountTokensResponseFields、parseCountTokensResponse、parseEmbedContentResponse、parseGenerateContentResponse、parseContent、BatchEmbedContentsResponse、ContentEmbedding、EmbedContentRequest 和 EmbedContentResponse。
  • 計算權杖

    • 從 countTokens 函式中移除不再需要的額外欄位。只需 contents。
  • 例項化模型

    • 將 systemInstruction 參數移至參數清單結尾,以便與其他平台保持一致。
  • 嵌入功能

    • 從模型中移除不支援的嵌入功能 (embedContent 和 batchEmbedContents)。

Unity

「Vertex AI in Firebase」不支援 Unity。

瞭解如何開始使用 Firebase AI Logic SDK for Unity。

遷移時可能發生的錯誤

遷移至 Firebase AI Logic 的正式版時,如果未按照本遷移指南完成所有必要變更,可能會發生錯誤。

403 錯誤:Requests to this API firebasevertexai.googleapis.com ... are blocked.

如果收到 403 錯誤,且錯誤訊息為「Requests to this API firebasevertexai.googleapis.com ... are blocked.」,通常表示 Firebase 設定檔或物件中的 Firebase API 金鑰,未在您嘗試使用的產品許可清單中加入必要 API。

請確認應用程式使用的 Firebase API 金鑰,已將所有必要 API 加入金鑰的「API 限制」允許清單。如果是 Firebase AI Logic,Firebase API 金鑰的許可清單中至少要有 Firebase AI Logic API。當您在 Firebase 控制台中啟用必要 API 時,系統應已自動將這個 API 加入 API 金鑰的許可清單。

您可以在 Google Cloud 控制台的「APIs & Services」(API 和服務) >「Credentials」(憑證) 面板中,查看所有 API 金鑰。


提供有關 Firebase AI Logic 的使用體驗意見回饋