Tworzenie aplikacji i funkcji opartych na AI z wykorzystaniem wnioskowania hybrydowego za pomocą Firebase AI Logic. Wnioskowanie hybrydowe umożliwia przeprowadzanie wnioskowania za pomocą modeli na urządzeniu, gdy są one dostępne, i bezproblemowe przełączanie się na modele hostowane w chmurze w innych przypadkach.
W tej wersji dostępna jest wnioskowanie hybrydowe za pomocą Firebase AI Logicpakietu SDK klienta na potrzeby internetu z obsługą wnioskowania na urządzeniu w Chrome na komputerze.
Zalecane przypadki użycia i obsługiwane funkcje
Zalecane przypadki użycia:
Korzystanie z modelu na urządzeniu do wnioskowania zapewnia:
- Zwiększona prywatność
- Kontekst lokalny
- Wnioskowanie bez opłat
- Funkcje offline
Korzystanie z funkcji hybrydowych:
- Docieraj do 100% odbiorców niezależnie od dostępności modelu urządzenia
Obsługiwane funkcje wnioskowania na urządzeniu:
- Generowanie treści w jednej turze, strumieniowanie i niestrumieniowanie
- Generowanie tekstu na podstawie danych wejściowych zawierających tylko tekst
- generowanie tekstu na podstawie danych wejściowych w postaci tekstu i obrazu, w szczególności obrazów w formatach JPEG i PNG;
- Generowanie uporządkowanych danych wyjściowych, w tym JSON i wyliczeń
Rozpocznij
Z tego przewodnika dowiesz się, jak zacząć korzystać z Firebase AI Logicpakietu SDK do internetu, aby przeprowadzać wnioskowanie hybrydowe.
Wnioskowanie przy użyciu modelu na urządzeniu korzysta z interfejsu Prompt API w Chrome, natomiast wnioskowanie przy użyciu 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 interfejs Prompt API do wnioskowania na urządzeniu
Pobierz najnowszą kompilację Chrome Beta.
Wnioskowanie na urządzeniu jest dostępne w Chrome w wersji 138 i nowszych.
Włącz interfejs Prompt API w 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 hoście lokalnym znajdziesz w dokumentacji Chrome. Opcjonalnie możesz dołączyć do programu wczesnego dostępu do Chrome, aby przekazywać opinie.
Włącz model multimodalny na urządzeniu, ustawiając tę flagę:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
: Ustaw wartość Włączono.
Sprawdź interfejs API lokalnie:
Uruchom ponownie Chrome.
Otwórz Narzędzia dla deweloperów > Konsola.
Wykonaj zapytanie:
await LanguageModel.availability();
Sprawdź, czy dane wyjściowe to
available
,downloading
lubdownloadable
. .Jeśli wynik to
downloadable
, możesz rozpocząć pobieranie modelu, uruchamiającawait LanguageModel.create();
. W przeciwnym razie pierwsze żądanie wnioskowania na urządzeniu spowoduje rozpoczęcie pobierania modelu w tle, co może potrwać kilka minut.
Krok 2. Skonfiguruj projekt Firebase i połącz aplikację z Firebase
Zaloguj się w Firebasekonsoli, a potem wybierz projekt Firebase.
W konsoli Firebase otwórz stronę Firebase AI Logic.
Kliknij Rozpocznij, aby uruchomić procedurę, która pomoże Ci skonfigurować wymagane interfejsy API i zasoby w projekcie.
Wybierz dostawcę „Gemini API”, którego chcesz używać z pakietami SDK Firebase AI Logic. Gemini Developer API jest zalecany dla nowych użytkowników. Jeśli chcesz, możesz później dodać informacje rozliczeniowe lub skonfigurować Vertex AI Gemini API.
Gemini Developer API – rozliczenia opcjonalne (dostępne w bezpłatnym planie cenowym Spark, z możliwością późniejszego przejścia na wyższy poziom)
Konsola włączy wymagane interfejsy API i utworzy w Twoim projekcie Geminiklucz interfejsu API.
Nie dodawaj tego klucza interfejsu API Gemini do kodu aplikacji. Więcej informacjiVertex AI Gemini API – wymagane rozliczenia (wymaga planu cenowego Blaze z płatnością za wykorzystanie)
Konsola pomoże Ci skonfigurować rozliczenia i włączyć w projekcie wymagane interfejsy API.
Jeśli w procesie w konsoli pojawi się odpowiedni monit, 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 korzystania z modeli generatywnych. Biblioteka jest częścią pakietu Firebase JavaScript SDK dla internetu.
Zainstaluj pakiet Firebase JS SDK na potrzeby internetu za pomocą npm:
npm install --save-exact firebase@eap-ai-hybridinference
Funkcja hybrydowa jest udostępniana pod innym tagiem npm, więc pamiętaj, aby uwzględnić go w poleceniu instalacji.
Tagi są wdrażane jako wersje poprawek, więc flaga
--save-exact
informuje NPM, że nie należy automatycznie uaktualniać wersji, gdy dostępna jest nowa, potencjalnie niezwiązana z nią wersja.Zainicjuj 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. Zainicjuj usługę i utwórz instancję modelu
Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dostawcy. |
Przed wysłaniem promptu do modelu Gemini zainicjuj usługę dla 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łączał się na model hostowany w chmurze.only_on_device
: konfiguruje pakiet SDK tak, aby używał modelu na urządzeniu lub zgłaszał wyjątek.only_in_cloud
: konfiguruje pakiet SDK tak, aby nigdy nie używał modelu na urządzeniu.
Domyślnie, gdy używasz symbolu prefer_on_device
lub only_in_cloud
, model hostowany w chmurze to 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 do modelu żądania prompta
W tej sekcji znajdziesz przykłady wysył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 w postaci tekstu i obrazu (multimodalnych)
Jeśli chcesz generować dane wyjściowe o strukturze (np. JSON lub wyliczenia), użyj jednego z tych przykładów „generowania tekstu” i dodatkowo skonfiguruj model tak, aby odpowiadał zgodnie z podanym schematem.
Generowanie tekstu na podstawie danych wejściowych zawierających tylko tekst
Zanim wypróbujesz ten przykład, upewnij się, że masz za sobą sekcję Pierwsze kroki w tym przewodniku. |
Możesz użyć
generateContent()
do wygenerowania tekstu na podstawie 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 wejściowych w postaci tekstu i obrazu (multimodalnych)
Zanim wypróbujesz ten przykład, upewnij się, że masz za sobą sekcję Pierwsze kroki w tym przewodniku. |
Możesz użyć generateContent()
, aby wygenerować tekst na podstawie prompta zawierającego pliki tekstowe i pliki z obrazem. W tym celu podaj mimeType
każdego pliku wejściowego i 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żywać alternatywnych trybów wnioskowania, zastępować domyślny model rezerwowy i używać konfiguracji modelu do kontrolowania odpowiedzi.
Korzystanie z alternatywnych trybów wnioskowania
W przykładach powyżej użyto trybu prefer_on_device
, aby skonfigurować pakiet SDK do korzystania z modelu na urządzeniu, jeśli jest dostępny, lub do przełączania się na model hostowany 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 zgłosi błąd, jeśli model na urządzeniu nie będzie dostę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 rezerwowego
Jeśli używasz trybu prefer_on_device
, pakiet SDK przełączy się na model hostowany w chmurze, jeśli model na urządzeniu będzie niedostępny. Domyślny model rezerwowy hostowany w chmurze to gemini-2.0-flash-lite
. Ten model hostowany w chmurze jest też domyślnym, gdy używasz trybuonly_in_cloud
.
Aby określić alternatywny domyślny model hostowany w chmurze, możesz użyć opcji konfiguracji inCloudParams
:
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.5-flash"
}
});
Znajdź nazwy wszystkich obsługiwanych modeli Gemini.
Kontrolowanie odpowiedzi za pomocą konfiguracji modelu
W każdym żądaniu wysyłanym do modelu możesz przesłać konfigurację modelu, aby określić, jak ma on 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ą.
Ustawianie konfiguracji modelu hostowanego w chmurze
Użyj opcji
inCloudParams
, aby skonfigurować model Gemini hostowany w chmurze. 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
}
});
Ustawianie konfiguracji modelu na urządzeniu
Pamiętaj, że wnioskowanie z użyciem modelu na urządzeniu korzysta z interfejsu Prompt API w Chrome.
Użyj opcji
onDeviceParams
, aby skonfigurować model na urządzeniu. Dowiedz się więcej o dostępnych parametrach.
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
onDeviceParams: {
createOptions: {
temperature: 0.8,
topK: 8
}
}
});
Konfigurowanie uporządkowanych danych wyjściowych
Generowanie danych wyjściowych o strukturze (np. JSON i wyliczenia) jest obsługiwane w przypadku wnioskowania z użyciem modeli hostowanych w chmurze i na urządzeniu.
W przypadku wnioskowania hybrydowego użyj obu tych elementów:inCloudParams
i onDeviceParams
, aby skonfigurować model tak, aby odpowiadał w formacie strukturalnym. W przypadku pozostałych trybów używaj tylko odpowiedniej konfiguracji.
W przypadku
inCloudParams
: określ odpowiedniresponseMimeType
(w tym przykładzieapplication/json
) orazresponseSchema
, którego ma używać model.W przypadku
onDeviceParams
: określresponseConstraint
, którego ma używać model.
Dane wyjściowe JSON
W tym przykładzie dostosowano ogólny przykład danych wyjściowych w formacie JSON do wnioskowania hybrydowego:
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
}
}
});
Wynik w formie wyliczenia
Jak wyżej, ale z dostosowaniem dokumentacji dotyczącej danych wyjściowych wyliczenia do wnioskowania hybrydowego:
// ...
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 w przypadku wnioskowania na urządzeniu
W wersji eksperymentalnej nie wszystkie funkcje pakietu Web SDK są dostępne w przypadku wnioskowania na urządzeniu. Te funkcje nie są jeszcze obsługiwane w przypadku wnioskowania na urządzeniu (ale zwykle są dostępne w przypadku wnioskowania w chmurze).
Generowanie tekstu z plików graficznych w formatach innych niż JPEG i PNG
- Może przełączyć się na model hostowany w chmurze, ale w trybie
only_on_device
wystąpi błąd.
- Może przełączyć się na model hostowany w chmurze, ale w trybie
generowanie tekstu na podstawie danych wejściowych audio, wideo i dokumentów (np. plików PDF);
- Może przełączyć się na model hostowany w chmurze, ale w trybie
only_on_device
wystąpi błąd.
- Może przełączyć się na model hostowany w chmurze, ale w trybie
Generowanie obrazów za pomocą modeli Gemini lub Imagen
- Może przełączyć się na model hostowany w chmurze, ale w trybie
only_on_device
wystąpi błąd.
- Może przełączyć się na model hostowany w chmurze, ale w trybie
Przesyłanie plików za pomocą adresów URL w żądaniach multimodalnych. Pliki musisz przekazywać jako dane wbudowane do modeli na urządzeniu.
Czat wieloetapowy
- Może przełączyć się na model hostowany w chmurze, ale w trybie
only_on_device
wystąpi błąd.
- Może przełączyć się na model hostowany w chmurze, ale w trybie
Dwukierunkowe przesyłanie strumieniowe za pomocą Gemini Live API
- Pamiętaj, że nie jest to obsługiwane przez Firebase AI Logicpakiet SDK klienta na potrzeby internetu, nawet w przypadku modeli hostowanych w chmurze.
Korzystanie z „narzędzi”, w tym wywoływania funkcji i groundingu w wyszukiwarce Google
- Już wkrótce!
Liczba tokenów
- Zawsze zwraca błąd. Liczba będzie się różnić w przypadku modeli hostowanych w chmurze i na urządzeniu, więc nie ma intuicyjnego rozwiązania rezerwowego.
Monitorowanie AI w konsoli Firebase na potrzeby 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 Firebase AI Logicpakietu SDK klienta na potrzeby internetu.
Prześlij opinię o korzystaniu z usługi Firebase AI Logic