使用 Firebase AI Logic,透過混合式推論建構 AI 輔助網頁應用程式和功能。混合式推論可讓您在可用時使用裝置端模型執行推論,並在其他情況下順暢切換至雲端託管模型 (反之亦然)。
本頁面說明如何開始使用用戶端 SDK。完成這項標準設定後,請查看其他設定選項和功能 (例如結構化輸出)。
請注意,在電腦版 Chrome 上執行的網頁應用程式支援裝置端推論。
建議用途和支援的功能
建議用途:
使用裝置端模型進行推論,可帶來以下優點:
- 強化隱私
- 查看當地特色
- 免付費推論
- 離線功能
使用混合功能可享有以下優勢:
- 無論裝置端模型是否可用或是否連上網際網路,都能觸及 100% 的目標對象
裝置端推論支援的功能和特色:
裝置端推論僅支援單輪文字生成 (非對話),並提供串流或非串流輸出。支援下列文字生成功能:
依據文字和圖片輸入內容生成文字,尤其是 JPEG 和 PNG 類型的輸入圖片
您也可以生成結構化輸出內容,包括 JSON 和列舉。
事前準備
請注意下列事項:
使用裝置端模型推論時,會使用 Chrome 的 Prompt API;使用雲端託管模型推論時,則會使用您選擇的 Gemini API 供應商 (Gemini Developer API 或 Agent Platform Gemini API (formerly Vertex AI))。
本頁說明如何開始使用 localhost 進行開發 (如要進一步瞭解如何在 localhost 上使用 API,請參閱 Chrome 說明文件中的這篇文章)。
完成這項標準設定後,請查看其他設定選項和功能 (例如結構化輸出)。
在 localhost 開始使用
這些入門步驟說明瞭傳送任何支援的提示要求時,所需的一般設定。
步驟 1:設定 Chrome 和 Prompt API,以便在裝置端執行推論
確認你使用的是新版 Chrome。請前往 chrome://settings/help 更新。
Chrome 139 以上版本支援裝置端推論。將下列旗標設為「Enabled」,啟用裝置端多模態模型:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
重新啟動 Chrome。
(選用) 在提出第一個要求前,先下載裝置端模型。
Prompt API 內建於 Chrome,但裝置端模型預設為停用。如果您在首次要求裝置端推論前尚未下載模型,系統會自動在背景開始下載模型。
步驟 2:設定 Firebase 專案,並將應用程式連結至 Firebase
登入 Firebase 控制台,然後選取 Firebase 專案。
在 Firebase 控制台,依序前往「AI Services」(AI 服務) >「 AI Logic」。
按一下「Get started」(開始使用),啟動引導式工作流程,協助您設定專案所需的 API 和資源。
如果系統提示,請按照畫面上的指示註冊應用程式,並將 Firebase 設定新增至應用程式。
系統要求您選擇「Gemini API 供應商」時,建議選取 Gemini Developer API,即可快速開始使用,不必付費。
日後隨時可以設定 Agent Platform Gemini API (formerly Vertex AI) (以及計費需求)。
繼續執行工作流程,設定 Firebase AI Logic 的必要 API 和相關聯服務。
工作流程的這個階段會自動為 AI Logic 強制執行 Firebase App Check,這項重要服務可在應用程式直接存取 Gemini API 時,協助保護。在開始使用時 (請參閱本指南後續步驟),您必須為本機開發環境設定 App Check 偵錯服務,以便強制執行 App Check。
請繼續參閱本指南的下一個步驟,將必要的 SDK 新增至應用程式。
步驟 3:新增 SDK
Firebase 程式庫提供 API,可與生成模型互動。這個程式庫包含在 Firebase JavaScript SDK for Web 中。
使用 npm 安裝 Firebase JS SDK for Web:
npm install firebase在應用程式中初始化 Firebase:
import { initializeApp } from "firebase/app"; import { initializeAppCheck } from "firebase/app-check"; // 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);
步驟 4:設定本機開發的 App Check 偵錯服務
在控制台設定 AI Logic 的引導式工作流程中,系統會自動強制執行 Firebase App Check,保護Gemini API。在本機開發時,您需要設定 App Check 偵錯服務,略過認證程序,同時維持 App Check 的強制執行。
如要在 localhost 中以互動方式執行應用程式 (例如在本機開發期間),請按照下列步驟使用偵錯服務:
在偵錯版本中,請先將
self.FIREBASE_APPCHECK_DEBUG_TOKEN設為true,再初始化 App Check,以啟用偵錯模式。例如:self.FIREBASE_APPCHECK_DEBUG_TOKEN = true; initializeAppCheck(firebaseApp, { /* App Check options */ });在本機造訪網頁應用程式,並開啟瀏覽器的開發人員工具。偵錯控制台會顯示偵錯權杖:
AppCheck debug token: "123a4567-b89c-12d3-e456-789012345678". You will need to safelist it in the Firebase console for it to work.向 App Check 註冊偵錯權杖:
在 Firebase 控制台中,依序前往「Security」(安全性) >「App Check」 >「Apps」(應用程式) 分頁標籤。
找到應用程式,按一下溢位選單 (),然後選取「Manage debug tokens」。
按照畫面上的指示註冊偵錯權杖。
如要進一步瞭解偵錯服務 (包括如何取得新的偵錯權杖),請參閱官方 App Check 文件。
步驟 5:初始化服務並建立模型執行個體
|
按一下您的Gemini API供應商,即可在這個頁面查看供應商專屬內容和程式碼。 |
向模型傳送提示要求前,請先完成下列設定:
為所選 API 供應商初始化服務。
建立
GenerativeModel執行個體。請務必將mode設為下列其中一項:PREFER_ON_DEVICE:使用裝置端模型 (如有);否則改用雲端託管模型。ONLY_ON_DEVICE:使用裝置端模型 (如有);否則擲回例外狀況。PREFER_IN_CLOUD:使用雲端託管模型 (如有);否則改用裝置端模型。ONLY_IN_CLOUD:如果雲端託管模型可用,則使用該模型;否則擲回例外狀況。
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, InferenceMode } 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
// Set the mode (for example, use the on-device model if it's available)
const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });
步驟 6:初始化裝置端模型
您必須在使用者與網頁互動 (例如點選按鈕) 之後或當下,以及向模型傳送提示要求之前,呼叫 initializeDeviceModel()。如要進一步瞭解使用者啟用要求,請參閱 Chrome 說明文件。
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, InferenceMode } 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
// Set the mode (for example, use the on-device model if it's available)
const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_ON_DEVICE });
// `initializeDeviceModel` must be called:
// (1) after or on an end-user page interaction such as a button click
// and
// (2) before any queries to the model (such as `generateContent()`)
// You may want to `await` this promise if using `ONLY_ON_DEVICE` (see note below).
model.initializeDeviceModel((val) =>
// Example: "Download progress: 72.62%""
console.log(`Download progress: ${Math.round(val*10000) / 100}%`)
);
步驟 7:向模型傳送提示要求
本節說明如何傳送各種輸入內容,生成不同類型的輸出內容,包括:
如要生成結構化輸出內容 (例如 JSON 或列舉),請使用下列其中一個「生成的文字」範例,並設定模型,讓模型根據提供的結構定義回覆。
根據純文字輸入內容生成文字
| 試用這個範例前,請務必完成本指南的「開始使用」一節。 |
您可以使用 generateContent(),根據包含文字的提示詞生成文字:
// Imports + initialization of FirebaseApp and backend service + creation of model instance
// Wrap in an async function so you can use await
async function run() {
// Provide a prompt that contains text
const prompt = "Write a story about a magic backpack."
// To generate text output, call `generateContent` with the text input
const result = await model.generateContent(prompt);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
請注意,Firebase AI Logic 也支援使用 generateContentStream (而非 generateContent) 串流文字回覆。
根據文字和圖片 (多模態) 輸入內容生成文字
| 試用這個範例前,請務必完成本指南的「開始使用」一節。 |
您可以使用 generateContent(),根據包含文字和圖片檔案的提示生成文字,並提供每個輸入檔案的 mimeType 和檔案本身。
裝置端推論支援的輸入圖片類型為 PNG 和 JPEG。
// Imports + initialization of FirebaseApp and backend service + creation of model instance
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.readAsDataURL(file);
});
return {
type: "inlineData",
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the image
const prompt = "Write a poem about this picture:";
const fileInputEl = document.querySelector("input[type=file]");
const imagePart = await fileToGenerativePart(fileInputEl.files[0]);
// To generate text output, call `generateContent` with the text and image
const result = await model.generateContent([prompt, imagePart]);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
請注意,Firebase AI Logic 也支援使用 generateContentStream (而非 generateContent) 串流文字回覆。
你還可以做些什麼?
您可以為混合式體驗使用各種額外的設定選項和功能:
裝置端推論尚不支援的功能
Web SDK 的部分功能不適用於裝置端推論。下列功能尚不支援裝置端推論 (但雲端式推論通常支援)。
使用 JPEG 和 PNG 以外的圖片檔輸入類型生成文字
- 可改用雲端託管模型,但
ONLY_ON_DEVICE模式會擲回錯誤。
- 可改用雲端託管模型,但
依據輸入的音訊、影片和文件 (例如 PDF) 生成文字
- 可改用雲端託管模型,但
ONLY_ON_DEVICE模式會擲回錯誤。
- 可改用雲端託管模型,但
使用 Gemini Nano Banana 模型生成圖片
- 可改用雲端託管模型,但
ONLY_ON_DEVICE模式會擲回錯誤。
- 可改用雲端託管模型,但
在多模態要求中使用網址提供檔案。您必須以內嵌資料的形式,將檔案提供給裝置端模型。
多輪對話
- 可改用雲端託管模型,但
ONLY_ON_DEVICE模式會擲回錯誤。
- 可改用雲端託管模型,但
使用 Gemini Live API 進行雙向串流
提供工具,協助模型生成回覆 (例如呼叫函式、執行程式碼、網址背景資訊、使用
Google Search 建立基準,以及使用Google Maps 建立基準)計算詞元數
- 一律會擲回錯誤。雲端託管和裝置端模型的計數會有所不同,因此沒有直覺的備用方案。
在 Firebase 控制台監控 AI,瞭解裝置端推論。
- 請注意,使用雲端託管模型進行的任何推論,都可以像使用 Firebase AI Logic 網頁用戶端 SDK 進行的其他推論一樣受到監控。
提供「Firebase AI Logic」使用體驗的意見回饋