L'API Prompt

Pubblicato: 11 novembre 2024, ultimo aggiornamento: 20 maggio 2025

Spiegazione Web Estensioni Stato di Chrome Intenzione
GitHub Prova dell'origine In prova dell'origine Chrome 138 Visualizza Intenzione di sperimentare

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

Esistono molti modi in cui puoi utilizzare l'API Prompt nelle estensioni di Chrome. Ad esempio:

  • Eventi di calendario istantanei. Sviluppa un'estensione Chrome che estrae automaticamente i dettagli degli eventi dalle pagine web, in modo che gli utenti possano creare voci di calendario in pochi passaggi.
  • Estrazione dei contatti senza problemi. Crea un'estensione che estrae le informazioni di contatto dai siti web, consentendo agli utenti di contattare più facilmente un'attività o aggiungere dettagli al proprio elenco di contatti.
  • Filtro dei contenuti dinamici. Crea un'estensione Chrome che analizzi gli articoli di notizie e sfumi o nasconda automaticamente i contenuti in base agli argomenti definiti dall'utente.

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

Esamina i requisiti hardware

Per gli sviluppatori e gli utenti che utilizzano le funzionalità che si servono di queste API in Chrome esistono i seguenti requisiti. Altri browser potrebbero avere requisiti di funzionamento diversi.

Le API Language Detector e Translator funzionano in Chrome su computer. Queste API non funzionano sui dispositivi mobili. L'API Prompt, l'API Summarizer, l'API Writer e l'API Rewriter funzionano in Chrome quando sono soddisfatte le seguenti condizioni:

  • Sistema operativo: Windows 10 o 11; macOS 13+ (Ventura e versioni successive); o Linux. Chrome per Android, iOS e ChromeOS non è ancora supportato dalle API che utilizzano Gemini Nano.
  • Spazio di archiviazione: almeno 22 GB sul volume che contiene il tuo profilo Chrome.
  • GPU: rigorosamente più di 4 GB di VRAM.
  • Rete: dati illimitati o una connessione non misurata.

Le dimensioni esatte di Gemini Nano possono variare leggermente. Per trovare le dimensioni attuali, visita chrome://on-device-internals e vai a Stato modello. Apri il Percorso file elencato per determinare le dimensioni del modello.

Utilizzare l'API Prompt nelle estensioni

Prima di utilizzare questa API, accetta le Norme relative all'uso vietato dell'AI generativa di Google.

Nello spazio dei nomi LanguageModel sono disponibili due funzioni di estensione:

  • 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'estensione utilizza l'API.

Per determinare se il modello è pronto per l'uso, chiama la funzione asincrona LanguageModel.availability(). Dovrebbe restituire 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 un perfezionamento) 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" significa 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 asincrona LanguageModel.availability(). Se la risposta a availability() è stata 'downloadable', la best practice è ascoltare l'avanzamento del download. In questo modo, puoi informare l'utente nel caso in cui il download richieda 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 dei parametri del modello linguistico. L'oggetto ha i seguenti campi:

  • defaultTopK: Il valore predefinito top-K (valore predefinito: 3).
  • maxTopK: Il valore massimo di top-K (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, crei una sessione con la funzione create(). Puoi richiedere al modello di utilizzare la funzione prompt() o promptStreaming().

Personalizzare la sessione

Ogni sessione può essere personalizzata con topK e temperature utilizzando un oggetto opzioni facoltativo. I valori predefiniti di 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 delle opzioni facoltative 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 salvata 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 l'avanzamento verso il limite utilizzando le seguenti proprietà dell'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 contestuale della sessione non è piena.

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 intatto. La funzione clone() accetta un oggetto di opzioni facoltativo con un campo signal, che consente di passare un AbortSignal per eliminare la sessione clonata.

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

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

Richiedere al modello

Puoi richiedere al modello di utilizzare la funzione prompt() o promptStreaming().

Output non in streaming

Se prevedi un risultato breve, puoi utilizzare la funzione prompt() che restituisce la risposta non appena è 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 restituiti 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 le risorse se non hai più bisogno di una sessione. Quando una sessione viene eliminata, non può più essere utilizzata e qualsiasi esecuzione in corso viene interrotta. Potresti voler mantenere la sessione se intendi richiedere spesso al modello, poiché la creazione di una sessione può richiedere un po' di 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."
);

Demo

Per testare l'API Prompt nelle estensioni Chrome, installa l'estensione demo. Il codice sorgente dell'estensione è disponibile su GitHub.

Interfaccia demo per l'API Prompt

Partecipare e condividere feedback

Il tuo contributo può influire direttamente su come creiamo e implementiamo le versioni future di questa API e di tutte le API AI integrate.