Start · Sprachen · JavaScript · Referenz · Summarizer.summarize()

Summarizer.summarize()

Methode

Erzeugt mit dem im Browser eingebauten KI-Sprachmodell eine Zusammenfassung des übergebenen Textes und liefert sie als <code>Promise&lt;string&gt;</code>.

seit JavaScript Experimentell: Chrome 138+ (Desktop), nicht in Fir Kategorie: webapi

Signatur

Summarizer.prototype.summarize(input, options)

Beschreibung

Die Methode summarize() einer Summarizer-Instanz schickt einen Text an das lokal im Browser laufende Sprachmodell (in Chrome z. B. Gemini Nano). Das Promise wird erst erfüllt, wenn die ganze Zusammenfassung fertig ist, und liefert sie dann als String. Art, Format und Länge der Ausgabe legst du nicht hier fest, sondern schon beim Erzeugen der Instanz mit Summarizer.create() über die Optionen type, format und length.

Die Methode passt gut für kurze bis mittellange Texte, bei denen du das Ergebnis am Stück anzeigst, etwa eine TL;DR-Zeile über einem Artikel, Stichpunkte zu einem Support-Ticket oder einen Titelvorschlag (type: "headline"). Bei langen Texten oder wenn die Oberfläche die Ausgabe nach und nach anzeigen soll, nimmst du besser summarizeStreaming(). Diese Methode liefert einen ReadableStream mit Teilergebnissen.

Über options.context kannst du für genau diesen Aufruf Zusatzinformationen mitgeben, zum Beispiel „Zielgruppe: Entwickler“. Dieser Kontext kommt zum sharedContext hinzu, der bei create() festgelegt wurde. Mit options.signal kannst du eine laufende Zusammenfassung über einen AbortController abbrechen.

Die Verarbeitung läuft lokal auf dem Gerät. Der Text verlässt den Browser also nicht. Allerdings muss das Modell beim ersten Mal eventuell heruntergeladen werden, und die Ausgabe hängt vom Modell ab. Sie ist nicht deterministisch.

Parameter

Name Typ Default Beschreibung
$input Pflicht string Der Text, der zusammengefasst werden soll. Er muss in das Kontingent summarizer.inputQuota passen.
$options object {} Optionale Einstellungen für diesen einen Aufruf.
$options.context string Zusätzliche Hintergrundinformation nur für diesen Aufruf, z. B. zu Zielgruppe oder Quelle.
$options.signal AbortSignal Signal zum Abbrechen der laufenden Zusammenfassung. Nach dem Abbruch wird das Promise mit dem Grund aus signal.reason abgelehnt, standardmäßig ein AbortError.

Rückgabewert

Typ
Promise<string>
Beschreibung
Ein Promise, das mit der fertigen Zusammenfassung als String erfüllt wird. Ihr Format richtet sich nach der Option format der Instanz: "markdown" (Standard) oder "plain-text".

Beispiele

Einfache TL;DR-Zusammenfassung mit Verfügbarkeitsprüfung

const text = document.querySelector('article').innerText;

if (!('Summarizer' in self)) {
  console.log('Summarizer API wird nicht unterstützt.');
} else {
  const availability = await Summarizer.availability();
  if (availability === 'unavailable') {
    console.log('Modell auf diesem Gerät nicht verfügbar.');
  } else {
    // create() muss bei "downloadable" nach einer Nutzeraktion aufgerufen werden
    const summarizer = await Summarizer.create({
      type: 'tldr',
      format: 'plain-text',
      length: 'short'
    });
    const summary = await summarizer.summarize(text);
    console.log(summary);
    summarizer.destroy(); // Ressourcen freigeben
  }
}
Der Artikel erklärt, wie die Summarizer API Texte lokal im Browser zusammenfasst.

Stichpunkte mit Kontext und Download-Fortschritt

const button = document.querySelector('#summarize');
const output = document.querySelector('#result');

button.addEventListener('click', async () => {
  const summarizer = await Summarizer.create({
    type: 'key-points',
    format: 'markdown',
    length: 'medium',
    sharedContext: 'Kundenanfragen an einen Software-Support',
    monitor(m) {
      m.addEventListener('downloadprogress', (e) => {
        output.textContent = `Modell lädt: ${Math.round(e.loaded * 100)} %`;
      });
    }
  });

  const ticket = document.querySelector('#ticket').value;
  output.textContent = await summarizer.summarize(ticket, {
    context: 'Die Zusammenfassung ist für einen Entwickler im 2nd-Level-Support.'
  });
});
- Login schlägt nach dem Update fehl - Fehler tritt nur in Firefox auf - Kunde bittet um Rückmeldung bis Freitag

Abbrechen und Eingabelänge vorher prüfen

const summarizer = await Summarizer.create({ type: 'headline', length: 'short' });
const controller = new AbortController();
const longText = 'Die Stadtverwaltung hat heute neue Regeln für den Radverkehr vorgestellt. '.repeat(50);

// Passt der Text ins Kontingent?
const usage = await summarizer.measureInputUsage(longText);
if (usage > summarizer.inputQuota) {
  console.log('Text zu lang – bitte kürzen oder in Abschnitte teilen.');
} else {
  setTimeout(() => controller.abort(), 5000); // Zeitlimit 5 s
  try {
    const headline = await summarizer.summarize(longText, { signal: controller.signal });
    console.log(headline);
  } catch (err) {
    if (err.name === 'AbortError') console.log('Zusammenfassung abgebrochen.');
    else if (err.name === 'QuotaExceededError') console.log('Eingabe zu groß.');
    else throw err;
  }
}
Neue Regeln für den Radverkehr in der Stadt vorgestellt

// Wichtig · Fallstricke

  • Experimentell und nur in Chromium verfügbar: Stabil gibt es die Methode ab Chrome 138 auf dem Desktop. Das Gerät braucht genug Speicher und eine passende GPU/CPU. Firefox und Safari unterstützen die API bisher nicht. Prüfe deshalb immer mit 'Summarizer' in self und Summarizer.availability(), ob sie nutzbar ist, und biete eine Alternative an.
  • Nutzeraktion nötig: Wenn das Modell erst heruntergeladen werden muss ("downloadable"), muss Summarizer.create() durch eine Nutzeraktion wie einen Klick ausgelöst werden. In iframes muss die Permissions-Policy summarizer erlaubt sein, sonst gibt es einen NotAllowedError.
  • Mögliche Fehler beim Aufruf: QuotaExceededError, wenn die Eingabe größer als inputQuota ist. InvalidStateError, wenn das Dokument nicht aktiv ist oder destroy() schon aufgerufen wurde. AbortError nach einem Abbruch. NotReadableError, wenn die Ausgabe gefiltert wurde. UnknownError bei sonstigen Fehlern des Modells.
  • Ausgabe nicht deterministisch: Derselbe Text kann unterschiedliche Zusammenfassungen ergeben. Verlass dich nicht auf ein exaktes Format, und prüfe inhaltlich wichtige Ergebnisse.
  • Sicherheit: Standardmäßig ist die Ausgabe Markdown. Füge sie nie ungefiltert per innerHTML ein. Nutze textContent oder einen Markdown-Renderer mit Bereinigung (Sanitizer), sonst droht XSS, wenn Nutzereingaben das Modell beeinflussen (Prompt-Injection).
  • Leistung: Verwende eine Instanz für mehrere Aufrufe wieder, statt jedes Mal create() aufzurufen. Gib sie mit destroy() frei, wenn du sie nicht mehr brauchst. Bei langen Texten sorgt summarizeStreaming() für ein reaktionsfähigeres Interface.