Twórz hybrydowe rozwiązania z modelami na urządzeniu i hostowanymi w chmurze


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.

Przejdź do przykładów kodu

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

  1. Pobierz najnowszą kompilację Chrome Beta.

    Wnioskowanie na urządzeniu jest dostępne w Chrome w wersji 138 i nowszych.

  2. 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.

  3. Włącz model multimodalny na urządzeniu, ustawiając tę flagę:

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input: Ustaw wartość Włączono.
  4. Sprawdź interfejs API lokalnie:

    1. Uruchom ponownie Chrome.

    2. Otwórz Narzędzia dla deweloperów > Konsola.

    3. Wykonaj zapytanie:

      await LanguageModel.availability();
      
    4. Sprawdź, czy dane wyjściowe to available, downloading lub downloadable. .

    5. Jeśli wynik to downloadable, możesz rozpocząć pobieranie modelu, uruchamiając await 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

  1. Zaloguj się w Firebasekonsoli, a potem wybierz projekt Firebase.

  2. W konsoli Firebase otwórz stronę Firebase AI Logic.

  3. Kliknij Rozpocznij, aby uruchomić procedurę, która pomoże Ci skonfigurować wymagane interfejsy API i zasoby w projekcie.

  4. 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 informacji

    • Vertex 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.

  5. 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.

  6. 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.

  1. 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.

  2. 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:

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 rezerwowyuż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_deviceonly_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:inCloudParamsonDeviceParams, 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 odpowiedni responseMimeType (w tym przykładzie application/json) oraz responseSchema, którego ma używać model.

  • W przypadku onDeviceParams: określ responseConstraint, 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.
  • 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.
  • 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.
  • 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.
  • 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