Twórz aplikacje i funkcje oparte na AI z wykorzystaniem wnioskowania hybrydowego za pomocą Firebase AI Logic. Wnioskowanie hybrydowe umożliwia uruchamianie wnioskowania przy użyciu modeli na urządzeniu, gdy są one dostępne, i bezproblemowe przełączanie się na modele hostowane w chmurze w innych przypadkach (i odwrotnie).
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 ofert funkcji hybrydowych:
- Docieranie do 100% odbiorców niezależnie od dostępności modelu urządzenia czy połączenia z internetem
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 wejściowych w formatach JPEG i PNG;
- Generowanie uporządkowanych danych wyjściowych, w tym plików JSON i wyliczeń
Rozpocznij
Z tego przewodnika dowiesz się, jak zacząć korzystać z Firebase AI Logicpakietu SDK do internetu, aby przeprowadzać wnioskowanie hybrydowe.
Wnioskowanie z użyciem modelu na urządzeniu korzysta z interfejsu Prompt API w Chrome, natomiast wnioskowanie z użyciem modelu hostowanego w chmurze korzysta z wybranego przez Ciebie dostawcy Gemini API (Gemini Developer API lub Vertex AI Gemini API).
Rozpocznij tworzenie aplikacji za pomocą hosta lokalnego zgodnie z opisem w tej sekcji (więcej informacji o korzystaniu z interfejsów API na hoście lokalnym znajdziesz w dokumentacji Chrome). Gdy wdrożysz funkcję, możesz opcjonalnie umożliwić użytkownikom jej wypróbowanie.
Krok 1. Skonfiguruj Chrome i interfejs Prompt API do wnioskowania na urządzeniu
Upewnij się, że używasz najnowszej wersji Chrome. Zaktualizuj w chrome://settings/help.
Wnioskowanie na urządzeniu jest dostępne w Chrome w wersji 139 i nowszych.Włącz model wielomodowy na urządzeniu, ustawiając ten flagę na Włączone:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
Uruchom ponownie Chrome.
(Opcjonalnie) Pobierz model na urządzenie przed pierwszą prośbą.
Interfejs Prompt API jest wbudowany w Chrome, ale model na urządzeniu nie jest domyślnie dostępny. Jeśli nie pobierzesz modelu przed pierwszym żądaniem wnioskowania na urządzeniu, żądanie automatycznie rozpocznie pobieranie modelu w tle.
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ć przepływ pracy z przewodnikiem, który 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 projekcie Geminiklucz interfejsu API.
Nie dodawaj tego klucza interfejsu API Gemini do kodu aplikacji. Więcej informacjiVertex AI Gemini API – wymagane płatności (wymaga planu cenowego Blaze z płatnością za wykorzystanie)
Konsola pomoże Ci skonfigurować płatności 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 interakcji z modelami generatywnymi. Biblioteka jest częścią pakietu Firebase JavaScript SDK na potrzeby internetu.
Zainstaluj pakiet Firebase JS SDK na potrzeby internetu za pomocą npm:
npm install firebaseZainicjuj 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 Gemini API dostawcę, aby wyświetlić na tej stronie treści i kod specyficzne dla tego dostawcy. |
Przed wysłaniem promptu do Gemini modelu 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.PREFER_IN_CLOUD: konfiguruje pakiet SDK tak, aby używał modelu hostowanego w chmurze, jeśli jest dostępny, lub modelu na urządzeniu.ONLY_IN_CLOUD: konfiguruje pakiet SDK tak, aby nigdy nie używał modelu na urządzeniu.
Gdy używasz PREFER_ON_DEVICE, PREFER_IN_CLOUD lub ONLY_IN_CLOUD, domyślnym modelem hostowanym w chmurze jest gemini-2.0-flash-lite
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 to use on-device model when possible
const model = getGenerativeModel(ai, { mode: InferenceMode.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, zapoznaj się z 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();
Pamiętaj, że Firebase AI Logic obsługuje też strumieniowanie odpowiedzi tekstowych za pomocą generateContentStream (zamiast generateContent).
Generowanie tekstu na podstawie danych wejściowych w postaci tekstu i obrazu (multimodalnych)
| Zanim wypróbujesz ten przykład, zapoznaj się z 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();
Pamiętaj, że Firebase AI Logic obsługuje też strumieniowanie odpowiedzi tekstowych za pomocą generateContentStream (zamiast generateContent).
Co jeszcze możesz zrobić?
Oprócz powyższych przykładów możesz też umożliwić użytkownikom wypróbowanie Twojej funkcji, korzystać z alternatywnych trybów wnioskowania, zastąpić domyślny model rezerwowy i używać konfiguracji modelu do kontrolowania odpowiedzi.
Umożliwianie użytkownikom wypróbowania funkcji
Aby umożliwić użytkownikom wypróbowanie Twojej funkcji, możesz zarejestrować się w programie Chrome Origin Trials. Pamiętaj, że okres próbny ma ograniczony czas trwania i zakres wykorzystania.
Zarejestruj się w testowaniu origin interfejsu Prompt API w Chrome. Otrzymasz token.
Podaj token na każdej stronie internetowej, na której chcesz włączyć funkcję próbną. Użyj jednej z tych opcji:
Podaj token jako metatag w tagu
<head>:<meta http-equiv="origin-trial" content="TOKEN">Podaj token jako nagłówek HTTP:
Origin-Trial: TOKENPodaj token automatycznie.
Korzystanie z alternatywnych trybów wnioskowania
W przykładach 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 powrotu do modelu hostowanego w chmurze. Pakiet SDK oferuje 3 alternatywne tryby wnioskowania:ONLY_ON_DEVICE, ONLY_IN_CLOUD i PREFER_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: InferenceMode.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: InferenceMode.ONLY_IN_CLOUD });Użyj trybu
PREFER_IN_CLOUD, aby pakiet SDK próbował używać modelu hostowanego w chmurze, ale w razie jego niedostępności (np. gdy urządzenie jest offline) wracał do modelu na urządzeniu.const model = getGenerativeModel(ai, { mode: InferenceMode.PREFER_IN_CLOUD });
Określanie, czy użyto wnioskowania na urządzeniu czy w chmurze
Jeśli używasz trybów wnioskowania PREFER_ON_DEVICE lub PREFER_IN_CLOUD, warto wiedzieć, który tryb został użyty w przypadku poszczególnych żądań. Te informacje są podawane przez właściwość inferenceSource każdej odpowiedzi (dostępną od wersji 12.5.0 pakietu SDK JavaScript).
Gdy uzyskasz dostęp do tej właściwości, zwrócona wartość będzie wynosić ON_DEVICE lub IN_CLOUD.
// ...
console.log('You used: ' + result.response.inferenceSource);
console.log(result.response.text());
Zastępowanie domyślnego modelu rezerwowego
Domyślny model hostowany w chmurze to gemini-2.0-flash-lite
Ten model jest zapasowym modelem hostowanym w chmurze, gdy używasz trybu PREFER_ON_DEVICE. Jest to też model domyślny, gdy używasz trybu ONLY_IN_CLOUD lub PREFER_IN_CLOUD.
Za pomocą opcji konfiguracji
inCloudParams możesz określić alternatywny domyślny model hostowany w chmurze.
const model = getGenerativeModel(ai, {
mode: InferenceMode.INFERENCE_MODE,
inCloudParams: {
model: "GEMINI_MODEL_NAME"
}
});
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ą GenerativeModel instancję 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: InferenceMode.INFERENCE_MODE,
inCloudParams: {
model: "GEMINI_MODEL_NAME"
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: InferenceMode.INFERENCE_MODE,
onDeviceParams: {
createOptions: {
temperature: 0.8,
topK: 8
}
}
});
Ustawianie konfiguracji danych wyjściowych o strukturze (np. JSON)
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: InferenceMode.INFERENCE_MODE,
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 typu wyliczeniowego do wnioskowania hybrydowego:
// ...
const enumSchema = Schema.enumString({
enum: ["drama", "comedy", "documentary"],
});
const model = getGenerativeModel(ai, {
// ...
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
},
// ...
});
// ...
Funkcje niedostępne jeszcze 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_DEVICEwystą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_DEVICEwystą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_DEVICEwystą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_DEVICEwystą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
Udostępnianie modelowi narzędzi, które pomagają mu generować odpowiedzi (np. wywoływanie funkcji, wykonywanie kodu i grounding z użyciem wyszukiwarki Google).
Liczba tokenów
- Zawsze zgłasza błąd. Liczba będzie się różnić w przypadku modeli hostowanych w chmurze i modeli 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 każde wnioskowanie z użyciem modeli hostowanych w chmurze można monitorować tak samo jak inne wnioskowania z użyciem Firebase AI Logicpakietu SDK klienta na potrzeby internetu.
Prześlij opinię o korzystaniu z usługi Firebase AI Logic