Crea app e funzionalità basate sull'IA con inferenza ibrida utilizzando Firebase AI Logic. L'inferenza ibrida consente di eseguire l'inferenza utilizzando i modelli on-device, se disponibili, e di eseguire il fallback ai modelli ospitati sul cloud in caso contrario.
Con questa release, l'inferenza ibrida è disponibile utilizzando l'SDK client Firebase AI Logic per il web con il supporto dell'inferenza on-device per Chrome su computer.
Casi d'uso consigliati e funzionalità supportate
Casi d'uso consigliati:
L'utilizzo di un modello on-device per le offerte di inferenza:
- Privacy migliorata
- Contesto locale
- Inferenza senza costi
- Funzionalità offline
Utilizzo delle offerte di funzionalità ibride:
- Raggiungi il 100% del pubblico, indipendentemente dalla disponibilità del modello di dispositivo
Funzionalità e capacità supportate per l'inferenza on-device:
- Generazione di contenuti a un solo passaggio, in streaming e non
- Generazione di testo da input di solo testo
- Generazione di testo da input di testo e immagini, in particolare tipi di immagini di input JPEG e PNG
- Generazione di output strutturato, inclusi JSON ed enum
Inizia
Questa guida mostra come iniziare a utilizzare l'SDK Firebase AI Logic per il web per eseguire l'inferenza ibrida.
L'inferenza che utilizza un modello on-device utilizza l'API Prompt di Chrome, mentre l'inferenza che utilizza un modello ospitato sul cloud utilizza il provider Gemini API scelto (Gemini Developer API o Vertex AI Gemini API).
Passaggio 1: configura Chrome e l'API Prompt per l'inferenza sul dispositivo
Scarica la compilazione più recente di Chrome Dev.
L'inferenza sul dispositivo è disponibile a partire dalla versione 138 di Chrome.
Abilita l'API Prompt per la tua istanza di Chrome impostando i seguenti flag:
chrome://flags/#optimization-guide-on-device-model
: impostato su Enabled.chrome://flags/#prompt-api-for-gemini-nano
: impostato su Enabled.
Scopri di più sull'utilizzo delle API su localhost nella documentazione di Chrome. Se vuoi, puoi partecipare al Early Preview Program (EPP) di Chrome per fornire un feedback.
Attiva il modello multimodale on-device impostando il seguente flag:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
: impostato su Enabled.
Verifica l'API localmente:
Riavvia Chrome.
Apri Strumenti per sviluppatori > Console.
Esegui questo comando:
await LanguageModel.availability();
Assicurati che l'output sia
available
,downloading
odownloadable
. .Se l'output è
downloadable
, puoi avviare il download del modello eseguendoawait LanguageModel.create();
. In caso contrario, la prima richiesta per l'inferenza on-device avvierà un download del modello in background, che potrebbe richiedere diversi minuti.
Passaggio 2: configura un progetto Firebase e connetti la tua app a Firebase
Accedi alla console Firebase, quindi seleziona il tuo progetto Firebase.
Nella console Firebase, vai alla pagina Firebase AI Logic.
Fai clic su Inizia per avviare un flusso di lavoro guidato che ti aiuta a configurare le API richieste e le risorse per il tuo progetto.
Seleziona il provider "Gemini API" che vuoi utilizzare con gli SDK Firebase AI Logic. Se vuoi, puoi sempre configurare e utilizzare l'altro provider di API in un secondo momento.
Gemini Developer API - fatturazione facoltativa (disponibile nel piano tariffario Spark senza costi)
La console abiliterà le API richieste e creerà una chiave API Gemini nel progetto.
Non aggiungere questa chiave API Gemini al codice di base della tua app. Scopri di più.Puoi configurare la fatturazione in un secondo momento se vuoi eseguire l'upgrade del piano tariffario.
Vertex AI Gemini API: fatturazione obbligatoria (richiede il piano tariffario Blaze con pagamento a consumo)
La console ti aiuterà a configurare la fatturazione e ad attivare le API obbligatorie nel tuo progetto.
Se richiesto nel flusso di lavoro della console, segui le istruzioni sullo schermo per registrare l'app e collegarla a Firebase.
Vai al passaggio successivo di questa guida per aggiungere l'SDK alla tua app.
Passaggio 3: aggiungi l'SDK
La libreria Firebase fornisce l'accesso alle API per interagire con i modelli generativi. La libreria è inclusa nell'SDK Firebase JavaScript per il web.
Installa l'SDK Firebase JS per il web utilizzando npm.
La funzionalità ibrida viene rilasciata con un tag npm diverso, quindi assicurati di includerla nel comando di installazione.
npm install firebase@eap-ai-hybridinference
Inizializza Firebase nella tua app:
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);
Passaggio 4: inizializza il servizio e crea un'istanza del modello
Fai clic sul tuo fornitore Gemini API per visualizzare i contenuti e il codice specifici del fornitore in questa pagina. |
Prima di inviare un prompt a un modello Gemini, inizializza il servizio per il provider dell'API scelto e crea un'istanza GenerativeModel
.
Imposta mode
su una delle seguenti opzioni:
prefer_on_device
: configura l'SDK in modo da utilizzare il modello on-device, se disponibile, o passa al modello ospitato sul cloud.only_on_device
: configura l'SDK in modo da utilizzare il modello on-device o lancia un'eccezione.only_in_cloud
: configura l'SDK in modo da non utilizzare mai il modello on-device.
Per impostazione predefinita, quando utilizzi prefer_on_device
o only_in_cloud
, il modello ospitato su cloud è gemini-2.0-flash-lite
, ma puoi sostituire il valore predefinito.
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" });
Inviare una richiesta di prompt a un modello
Questa sezione fornisce esempi di come inviare vari tipi di input per generare diversi tipi di output, tra cui:
Se vuoi generare output strutturato (ad esempio JSON o enum), usa uno dei seguenti esempi di "generazione di testo" e, inoltre, configura il modello in modo che risponda in base a uno schema fornito.
Generare testo da input di solo testo
Prima di provare questo esempio, assicurati di aver completato la sezione Inizia di questa guida. |
Puoi utilizzare
generateContent()
per generare testo da un prompt contenente testo:
// 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();
Genera testo da input di testo e immagini (multimodale)
Prima di provare questo esempio, assicurati di aver completato la sezione Inizia di questa guida. |
Puoi utilizzare generateContent()
per generare testo da un prompt contenente file di testo e immagini, fornendo il mimeType
di ogni
file di input e il file stesso.
I tipi di immagini di input supportati per l'inferenza on-device sono PNG e 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();
Cos'altro puoi fare?
Oltre agli esempi precedenti, puoi anche utilizzare modalità di inferenza alternative, sostituire il modello di riserva predefinito e utilizzare la configurazione del modello per controllare le risposte.
Utilizzare modalità di inferenza alternativa
Gli esempi precedenti hanno utilizzato la modalità prefer_on_device
per configurare l'SDK in modo da utilizzare un modello on-device, se disponibile, o un modello ospitato sul cloud. L'SDK offre due modalità di inferenza alternative: only_on_device
e only_in_cloud
.
Utilizza la modalità
only_on_device
in modo che l'SDK possa utilizzare solo un modello on-device. In questa configurazione, l'API restituirà un errore se non è disponibile un modello sul dispositivo.const model = getGenerativeModel(ai, { mode: "only_on_device" });
Utilizza la modalità
only_in_cloud
in modo che l'SDK possa utilizzare solo un modello ospitato sul cloud.const model = getGenerativeModel(ai, { mode: "only_in_cloud" });
Sostituire il modello di riserva predefinito
Quando utilizzi la modalità prefer_on_device
, l'SDK utilizzerà un
modello ospitato sul cloud se non è disponibile un modello on-device. Il modello predefinito ospitato su cloud di riserva è gemini-2.0-flash-lite
. Questo modello ospitato su cloud è anche quello predefinito quando utilizzi la modalitàonly_in_cloud
.
Puoi utilizzare l'opzione di configurazione inCloudParams
per specificare un modello predefinito alternativo ospitato sul cloud:
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.0-flash"
}
});
Trova i nomi dei modelli per tutti i modelli Gemini supportati.
Utilizzare la configurazione del modello per controllare le risposte
In ogni richiesta a un modello, puoi inviare una configurazione del modello per controllare come il modello genera una risposta. I modelli ospitati sul cloud e i modelli on-device offeriscono opzioni di configurazione diverse.
La configurazione viene mantenuta per tutta la durata dell'istanza. Se vuoi usare una configurazione diversa, crea una nuova istanza GenerativeModel
con quella configurazione.
Impostare la configurazione per un modello ospitato su cloud
Utilizza l'opzione
inCloudParams
per configurare un modello Gemini ospitato su cloud. Scopri di più sui
parametri disponibili.
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
inCloudParams: {
model: "gemini-2.0-flash"
temperature: 0.8,
topK: 10
}
});
Impostare la configurazione per un modello on-device
Tieni presente che l'inferenza che utilizza un modello on-device utilizza l'API Prompt di Chrome.
Utilizza l'opzione
onDeviceParams
per configurare un modello on-device. Scopri di più sui
parametri disponibili.
const model = getGenerativeModel(ai, {
mode: 'prefer_on_device',
onDeviceParams: {
createOptions: {
temperature: 0.8,
topK: 8
}
}
});
Imposta la configurazione per l'output strutturato
La generazione di output strutturato (come JSON ed enum) è supportata per l'inferenza utilizzando sia i modelli ospitati sul cloud sia quelli on-device.
Per l'inferenza ibrida, utilizza sia inCloudParams
sia onDeviceParams
per configurare il modello in modo che risponda con un'uscita strutturata. Per le altre modalità,
utilizza solo la configurazione applicabile.
Per
inCloudParams
: specifica ilresponseMimeType
appropriato (in questo esempio,application/json
) e ilresponseSchema
che vuoi che il modello utilizzi.Per
onDeviceParams
: specifica il valoreresponseConstraint
che vuoi che il modello utilizzi.
Output JSON
Il seguente esempio adatta l'esempio di output JSON generale per l'inferenza ibrida:
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.0-flash"
generationConfig: {
responseMimeType: "application/json",
responseSchema: jsonSchema
},
}
onDeviceParams: {
promptOptions: {
responseConstraint: jsonSchema
}
}
});
Output enum
Come sopra, ma adattando la documentazione sull'output dell'enum per l'inferenza ibrida:
// ...
const enumSchema = Schema.enumString({
enum: ["drama", "comedy", "documentary"],
});
const model = getGenerativeModel(ai, {
// ...
generationConfig: {
responseMimeType: "text/x.enum",
responseSchema: enumSchema
},
// ...
Funzionalità non ancora disponibili per l'inferenza on-device
Poiché si tratta di una release sperimentale, non tutte le funzionalità dell'SDK web sono disponibili per l'inferenza sul dispositivo. Le seguenti funzionalità non sono ancora supportate per l'inferenza on-device (ma in genere sono disponibili per l'inferenza basata su cloud).
Generazione di testo da tipi di input di file immagine diversi da JPEG e PNG
- Può eseguire il fallback al modello ospitato sul cloud. Tuttavia, la modalità
only_on_device
genera un errore.
- Può eseguire il fallback al modello ospitato sul cloud. Tuttavia, la modalità
Generazione di testo da input audio, video e documenti (ad esempio PDF)
- Può eseguire il fallback al modello ospitato sul cloud. Tuttavia, la modalità
only_on_device
genera un errore.
- Può eseguire il fallback al modello ospitato sul cloud. Tuttavia, la modalità
Generazione di immagini utilizzando i modelli Gemini o Imagen
- Può eseguire il fallback al modello ospitato sul cloud. Tuttavia, la modalità
only_on_device
genera un errore.
- Può eseguire il fallback al modello ospitato sul cloud. Tuttavia, la modalità
Fornire file utilizzando gli URL nelle richieste multimodali. Devi fornire i file come dati in linea ai modelli on-device.
Chat multi-turno
- Può eseguire il fallback al modello ospitato sul cloud. Tuttavia, la modalità
only_on_device
genera un errore.
- Può eseguire il fallback al modello ospitato sul cloud. Tuttavia, la modalità
Streaming bidirezionale con Gemini Live API
- Tieni presente che questa operazione non è supportata dall'SDK client Firebase AI Logic per il web anche per i modelli ospitati sul cloud.
Chiamata di funzione
- Presto disponibile.
Contare i token
- Genera sempre un errore. Il conteggio sarà diverso tra i modelli ospitati sul cloud e quelli on-device, quindi non esiste un'opzione di riserva intuitiva.
Monitoraggio dell'IA nella console Firebase per l'inferenza on-device.
- Tieni presente che qualsiasi inferenza che utilizza i modelli ospitati sul cloud può essere monitorata come qualsiasi altra inferenza che utilizza l'SDK client Firebase AI Logic per il web.
Inviare un feedback sulla tua esperienza con Firebase AI Logic