Możesz tworzyć aplikacje i funkcje internetowe oparte na AI z wnioskowaniem hybrydowym za pomocą Firebase AI Logic. Wnioskowanie hybrydowe umożliwia przeprowadzanie wnioskowania przy użyciu modeli na urządzeniu, gdy są one dostępne, a w przeciwnym razie płynne przełączanie się na modele hostowane w chmurze (i odwrotnie).
Na tej stronie dowiesz się, jak zacząć korzystać z pakietu SDK klienta. Po zakończeniu standardowej konfiguracji zapoznaj się z dodatkowymi opcjami i możliwościami konfiguracji.
Pamiętaj, że wnioskowanie na urządzeniu za pomocą Firebase AI Logic jest obsługiwane w przypadku aplikacji internetowych korzystających z pakietu SDK Firebase AI Logic w wersji 12.5.0 lub nowszej i działających w Chrome na komputerze (wersja 139 lub nowsza).
Przejdź do przykładowych kodów
Przypadki użycia i obsługiwane funkcje
W zależności od przypadków użycia aplikacji możesz korzystać z kilku zalet funkcji na urządzeniu lub funkcji hybrydowych:
Zalety korzystania z modelu na urządzeniu do wnioskowania:
- Zwiększona prywatność
- Kontekst lokalny
- Bezpłatne wnioskowanie
- Funkcje offline
Zalety podejścia hybrydowego:
- zapewnić podobne wrażenia użytkownika aplikacji niezależnie od urządzenia, z którego korzysta;
- poprawić dostępność funkcji opartych na generatywnej AI niezależnie od połączenia z internetem, limitów czy możliwości urządzenia;
Obsługiwane możliwości wnioskowania na urządzeniu
Wnioskowanie na urządzeniu obsługuje tylko generowanie tekstu w jednej turze (nie czat) (z danymi wyjściowymi przesyłanymi strumieniowo lub nie), a konkretnie te funkcje:
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 formacie JPEG i PNG.
generowanie uporządkowanych danych wyjściowych, w tym JSON i typów wyliczeniowych;
Zapoznaj się z listą funkcji, które nie są jeszcze obsługiwane w przypadku wnioskowania hybrydowego lub na urządzeniu, u dołu tej strony.
Obsługiwane interfejsy API i platformy
W sekcjach poniżej znajdziesz informacje o obsługiwanych interfejsach API, platformach i przeglądarkach.
Obsługiwane interfejsy API do wnioskowania w chmurze i na urządzeniu
Wnioskowanie w chmurze korzysta z wybranego dostawcy Gemini API (Gemini Developer API lub Agent Platform Gemini API (formerly Vertex AI)).
Wnioskowanie na urządzeniu korzysta z interfejsu Prompt API z Chrome.
Obsługiwane platformy i przeglądarki
Aby korzystać z wnioskowania na urządzeniu (które używa interfejsu Prompt API z Chrome), użytkownik aplikacji musi korzystać z Chrome na komputerze (w wersji 139 lub nowszej). Więcej informacji znajdziesz w dokumentacji Chrome.
Pierwsze kroki z localhost
Te kroki opisują ogólną konfigurację wymaganą w przypadku każdej obsługiwanej prośby o prompt, którą chcesz wysłać.
Więcej informacji o używaniu interfejsów API na hoście lokalnym znajdziesz w dokumentacji Chrome.
Krok 1. Skonfiguruj Chrome i interfejs Prompt API na potrzeby wnioskowania na urządzeniu
Upewnij się, że używasz najnowszej wersji Chrome. Zaktualizuj na stronie chrome://settings/help.
Wnioskowanie na urządzeniu jest dostępne w Chrome w wersji 139 lub nowszej.Włącz multimodalny model na urządzeniu, ustawiając tę flagę na Włączone:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
Uruchom ponownie Chrome.
(Opcjonalnie) Pobierz model na urządzeniu przed pierwszym żądaniem.
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 konsoli Firebase i wybierz projekt w Firebase.
W konsoli Firebase otwórz Usługi AI > AI Logic.
Kliknij Rozpocznij, aby uruchomić proces, który pomoże Ci skonfigurować wymagane interfejsy API i zasoby w projekcie.
Jeśli pojawi się taka prośba, postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby zarejestrować aplikację i dodać do niej konfigurację Firebase.
Gdy pojawi się prośba o wybranie „dostawcy interfejsu Gemini API”, zalecamy wybranie Gemini Developer API, który umożliwia szybkie rozpoczęcie pracy bez opłat.
W każdej chwili możesz skonfigurować Agent Platform Gemini API (formerly Vertex AI) (i wymagane informacje rozliczeniowe).
Kontynuuj proces, aby skonfigurować wymagane interfejsy API i powiązane usługi dla Firebase AI Logic.
Ten etap przepływu pracy automatycznie egzekwuje Firebase App Check dla AI Logic, czyli krytycznej usługi, która pomaga chronić Gemini API, gdy jest on bezpośrednio dostępny z Twojej aplikacji. Na początku (patrz kroki w dalszej części tego przewodnika) musisz skonfigurować dostawcę debugowania App Check na potrzeby lokalnego programowania, gdy App Check jest egzekwowany.
Przejdź do następnego kroku w tym przewodniku, aby dodać do aplikacji wymagane pakiety SDK.
Krok 3. Dodaj pakiet SDK
Biblioteka Firebase zapewnia dostęp do interfejsów API umożliwiających interakcję z modelami generatywnymi. Biblioteka jest częścią pakietu Firebase JavaScript SDK dla aplikacji internetowych.
Zainstaluj pakiet Firebase JS SDK dla aplikacji internetowych za pomocą npm:
npm install firebaseZainicjuj Firebase w aplikacji:
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);
Krok 4. Skonfiguruj dostawcę debugowania App Check na potrzeby programowania lokalnego
W ramach procesu konfiguracji z przewodnikiem dla AI Logic w konsoli Firebase App Check jest automatycznie wymuszane, aby chronić Gemini API. W przypadku programowania lokalnego musisz skonfigurować App Check dostawcę debugowania, aby pomijać atestację, zachowując jednocześnie wymuszanie App Check.
Oto jak używać dostawcy debugowania podczas interaktywnego uruchamiania aplikacji z localhost (np. podczas programowania lokalnego):
W kompilacji do debugowania włącz tryb debugowania, ustawiając
self.FIREBASE_APPCHECK_DEBUG_TOKENnatrueprzed zainicjowaniem App Check. Na przykład:self.FIREBASE_APPCHECK_DEBUG_TOKEN = true; initializeAppCheck(firebaseApp, { /* App Check options */ });Otwórz aplikację internetową lokalnie i uruchom narzędzia dla programistów w przeglądarce. W konsoli debugowania zobaczysz token debugowania:
AppCheck debug token: "123a4567-b89c-12d3-e456-789012345678". You will need to safelist it in the Firebase console for it to work.Zarejestruj token debugowania w App Check:
W konsoli Firebase otwórz kartę Zabezpieczenia > Sprawdzanie aplikacji > Aplikacje.
Znajdź aplikację, kliknij rozszerzone menu (), a następnie wybierz Zarządzaj tokenami debugowania.
Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby zarejestrować token debugowania.
Szczegółowe informacje o dostawcy debugowania (w tym o tym, jak uzyskać nowy token debugowania) znajdziesz w oficjalnej dokumentacji App Check.
Krok 5. Zainicjuj usługę i utwórz instancję modelu
|
Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dotyczące tego dostawcy. |
Zanim wyślesz do modelu prompt, skonfiguruj te elementy:
Zainicjuj usługę dla wybranego dostawcy interfejsu API.
Utwórz instancję
GenerativeModel. Ustawmodena jedną z tych wartości:PREFER_ON_DEVICE: użyj modelu na urządzeniu, jeśli jest dostępny. W przeciwnym razie użyj modelu hostowanego w chmurze.ONLY_ON_DEVICE: użyj modelu na urządzeniu, jeśli jest dostępny. W przeciwnym razie wygeneruj wyjątek.PREFER_IN_CLOUD: użyj modelu hostowanego w chmurze, jeśli jest dostępny. W przeciwnym razie wróć do modelu na urządzeniu.ONLY_IN_CLOUD: użyj modelu hostowanego w chmurze, jeśli jest dostępny. W przeciwnym razie wygeneruj wyjątek.
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 });
Krok 6. Zainicjuj model na urządzeniu
Musisz wywołać funkcję initializeDeviceModel() po interakcji użytkownika ze stroną (np. kliknięciu przycisku) lub w jej trakcie i przed wysłaniem prompta do modelu. Więcej informacji o wymaganiu aktywacji użytkownika znajdziesz w dokumentacji 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}%`)
);
Krok 7. Wyślij prompta do modelu
W tej sekcji dowiesz się, jak wysyłać różne typy danych wejściowych, aby generować różne typy 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 wygenerować uporządkowane dane wyjściowe (np. JSON lub typy wyliczeniowe), użyj jednego z poniższych 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(), aby wygenerować tekst 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ż strumieniowe przesyłanie 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 z prompta zawierającego pliki tekstowe i graficzne, podając 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 {
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();
Pamiętaj, że Firebase AI Logic obsługuje też strumieniowe przesyłanie odpowiedzi tekstowych za pomocą generateContentStream (zamiast generateContent).
Co jeszcze możesz zrobić?
W przypadku środowisk hybrydowych możesz korzystać z różnych dodatkowych opcji i funkcji konfiguracji:
Określ, czy wnioskowanie zostało przeprowadzone na urządzeniu czy w chmurze.
generować uporządkowane dane wyjściowe (np. JSON i typy wyliczeniowe);
Funkcje, które nie są jeszcze obsługiwane
Nie wszystkie funkcje pakietu Web SDK lub modeli hostowanych w chmurze są dostępne w przypadku wnioskowania hybrydowego lub na urządzeniu.
Funkcje, które nie są jeszcze obsługiwane w przypadku implementacji hybrydowych
W przypadku implementacji hybrydowych nie można używać tych funkcji (ani na urządzeniu, ani w ramach kreacji zastępczej w chmurze):
Gemini Live API: dwukierunkowe strumieniowanie w czasie rzeczywistym nie jest obsługiwane.
Szablony promptów serwera: zarządzane szablony promptów serwera nie są obsługiwane.
Zliczanie tokenów: nie należy polegać na zliczaniu tokenów, ponieważ liczba będzie się różnić w przypadku modeli hostowanych w chmurze i modeli na urządzeniu, więc nie ma intuicyjnego rozwiązania zastępczego.
Funkcje, które nie są jeszcze obsługiwane w przypadku wnioskowania na urządzeniu
Wnioskowanie na urządzeniu nie obsługuje jeszcze tych funkcji, ale są one dostępne w przypadku modeli hostowanych w chmurze.
Generowanie obrazów za pomocą modeli Gemini Nano Banana
- 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 z plików graficznych 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 multimodalnych danych wejściowych w postaci dźwięku, obrazu i dokumentó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
podawanie plików za pomocą adresów URL w żądaniach multimodalnych; Pliki musisz udostępniać modelom na urządzeniu jako dane wbudowane.
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
udostępnianie modelowi narzędzi, które pomogą mu wygenerować odpowiedź (np. wywoływanie funkcji, wykonywanie kodu, kontekst adresu URL, grounding za pomocą
Google Search i grounding za pomocąGoogle Maps );Monitorowanie wykorzystania AI w konsoli Firebase nie pokazuje żadnych danych dotyczących wnioskowania na urządzeniu (w tym dzienników urządzenia). Jednak każde wnioskowanie, które korzysta z modelu hostowanego w chmurze, można monitorować tak samo jak inne wnioskowania za pomocą Firebase AI Logic.
Dodatkowe ograniczenia
Oprócz powyższych ograniczeń wnioskowanie na urządzeniu ma te ograniczenia:
Użytkownik aplikacji musi korzystać z Chrome na komputerze (w wersji 139 lub nowszej) z włączonymi wymaganymi flagami.
Model na urządzeniu wymaga wystarczającej ilości miejsca na urządzeniu użytkownika, aby można było pobrać model początkowy.
Prześlij opinię o korzystaniu z usługi Firebase AI Logic