Firebase AI Logic 及其用戶端 SDK 先前稱為「Vertex AI in Firebase」。為了更準確地反映我們擴充的服務和功能 (例如,我們現在支援 Gemini Developer API!),我們將服務重新命名並重新包裝為 Firebase AI Logic。
如要直接從行動或網頁應用程式安全存取 Google 的生成式 AI 模型,您現在可以選擇「Gemini API」供應商,包括已推出許久的 Vertex AI Gemini API,或現在的 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 只能使用 Vertex AI Gemini API。
新的 Firebase AI Logic SDK 可讓您選擇要直接從行動或網頁應用程式呼叫哪個「Gemini API」供應商,也就是 Gemini Developer API 或 Vertex AI Gemini API。
請查看兩個 Gemini API 供應商之間的差異,特別是支援的功能、價格和費率限制。舉例來說,Gemini Developer API 不支援使用 Cloud Storage 網址提供檔案,但如果您想利用免費層級和合理配額,這可能會是個不錯的選擇。
步驟 2:啟用必要的 API
確認已在 Firebase 專案中啟用所有必要的 API,以便使用您選擇的「Gemini API」供應器。
請注意,您可以在專案中同時啟用這兩個 API 供應器。
登入 Firebase 控制台,然後選取 Firebase 專案。
按一下「開始使用」即可啟動引導式工作流程,協助您為專案設定必要的 API和資源。
選取要與 Firebase AI Logic SDK 搭配使用的「Gemini API」供應商。您之後隨時可以設定並使用其他 API 供應商,如果需要的話。
請繼續參閱本轉移指南,更新應用程式中的程式庫和初始化功能。
步驟 3:更新應用程式中使用的程式庫
更新應用程式的程式碼庫,以便使用 Firebase AI Logic 程式庫。
Swift
在 Xcode 中保持開啟應用程式專案,然後使用下列任一選項將 Firebase 套件更新至 11.13.0 以上版本:
選項 1:更新所有套件:依序前往「File」>「Packages」>「Update to Latest Package Versions」。
選項 2:個別更新 Firebase:前往「Package Dependencies」專區,找到 Firebase 套件。在 Firebase 套件上按一下滑鼠右鍵,然後選取「Update Package」。
確認 Firebase 套件現在顯示 11.13.0 以上版本。如果不是,請確認您指定的套件需求是否允許更新至 11.13.0 以上版本。
在專案編輯器中選取應用程式目標,然後前往「Framework、Library 和嵌入內容」部分。
新增程式庫:選取「+」按鈕,然後從 Firebase 套件中新增 FirebaseAI。
完成應用程式遷移作業後 (請參閱本指南的其餘部分),請務必移除舊的程式庫:
選取「FirebaseVertexAI-Preview」,然後按下「—」按鈕。
Kotlin
在模組 (應用程式層級) 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:33.14.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") }將 Android 專案與 Gradle 檔案同步處理。
請注意,如果您選擇不使用 Firebase Android BoM,請新增 firebase-ai
程式庫的依附元件,並接受 Android Studio 建議的最新版本。
Java
在模組 (應用程式層級) 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:33.14.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") }將 Android 專案與 Gradle 檔案同步處理。
請注意,如果您選擇不使用 Firebase Android BoM,請新增 firebase-ai
程式庫的依附元件,並接受 Android Studio 建議的最新版本。
Web
使用 npm 取得最新版的 Firebase JS SDK for Web:
npm i firebase@latest
或
yarn add firebase@latest
在匯入程式庫的所有位置,請更新匯入陳述式,改為使用
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
請在 Flutter 專案目錄中執行下列指令,更新為使用
pubspec.yaml
檔案中的firebase_ai
套件:flutter pub add firebase_ai
重建 Flutter 專案:
flutter run
完成應用程式遷移作業後 (請參閱本指南的其他部分),請務必刪除舊套件:
flutter pub remove firebase_vertexai
Unity
「Vertex AI in Firebase」不支援 Unity。
步驟 4:更新應用程式中的初始化
按一下 Gemini API 供應商,即可在這個頁面上查看供應商專屬內容和程式碼。 |
更新如何為所選 API 供應商初始化服務,並建立 GenerativeModel
例項。
Swift
import FirebaseAI
// 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-2.0-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-2.0-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-2.0-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-2.0-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-2.0-flash');
Unity
「Vertex AI in Firebase」不支援 Unity。
請注意,視您使用的功能而定,您可能不會一律建立 GenerativeModel
例項。
- 如要存取 Imagen 模型,請建立
ImagenModel
例項。
步驟 5:根據您使用的功能更新程式碼
這個步驟會說明您可能需要根據所使用的功能進行哪些變更。
如果您使用 Cloud Storage 網址, 您在本次遷移中改用 Gemini Developer API,則必須更新多模態要求,將檔案做為內嵌資料納入 (或使用影片的 YouTube 網址)。
我們針對「Vertex AI in Firebase」SDK 的 GA 版本推出了幾項變更。使用 Firebase AI Logic SDK 時,也必須進行相同的變更。請查看下列清單,瞭解您可能需要在程式碼中進行哪些變更,以便採用 Firebase AI Logic SDK。
所有語言和平台都必須使用
函式呼叫
如果您在 GA 之前實作這項功能,則需要更新定義結構定義的方式。建議您參閱更新版函式呼叫指南,瞭解如何編寫函式宣告。使用
responseSchema
產生結構化輸出內容 (例如 JSON)
如果您在 GA 之前實作這項功能,就必須更新結構定義方式。建議您參閱新的結構化輸出指南,瞭解如何編寫 JSON 結構定義。逾時
- 將要求的預設逾時時間變更為 180 秒。
視平台或語言而定
Swift
枚舉
將大部分
enum
類型替換為含有靜態變數的struct
。這項變更可讓 API 以回溯相容的方式進行更彈性的演進。使用switch
陳述式時,現在必須加入default:
例項,以涵蓋未知或未處理的值,包括日後新增至 SDK 的新值。已將
BlockThreshold
列舉重新命名為HarmBlockThreshold
;這個類型現在是struct
。已從下列列舉 (現在是
struct
) 中移除unknown
和unspecified
例:HarmCategory
、HarmBlockThreshold
、HarmProbability
、BlockReason
和FinishReason
。將列舉
ModelContent.Part
替換為名為Part
的通訊協定,以便以回溯相容的方式新增新類型。如需進一步瞭解這項變更,請參閱「內容部分」一節。
內容部分
移除了
ThrowingPartsRepresentable
通訊協定,���������ModelContent
的初始化器,以避免偶發的編譯器錯誤。未正確編碼的圖片在generateContent
中使用時,仍會擲回錯誤。將
ModelContent.Part
情況替換為符合Part
通訊協定的以下struct
類型:.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 的互通性。
- 移除所有 Kotlin 的
引文中繼資料
- 將先前在
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 的互通性。
- 移除所有 Kotlin 的
引文中繼資料
- 將先前在
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 (而非 Vertex AI Gemini API) 時,才需要進行變更:
安全設定
- 移除不支援的
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。
遷移作業可能發生的錯誤
在遷移至 GA 版 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 控制台的「API 和服務」 >「憑證」 面板中查看所有 API 金鑰。
針對使用 Firebase AI Logic 的體驗提供意見回饋