L'API Prompt

Pubblicato: 20 maggio 2025, ultimo aggiornamento: 21 settembre 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 per utilizzare l'API Prompt. Ad esempio, potresti creare:

  • Ricerca basata sull'AI: risponde alle domande in base ai contenuti di una pagina web.
  • Feed di notizie personalizzati: crea un feed che classifica dinamicamente gli articoli con categorie e consente agli utenti di filtrare i contenuti.
  • Filtri dei contenuti personalizzati. Analizza gli articoli di notizie e sfoca o nasconde automaticamente i contenuti in base agli argomenti definiti dall'utente.
  • Creazione di eventi di calendario. 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.

Queste sono solo alcune delle possibilità e non vediamo l'ora di vedere 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. Le API Prompt, Summarizer, Writer, Rewriter e Proofreader funzionano in Chrome quando sono soddisfatte le seguenti condizioni:

  • Sistema operativo: Windows 10 o 11; macOS 13+ (Ventura e versioni successive); Linux; o ChromeOS (dalla piattaforma 16389.0.0 e versioni successive) su dispositivi Chromebook Plus. Chrome per Android, iOS e ChromeOS su dispositivi non Chromebook Plus non sono ancora supportati dalle API che utilizzano Gemini Nano.
  • Spazio di archiviazione: almeno 22 GB di spazio libero 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 man mano che il browser aggiorna il modello. Per determinare le dimensioni attuali, visita la pagina chrome://on-device-internals.

Utilizzare l'API Prompt

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. Prima di utilizzare questa API, accetta le Norme relative all'uso vietato dell'IA generativa di Google.

Per determinare se il modello è pronto per l'uso, chiama LanguageModel.availability().

const availability = await LanguageModel.availability();

Prima di poter scaricare il modello, deve esserci un'interazione dell'utente, ad esempio un clic, un tocco o la pressione di un tasto.

Se la risposta è downloadable o downloading, il modello e le API sono disponibili, ma devono essere scaricati prima di poter utilizzare le funzionalità. L'utente deve interagire con la pagina (ad esempio fare clic, toccare o premere un tasto) per consentire il download.

Per scaricare e istanziare il modello, chiama la funzione create().

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

Se la risposta a availability() è stata downloading, ascolta l'avanzamento del download e informa l'utente, poiché il download potrebbe richiedere tempo.

Parametri del modello

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

  • defaultTopK: il valore predefinito di top-K.
  • maxTopK: il valore massimo top-K.
  • defaultTemperature: la temperatura predefinita.
  • maxTemperature: la temperatura massima.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}

Creare una sessione

Una volta che l'API Prompt può essere eseguita, crei una sessione con la funzione create().

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,
});

Aggiungere contesto con i 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. [...]',
    },
  ],
});

Limitare le risposte con un prefisso

Puoi aggiungere un ruolo "assistant", oltre ai ruoli precedenti, per elaborare le risposte precedenti del modello. Ad esempio:

const followup = await session.prompt([
  {
    role: "user",
    content: "I'm nervous about my presentation tomorrow"
  },
  {
    role: "assistant",
    content: "Presentations are tough!"
  }
]);

In alcuni casi, anziché richiedere una nuova risposta, potresti voler precompilare parte del messaggio di risposta del ruolo "assistant". Questo può essere utile per guidare il modello linguistico a utilizzare un formato di risposta specifico. Per farlo, aggiungi prefix: true al messaggio del ruolo "assistant" finale. Ad esempio:

const characterSheet = await session.prompt([
  {
    role: 'user',
    content: 'Create a TOML character sheet for a gnome barbarian',
  },
  {
    role: 'assistant',
    content: '```toml\n',
    prefix: true,
  },
]);

Aggiungere input e output previsti

L'API Prompt ha funzionalità multimodali e supporta più lingue. Imposta le modalità expectedInputs e expectedOutputs e le lingue quando crei la sessione.

  • type: modalità prevista.
    • Per expectedInputs, può essere text, image o audio.
    • Per expectedOutputs, l'API Prompt consente solo text.
  • languages: array per impostare la lingua o le lingue previste. L'API Prompt accetta "en", "ja" e "es". Il supporto per altre lingue è in fase di sviluppo.
    • Per expectedInputs, imposta la lingua del prompt di sistema e una o più lingue del prompt utente previste.
    • Imposta una o più lingue expectedOutputs.
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});

Potresti ricevere un'eccezione "NotSupportedError" DOMException se il modello rileva un input o un output non supportato.

Funzionalità multimodali

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 da utilizzare in una didascalia o in un testo alternativo.

Dai un'occhiata alla demo Mediarecorder Audio Prompt per utilizzare l'API Prompt con l'input audio e alla demo Canvas Image Prompt per utilizzare l'API Prompt con l'input immagine.

Aggiungere messaggi

L'inferenza potrebbe richiedere del tempo, soprattutto quando si utilizzano prompt con input multimodali. Può essere utile inviare prompt predeterminati in anticipo per popolare la sessione, in modo che il modello possa iniziare a elaborare i dati.

Sebbene initialPrompts siano utili durante la creazione della sessione, il metodo append() può essere utilizzato in aggiunta ai metodi prompt() o promptStreaming() per fornire ulteriori prompt contestuali aggiuntivi dopo la creazione della sessione.

Ad esempio:

const session = await LanguageModel.create({
  initialPrompts: [
    {
      role: 'system',
      content:
        'You are a skilled analyst who correlates patterns across multiple images.',
    },
  ],
  expectedInputs: [{ type: 'image' }],
});

fileUpload.onchange = async () => {
  await session.append([
    {
      role: 'user',
      content: [
        {
          type: 'text',
          value: `Here's one image. Notes: ${fileNotesInput.value}`,
        },
        { type: 'image', value: fileUpload.files[0] },
      ],
    },
  ]);
};

analyzeButton.onclick = async (e) => {
  analysisResult.textContent = await session.prompt(userQuestionInput.value);
};

La promessa restituita da append() viene soddisfatta una volta che il prompt è stato convalidato, elaborato e aggiunto alla sessione. La promessa viene rifiutata se il prompt non può essere aggiunto.

Trasmettere uno schema JSON

Aggiungi il campo responseConstraint al metodo prompt() o promptStreaming() per passare uno schema JSON come valore. Puoi quindi utilizzare l'output strutturato con l'API Prompt.

Nel seguente esempio, lo schema JSON assicura che il modello risponda con true o false per classificare se un determinato messaggio riguarda la ceramica.

const session = await LanguageModel.create();

const schema = {
  "type": "boolean"
};

const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";

const result = await session.prompt(
  `Is this post about pottery?\n\n${post}`,
  {
    responseConstraint: schema,
  }
);
console.log(JSON.parse(result));
// true

L'implementazione può includere uno schema JSON o un'espressione regolare come parte del messaggio inviato al modello. In questo modo viene utilizzata parte della quota di input. Puoi misurare la quantità di quota di input che utilizzerà passando l'opzione responseConstraint a session.measureInputUsage().

Puoi evitare questo comportamento con l'opzione omitResponseConstraintInput. In questo caso, ti consigliamo di includere alcune indicazioni nel prompt:

const result = await session.prompt(`
  Summarize this feedback into a rating between 0-5. Only output a JSON
  object { rating }, with a single property whose value is a number:
  The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });

Inviare prompt 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 arrivano 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 la richiesta

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,
});

Gestione sessione

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

Ogni sessione ha un numero massimo di token che può elaborare. Controlla i tuoi progressi verso questo limite con quanto segue:

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

Scopri di più sulla gestione delle sessioni.

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 ti 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,
});

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 choosing between a t-shirt
  and a polo."
);

Demo

Abbiamo creato diverse demo per esplorare i numerosi casi d'uso dell'API Prompt. Le seguenti demo sono applicazioni web:

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

Strategia di rendimento

L'API Prompt per il web è ancora in fase di sviluppo. Durante la creazione di questa API, fai riferimento alle nostre best practice sulla gestione delle sessioni per ottenere prestazioni ottimali.

Norme relative alle autorizzazioni, iframe e web worker

Per impostazione predefinita, l'API Prompt è disponibile solo per le finestre di primo livello e per i relativi iframe con stessa origine. L'accesso all'API può essere delegato agli iframe multiorigine utilizzando l'attributo allow="" della policy sui permessi:

<!--
  The hosting site at https://main.example.com can grant a cross-origin iframe
  at https://cross-origin.example.com/ access to the Prompt API by
  setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>

L'API Prompt non è attualmente disponibile nei web worker a causa della complessità di stabilire un documento responsabile per ogni worker al fine di controllare lo stato della norma relativa alle autorizzazioni.

Partecipare e condividere feedback

Il tuo contributo può influire direttamente sul modo in cui creiamo e implementiamo le versioni future di questa API e di tutte le API AI integrate.