L'API Prompt

Pubblicata: 20 maggio 2025

Spiegazione Web Estensioni Stato di Chrome Intenzione
GitHub Sperimentale In EPP Chrome 138 Visualizza Intento di partecipare all'esperimento

Con l'API Prompt, puoi inviare richieste in linguaggio naturale a Gemini Nano nel browser.

Esistono molti modi per utilizzare l'API Prompt. In un sito web o un'applicazione web, puoi creare:

  • Ricerca basata sull'IA: rispondi a domande in base ai contenuti di una pagina web.
  • Feed di notizie personalizzati: crea un feed che classifichi dinamicamente gli articoli con le categorie e consenta agli utenti di filtrare i contenuti in base a queste.

Queste sono solo alcune possibilità e non vediamo l'ora di scoprire cosa creerai.

Esamina i requisiti hardware

Le API Language Detector e Translator funzionano su computer solo in Chrome.

Le API Prompt, Summarizer, Writer e Rewriter funzionano in Chrome quando vengono soddisfatte le seguenti condizioni:

  • Sistema operativo: Windows 10 o 11; macOS 13 o versioni successive (da Ventura in poi); o Linux. Chrome per Android, iOS e ChromeOS non è ancora supportato dalle nostre API basate su Gemini Nano.
  • Spazio di archiviazione: almeno 22 GB sul volume contenente il tuo profilo Chrome.
  • GPU: almeno 4 GB di VRAM.
  • Rete: dati illimitati o una connessione senza limiti di traffico.

Questi requisiti sono previsti per te durante il processo di sviluppo e per gli utenti che lavorano con le funzionalità che crei.

Utilizzare l'API Prompt

Prima di utilizzare questa API, devi confermare di aver letto le Norme relative agli usi vietati dell'IA generativa di Google.

Nel LanguageModel spazio dei nomi sono disponibili due funzioni:

  • availability() per verificare le funzionalità del modello e se è disponibile.
  • create() per avviare una sessione del modello linguistico.

Download modello

L'API Prompt utilizza il modello Gemini Nano in Chrome. Sebbene l'API sia integrata in Chrome, il modello viene scaricato separatamente la prima volta che un'origine utilizza l'API.

Per determinare se il modello è pronto per l'uso, chiama la funzione asincrona LanguageModel.availability(). Dovresti visualizzare una delle seguenti risposte:

  • "unavailable" indica che l'implementazione non supporta le opzioni richieste o non supporta affatto la richiesta di un modello linguistico.
  • "downloadable" indica che l'implementazione supporta le opzioni richieste, ma dovrà scaricare qualcosa (ad esempio il modello linguistico stesso o una messa a punto) prima di poter creare una sessione utilizzando queste opzioni.
  • "downloading" indica che l'implementazione supporta le opzioni richieste, ma dovrà completare un'operazione di download in corso prima di poter creare una sessione utilizzando queste opzioni.
  • "available" indica che l'implementazione supporta le opzioni richieste senza richiedere nuovi download.

Per attivare il download del modello e creare la sessione del modello linguistico, chiama la funzione LanguageModel.create() asincrona. Se la risposta a availability() è 'downloadable', è buona prassi monitorare l'avanzamento del download. In questo modo, puoi informare l'utente nel caso in cui il download richieda del tempo.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

Funzionalità del modello

La funzione params() ti informa sui parametri del modello linguistico. L'oggetto ha i seguenti campi:

  • defaultTopK: il valore predefinito top-K (valore predefinito: 3).
  • maxTopK: il valore top-K massimo (8).
  • defaultTemperature: la temperatura predefinita (1.0). Il valore della temperatura deve essere compreso tra 0.0 e 2.0.
  • maxTemperature: la temperatura massima.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}

Creare una sessione

Una volta che l'API Prompt può essere eseguita, crea una sessione con la funzione create(). Puoi richiedere informazioni al modello con le funzioni prompt() o promptStreaming().

Personalizzare la sessione

Ogni sessione può essere personalizzata con topK e temperature utilizzando un oggetto opzionale options. I valori predefiniti per questi parametri vengono restituiti da LanguageModel.params().

const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
  temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
  topK: params.defaultTopK,
});

L'oggetto opzioni facoltativo della funzione create() accetta anche un campo signal, che ti consente di passare un AbortSignal per distruggere la sessione.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await LanguageModel.create({
  signal: controller.signal,
})

Prompt iniziali

Con i prompt iniziali, puoi fornire al modello linguistico il contesto delle interazioni precedenti, ad esempio per consentire all'utente di riprendere una sessione memorizzata dopo il riavvio del browser.

const session = await LanguageModel.create({
  initialPrompts: [
    { role: 'system', content: 'You are a helpful and friendly assistant.' },
    { role: 'user', content: 'What is the capital of Italy?' },
    { role: 'assistant', content: 'The capital of Italy is Rome.'},
    { role: 'user', content: 'What language is spoken there?' },
    { role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
  ]
});

Limiti di sessioni

Una determinata sessione del modello linguistico ha un numero massimo di token che può elaborare. Puoi controllare l'utilizzo e i progressi verso questo limite utilizzando le seguenti proprietà nell'oggetto sessione:

console.log(`${session.inputUsage}/${session.inputQuota}`);

Persistenza della sessione

Ogni sessione tiene traccia del contesto della conversazione. Le interazioni precedenti vengono prese in considerazione per le interazioni future finché la finestra del contesto della sessione non è completa.

const session = await LanguageModel.create({
  initialPrompts: [{
    role: "system",
    content: "You are a friendly, helpful assistant specialized in clothing choices."
  }]
});

const result1 = await session.prompt(
  "What should I wear today? It is sunny. I am unsure between a t-shirt and a polo."
);
console.log(result1);

const result2 = await session.prompt(
  "That sounds great, but oh no, it is actually going to rain! New advice?"
);
console.log(result2);

Clonare una sessione

Per preservare le risorse, puoi clonare una sessione esistente con la funzione clone(). Il contesto della conversazione viene reimpostato, ma il prompt iniziale rimane inalterato. La funzione clone() accetta un oggetto opzionale options con un campo signal, che ti consente di passare un AbortSignal per distruggere la sessione clonata.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const clonedSession = await session.clone({
  signal: controller.signal,
});

Chiedi al modello

Puoi richiedere informazioni al modello con le funzioni prompt() o promptStreaming().

Output non in streaming

Se prevedi un risultato breve, puoi utilizzare la funzione prompt() che restituisce la risposta quando è disponibile.

// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();

if (available !== 'unavailable') {
  const session = await LanguageModel.create();

  // Prompt the model and wait for the whole result to come back.
  const result = await session.prompt("Write me a poem!");
  console.log(result);
}

Output in streaming

Se prevedi una risposta più lunga, devi utilizzare la funzione promptStreaming(), che ti consente di mostrare i risultati parziali man mano che vengono inviati dal modello. La funzione promptStreaming() restituisce un ReadableStream.

const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  const session = await LanguageModel.create();

  // Prompt the model and stream the result:
  const stream = session.promptStreaming('Write me an extra-long poem!');
  for await (const chunk of stream) {
    console.log(chunk);
  }
}

Interrompere l'esecuzione di un prompt

Sia prompt() che promptStreaming() accettano un secondo parametro facoltativo con un campo signal, che ti consente di interrompere l'esecuzione dei prompt.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const result = await session.prompt(
  'Write me a poem!',
  { signal: controller.signal }
);

Terminare una sessione

Chiama destroy() per liberare risorse se non hai più bisogno di una sessione. Quando una sessione viene distrutta, non può più essere utilizzata ed eventuali esecuzioni in corso vengono interrotte. Ti consigliamo di conservare la sessione se intendi chiedere spesso al modello di eseguire un'azione, poiché la creazione di una sessione può richiedere del tempo.

await session.prompt(
  "You are a friendly, helpful assistant specialized in clothing choices."
);

session.destroy();

// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
  "What should I wear today? It is sunny, and I am unsure between a
  t-shirt and a polo."
);

Funzionalità multimodali

L'API Prompt supporta gli input audio e di immagini da Chrome 138 Canary per sperimentazioni locali. L'API restituisce un output di testo.

Con queste funzionalità, puoi:

  • Consenti agli utenti di trascrivere i messaggi audio inviati in un'applicazione di chat.
  • Descrivi un'immagine caricata sul tuo sito web per utilizzarla in una didascalia o in un testo alternativo.
const session = await LanguageModel.create({
  // { type: "text" } is not necessary to include explicitly, unless
  // you also want to include expected input languages for text.
  expectedInputs: [
    { type: "audio" },
    { type: "image" }
  ]
});

const referenceImage = await (await fetch("/reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");

const response1 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },
    { type: "image", value: referenceImage },
    { type: "image", value: userDrawnImage }
  ]
}]);

console.log(response1);

const audioBlob = await captureMicrophoneInput({ seconds: 10 });

const response2 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "My response to your critique:" },
    { type: "audio", value: audioBlob }
  ]
}]);

Demo multimodali

Consulta la demo di Prompt audio Mediarecorder per l'utilizzo dell'API Prompt con input audio e la demo di Prompt immagine Canvas per l'utilizzo dell'API Prompt con input di immagini.

Strategia per il rendimento

L'API Prompt per il web è ancora in fase di sviluppo. Durante la creazione di questa API, consulta le nostre best practice sulla gestione delle sessioni per un rendimento ottimale.

Feedback

Il tuo feedback ci aiuta a definire il futuro di questa API e i miglioramenti di Gemini Nano. Potrebbero anche essere create API di attività dedicate (ad esempio API per la trascrizione audio o la descrizione delle immagini), in modo da soddisfare le tue esigenze e quelle dei tuoi utenti.

Partecipare e condividere feedback

Il tuo contributo può influire direttamente sulla modalità di creazione e implementazione delle versioni future di questa API e di tutte le API di IA integrate.