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 na urządzeniu

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. W każdej chwili możesz skonfigurować i używać innego dostawcy interfejsu 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.

    Funkcja hybrydowa jest udostępniana pod innym tagiem npm, więc pamiętaj, aby uwzględnić go w poleceniu instalacji.

    npm install firebase@eap-ai-hybridinference
    
  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.
  • Wywoływanie funkcji

    • 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