Tworzenie aplikacji i funkcji opartych na AI z użyciem hybrydowego wnioskowania za pomocą Firebase AI Logic. Hybrydowe wnioskowanie umożliwia uruchamianie wnioskowania z wykorzystaniem modeli na urządzeniu (jeśli są dostępne) i bezproblemowe przechodzenie do modeli hostowanych w chmurze.
W tej wersji hybrydowe wnioskowanie jest dostępne za pomocą pakietu SDK klienta Firebase AI Logic dla sieci z obsługą wnioskowania na urządzeniu w Chrome na komputery.
Zalecane przypadki użycia i obsługiwane funkcje
Zalecane przypadki użycia:
Korzystanie z modelu na urządzeniu do wnioskowania:
- zwiększona prywatność,
- Kontekst lokalny
- Bezpłatne wnioskowanie
- Funkcje offline
Korzystanie z funkcji hybrydowych:
- Docieraj do 100% swoich odbiorców niezależnie od dostępności modelu urządzenia
Obsługiwane funkcje i możliwości wnioskowania na urządzeniu:
- Generowanie treści jednoobrotowych, strumieniowych i niestrumieniowych
- Generowanie tekstu na podstawie danych wejściowych zawierających tylko tekst
- generowanie tekstu na podstawie tekstu i obrazu, w tym obrazów w formatach JPEG i PNG;
- generowanie uporządkowanych danych wyjściowych, w tym w formacie JSON i enumeracji;
Rozpocznij
Z tego przewodnika dowiesz się, jak zacząć korzystać z pakietu SDK Firebase AI Logic do wykonywania hybrydowej analizy w internecie.
Wnioskowanie z wykorzystaniem modelu na urządzeniu korzysta z Prompt API w Chrome, natomiast wnioskowanie z wykorzystaniem modelu hostowanego w chmurze korzysta z wybranego przez Ciebie dostawcy Gemini API (Gemini Developer API lub Vertex AI Gemini API).
Krok 1. Skonfiguruj Chrome i Prompt API do działania na urządzeniu
Pobierz najnowszą wersję Chrome Beta.
Wnioskowanie na urządzeniu jest dostępne w Chrome w wersji 138 lub nowszej.
Włącz interfejs Prompt API w swojej instancji Chrome, ustawiając te flagi:
chrome://flags/#optimization-guide-on-device-model
: ustaw wartość Włączono.chrome://flags/#prompt-api-for-gemini-nano
: ustaw wartość Włączono.
Więcej informacji o używaniu interfejsów API na localhost znajdziesz w dokumentacji Chrome. Opcjonalnie możesz dołączyć do programu wczesnego testowania Chrome (EPP), aby przesłać opinię.
Aby włączyć model multimodalny na urządzeniu, ustaw tę flagę:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
: ustaw na Włączono.
Weryfikacja interfejsu API lokalnie:
Uruchom ponownie Chrome.
Kliknij Narzędzia dla deweloperów > Konsola.
Wykonaj zapytanie:
await LanguageModel.availability();
Upewnij się, że dane wyjściowe to
available
,downloading
lubdownloadable
. .Jeśli dane wyjściowe to
downloadable
, możesz rozpocząć pobieranie modelu, wykonując polecenieawait LanguageModel.create();
. W przeciwnym razie pierwsze żądanie dotyczące wnioskowania na urządzeniu spowoduje w tle pobranie modelu, co może potrwać kilka minut.
Krok 2. Skonfiguruj projekt Firebase i połącz aplikację z Firebase.
Zaloguj się w konsoli Firebase, a następnie wybierz projekt Firebase.
W konsoli Firebase otwórz stronę Firebase AI Logic.
Kliknij Rozpocznij, aby uruchomić skonfigurowany przepływ pracy, który pomoże Ci skonfigurować wymagane interfejsy API i zasoby dla projektu.
Wybierz dostawcę „Gemini API”, którego chcesz używać z pakietami SDK Firebase AI Logic. Gemini Developer API jest zalecany dla początkujących użytkowników. Jeśli chcesz, możesz dodać dane rozliczeniowe lub skonfigurować Vertex AI Gemini APIpóźniej.
Gemini Developer API – opcjonalne rozliczenia (dostępne w ramach bezpłatnego planu cenowego Spark; w razie potrzeby możesz później przejść na płatny plan).
Konsola włączy wymagane interfejsy API i utworzy w Twoim projekcie klucz interfejsu API Gemini.
Nie dodawaj tego klucza interfejsu API Gemini do kodu aplikacji. Więcej informacjiVertex AI Gemini API – wymagane rozliczenia (wymagane jest opłacanie interfejsów API na bieżąco w ramach planu Blaze).
Konsola pomoże Ci skonfigurować rozliczenia i włączyć wymagane interfejsy API w projekcie.
Jeśli w ramach procesu w konsoli pojawi się odpowiedni komunikat, postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby zarejestrować aplikację i połączyć ją z Firebase.
Aby dodać pakiet SDK do aplikacji, przejdź do następnego kroku w tym przewodniku.
Krok 3. Dodaj pakiet SDK
Biblioteka Firebase zapewnia dostęp do interfejsów API do interakcji z modelami generatywnymi. Biblioteka jest zawarta w pakiecie Firebase JavaScript SDK na potrzeby internetu.
Zainstaluj pakiet Firebase JS SDK na potrzeby Internetu za pomocą npm:
npm install --save-exact firebase@eap-ai-hybridinference
Funkcja hybrydowa jest dostępna pod innym tagiem npm, więc pamiętaj, aby uwzględnić go w komandach instalacji.
Tagi są implementowane jako wersje poprawek, więc flaga
--save-exact
informuje NPM, aby nie aktualizować automatycznie, gdy dostępna jest nowa, być może niezwiązana wersja.Inicjalizacja Firebase w aplikacji:
import { initializeApp } from "firebase/app"; // 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);
Krok 4. Inicjuj usługę i utwórz instancję modelu.
Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod związane z tym dostawcą. |
Zanim wyślesz prompt do modelu Gemini, zainicjuj usługę wybranego dostawcy interfejsu API i utwórz instancję GenerativeModel
.
Ustaw wartość mode
na jedną z tych opcji:
prefer_on_device
: konfiguruje pakiet SDK tak, aby używał modelu na urządzeniu, jeśli jest dostępny, lub przełączył się na model hostowany w chmurze.only_on_device
: konfiguruje pakiet SDK do korzystania z modelu na urządzeniu lub zgłasza wyjątek.only_in_cloud
: skonfiguruj pakiet SDK tak, aby nigdy nie używał modelu na urządzeniu.
Domyślnie, gdy używasz prefer_on_device
lub only_in_cloud
, model hostowany w chmurze ma wartość gemini-2.0-flash-lite
, ale możesz zastąpić ustawienie domyślne.
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
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: "prefer_on_device" });
Wysyłanie żądania prompta do modelu
W tej sekcji znajdziesz przykłady przesyłania różnych typów danych wejściowych w celu generowania różnych typów danych wyjściowych, w tym:
- Generowanie tekstu na podstawie danych wejściowych zawierających tylko tekst
- Generowanie tekstu na podstawie danych wejściowych multimodalnych (tekst i obraz)
Jeśli chcesz wygenerować dane wyjściowe w uporządkowanej formie (np. w formacie JSON lub enum), użyj jednego z tych przykładów „generowania tekstu” i dodatkowo skonfiguruj model, aby odpowiadał zgodnie z dostarczonym schematem.
Generowanie tekstu na podstawie danych wejściowych zawierających tylko tekst
Zanim spróbujesz użyć tego przykładu, przeczytaj sekcję Wprowadzenie w tym przewodniku. |
Możesz użyć
generateContent()
do wygenerowania tekstu z prompta zawierającego tekst:
// 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();
Generowanie tekstu na podstawie danych multimodalnych (tekstowo-obrazowych)
Zanim spróbujesz użyć tego przykładu, przeczytaj sekcję Wprowadzenie w tym przewodniku. |
Możesz użyć prompta generateContent()
, aby wygenerować tekst z prompta zawierającego pliki tekstowe i obrazowe. W tym celu podaj mimeType
każdego pliku wejściowego oraz sam plik.
Obsługiwane typy obrazów wejściowych do wnioskowania na urządzeniu to PNG i 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 {
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();
Co jeszcze możesz zrobić?
Oprócz powyższych przykładów możesz też użyć alternatywnych trybów wnioskowania, zastąpić domyślny model zapasowy i skonfigurować model, aby kontrolować odpowiedzi.
Używanie alternatywnych trybów wnioskowania
W przykladach powyżej użyto trybu prefer_on_device
, aby skonfigurować pakiet SDK do używania modelu na urządzeniu (jeśli jest dostępny) lub do korzystania z modelu hostowanego w chmurze. Pakiet SDK oferuje 2 alternatywne tryby wnioskowania: only_on_device
i only_in_cloud
.
Użyj trybu
only_on_device
, aby pakiet SDK mógł korzystać tylko z modelu na urządzeniu. W tej konfiguracji interfejs API zwróci błąd, jeśli model na urządzeniu jest niedostępny.const model = getGenerativeModel(ai, { mode: "only_on_device" });
Użyj trybu
only_in_cloud
, aby pakiet SDK mógł korzystać tylko z modelu hostowanego w chmurze.const model = getGenerativeModel(ai, { mode: "only_in_cloud" });
Zastępowanie domyślnego modelu zastępczego
Jeśli używasz trybu prefer_on_device
, pakiet SDK użyje modelu hostowanego w chmurze, jeśli model na urządzeniu jest niedostępny. Domyślny model zapasowy hostowany w chmurze to gemini-2.0-flash-lite
. Ten model hostowany w chmurze jest też domyślnie używany w trybie only_in_cloud
.
Opcję konfiguracji inCloudParams
możesz użyć, aby określić alternatywny domyślny model hostowany w chmurze:
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.5-flash"
}
});
Znajdź nazwy wszystkich obsługiwanych modeli Gemini.
Używanie konfiguracji modelu do kontrolowania odpowiedzi
W każdym żądaniu wysłanym do modelu możesz dołączyć konfigurację modelu, aby określić, jak model ma generować odpowiedź. Modele hostowane w chmurze i modele na urządzeniu oferują różne opcje konfiguracji.
Konfiguracja jest utrzymywana przez cały okres istnienia instancji. Jeśli chcesz użyć innej konfiguracji, utwórz nową instancję GenerativeModel
z tą konfiguracją.
Konfigurowanie modelu hostowanego w chmurze
Aby skonfigurować model Gemini hostowany w chmurze, użyj opcji inCloudParams
. Dowiedz się więcej o dostępnych parametrach.
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.5-flash"
temperature: 0.8,
topK: 10
}
});
Konfigurowanie modelu na urządzeniu
Pamiętaj, że wnioskowanie z użyciem modelu na urządzeniu korzysta z interfejsu Prompt API w Chrome.
Aby skonfigurować model na urządzeniu, użyj opcji onDeviceParams
. Dowiedz się więcej o dostępnych parametrach.
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
onDeviceParams: {
createOptions: {
temperature: 0.8,
topK: 8
}
}
});
Konfigurowanie danych uporządkowanych
Generowanie uporządkowanych danych wyjściowych (np. w formacie JSON i enum) jest obsługiwane w przypadku wnioskowania z wykorzystaniem modeli hostowanych w chmurze i na urządzeniu.
W przypadku hybrydowego wnioskowania użyj zarówno parametru inCloudParams
, jak i onDeviceParams
, aby skonfigurować model w taki sposób, aby odpowiadał w formie danych ustrukturyzowanych. W przypadku innych trybów użyj tylko odpowiedniej konfiguracji.
W przypadku
inCloudParams
: podaj odpowiednią wartośćresponseMimeType
(w tym przykładzieapplication/json
) oraz wartośćresponseSchema
, której model ma używać.W przypadku
onDeviceParams
: podajresponseConstraint
, którego ma używać model.
Dane wyjściowe JSON
W tym przykładzie ogólny przykład danych wyjściowych w formacie JSON jest dostosowany do hybrydowego wnioskowania:
import {
getAI,
getGenerativeModel,
Schema
} from "firebase/ai";
const jsonSchema = Schema.object({
properties: {
characters: Schema.array({
items: Schema.object({
properties: {
name: Schema.string(),
accessory: Schema.string(),
age: Schema.number(),
species: Schema.string(),
},
optionalProperties: ["accessory"],
}),
}),
}
});
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.5-flash"
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
Wyjście typu wyliczeniowego
Podobnie jak wyżej, ale w przypadku wnioskowania hybrydowego dostosuj dokumentację dotyczącą wyjścia enum:
// ...
const enumSchema = Schema.enumString({
enum: ["drama", "comedy", "documentary"],
});
const model = getGenerativeModel(ai, {
// ...
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
},
// ...
Funkcje, które nie są jeszcze dostępne na potrzeby wnioskowania na urządzeniu
Ponieważ jest to wersja eksperymentalna, nie wszystkie funkcje pakietu SDK na potrzeby Internetu są dostępne do korzystania z inferencji na urządzeniu. Te funkcje nie są jeszcze obsługiwane w ramach wnioskowania na urządzeniu (ale są zwykle dostępne w przypadku wnioskowania w chmurze).
Generowanie tekstu na podstawie plików obrazów innych niż JPEG i PNG
- Może wrócić do modelu hostowanego w chmurze. Tryb
only_on_device
spowoduje jednak błąd.
- Może wrócić do modelu hostowanego w chmurze. Tryb
generowanie tekstu na podstawie danych wejściowych w postaci dźwięku, wideo i dokumentów (np. plików PDF);
- Może korzystać z modelu hostowanego w chmurze, ale tryb
only_on_device
spowoduje błąd.
- Może korzystać z modelu hostowanego w chmurze, ale tryb
generowanie obrazów za pomocą modeli Gemini lub Imagen,
- Może wrócić do modelu hostowanego w chmurze. Tryb
only_on_device
spowoduje jednak błąd.
- Może wrócić do modelu hostowanego w chmurze. Tryb
Przesyłanie plików za pomocą adresów URL w żądaniach multimodalnych. Musisz przesłać pliki jako dane wbudowane w modele na urządzeniu.
Czat wieloetapowy
- Może korzystać z modelu hostowanego w chmurze, ale tryb
only_on_device
spowoduje błąd.
- Może korzystać z modelu hostowanego w chmurze, ale tryb
Transmisja dwukierunkowa z urządzeniem Gemini Live API
- Pamiętaj, że pakiet SDK klienta Firebase AI Logic na potrzeby przeglądarki nie obsługuje tej funkcji nawet w przypadku modeli hostowanych w chmurze.
Wywoływanie funkcji
- Już wkrótce!
Liczba tokenów
- Zawsze zwraca błąd. Liczba wyświetleń będzie się różnić w przypadku modeli hostowanych w chmurze i na urządzeniu, więc nie ma intuicyjnego rozwiązania zastępczego.
Monitorowanie AI w konsoli Firebase do wnioskowania na urządzeniu.
- Pamiętaj, że wszelkie wnioskowanie z użyciem modeli hostowanych w chmurze można monitorować tak samo jak inne wnioskowanie z użyciem pakietu SDK klientaFirebase AI Logic na potrzeby sieci.
Przesłanie opinii o użytkowaniu usługi Firebase AI Logic