Riassumitore

Funzionalità web: Summarizer

L'API Summarizer consente agli sviluppatori web di offrire una sintesi del testo locale basata sull'AI direttamente nel browser utilizzando Gemini Nano in Chrome o Phi in Edge. Questa API supporta vari formati, tra cui punti chiave, titoli e TL;DR, e opera interamente on-device per garantire la privacy dell'utente.


Per iniziare

L'API Summarizer è disponibile a partire da Chrome ed Edge 138. Richiede il download una tantum del modello Gemini Nano o Phi (rispettivamente).

Requisiti hardware e software

  • Sistema operativo: Windows 10/11, macOS 13 o versioni successive, Linux o ChromeOS (Chromebook Plus).
  • Spazio di archiviazione: 22 GB di spazio libero per il volume del profilo.
  • RAM/CPU: almeno 16 GB di RAM e almeno 4 core della CPU.
  • VRAM: almeno 4 GB (se utilizzi la GPU).

Download e disponibilità dei modelli

Controlla se il modello è pronto, deve essere scaricato o non è disponibile.

Passaggio obbligatorio delle opzioni: devi passare l'oggetto delle opzioni di configurazione identico sia a Summarizer.availability(options) che a Summarizer.create(options). NON utilizzare la superficie API window.ai.summarizer deprecata.

Monitoraggio obbligatorio dell'avanzamento: DEVI implementare un monitoraggio per l'avanzamento del download del modello fornendo un callback monitor(m) a Summarizer.create() e aggiungendo un listener per l'evento downloadprogress.

Requisito di attivazione dall'utente: quando availability è 'downloadable' o 'downloading', l'attivazione del download effettivo tramite Summarizer.create() richiede un'attivazione dall'utente (ad esempio un clic dell'utente). Per evitare NotAllowedError, devi inserire la chiamata di creazione all'interno di un listener di eventi anziché chiamarla in modo incondizionato al caricamento della pagina.

const options = {
  type: 'key-points',
  format: 'plain-text',
  length: 'medium'
};

const availability = await Summarizer.availability(options);

if (availability === 'available') {
  const summarizer = await Summarizer.create(options);
  // Ready to use immediately
} else if (availability === 'downloadable') {
  // A user gesture is strictly required to start the download
  document.getElementById('start-download-btn').addEventListener('click', async () => {
    const summarizer = await Summarizer.create({
      ...options,
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
        });
      },
    });
  });
}

Funzioni e configurazione dell'API

Quando crei un riassuntore tramite Summarizer.create(options), puoi personalizzare l'output:

Parametro Opzioni Descrizione
type key-points, tldr, teaser, headline Definisce la strategia di riepilogo.
format markdown, plain-text Stile di sintassi di output.
length short, medium e long Lunghezza target (ad es. 1 frase rispetto a 5 frasi).
preference auto, speed e capability Bilancia la latenza rispetto alla qualità.

Configurazione di esempio

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

if (navigator.userActivation.isActive) {
  const summarizer = await Summarizer.create(options);
}

Supporto delle lingue

Puoi specificare le lingue previste per assicurarti che il browser possa gestire la richiesta di riassunto specifica.

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja'],
  outputLanguage: 'es',
});

Metodi di riassunto

1. Riassunto in batch

Elabora l'intero testo contemporaneamente e restituisce il risultato.

const longText = document.querySelector('article').innerText;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});
console.log(summary);

2. Riassunto dello stream

Restituisce i risultati in tempo reale man mano che il modello li genera, fornendo un'interfaccia utente più reattiva.

const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

Sicurezza e autorizzazioni

  • Privacy dei dati: nessun dato viene inviato a Google; l'elaborazione avviene sul dispositivo locale.
  • Multiorigine: l'accesso può essere concesso agli iframe utilizzando la policy sulle autorizzazioni.

    <iframe src="https://example.com/" allow="summarizer"></iframe>
    
  • Web worker: al momento non supportati.

Strategia di riserva

Prima di inizializzare o eseguire query sulla disponibilità, controlla se il browser supporta l'API Summarizer:

if ('Summarizer' in self) {
  // The Summarizer API is supported.
} else {
  // Execute fallback strategy
}

Se l'API Summarizer non è supportata o i controlli di disponibilità restituiscono 'unavailable', devi eseguire un graceful fallback.

Opzioni consigliate:

  1. Fallback API remoto: indirizza la richiesta di distillazione a un endpoint server o a un'API remota (come l'API Vertex AI Gemini) in modo che gli utenti ricevano comunque i riassunti.
  2. Riduzione controllata: disattiva visivamente i controlli di riassunto nella UI o nascondi il pulsante mostrando un messaggio intuitivo (ad es. "Local summarization is currently unsupported in this browser"). Non consentire all'interazione di attivare eccezioni di runtime generiche non gestite.
  3. Fallback polyfill: puoi utilizzare polyfill gestiti dalla community come built-in-ai-task-apis-polyfills o prompt-api-polyfill per emulare la superficie dell'API utilizzando servizi remoti con modelli nel cloud o inferenza on-device con modelli locali.

Implicazioni relative alla privacy e ai costi: questi polyfill potrebbero inviare richieste proxy a server remoti (come l'API Gemini sul cloud). In questo modo, le garanzie di privacy on-device delle API AI integrate native vengono completamente annullate e verranno addebitati i costi di utilizzo delle API lato server.