Summarizer

Webfunktionen: Zusammenfassung

Mit der Summarizer API können Webentwickler mithilfe von Gemini Nano in Chrome oder Phi in Edge eine lokale, KI-basierte Textzusammenfassung direkt im Browser anbieten. Diese API unterstützt verschiedene Formate, darunter wichtige Punkte, Überschriften und Kurzfassungen. Sie wird vollständig auf dem Gerät ausgeführt, um den Datenschutz der Nutzer zu gewährleisten.


Erste Schritte

Die Summarizer API ist ab Chrome und Edge 138 verfügbar. Dazu muss das Gemini Nano- oder Phi-Modell einmalig heruntergeladen werden.

Hardware- und Softwareanforderungen

  • Betriebssystem: Windows 10/11, macOS 13 oder höher, Linux oder ChromeOS (Chromebook Plus).
  • Speicher: 22 GB freier Speicherplatz für das Profilvolume.
  • RAM/CPU: mindestens 16 GB RAM und mindestens 4 CPU-Kerne.
  • VRAM: mindestens 4 GB (bei Verwendung einer GPU).

Modell herunterladen und Verfügbarkeit

Prüfen Sie, ob das Modell bereit ist, heruntergeladen werden muss oder nicht verfügbar ist.

Obligatorische Übergabe von Optionen: Sie müssen dasselbe Konfigurationsobjekt sowohl an Summarizer.availability(options) als auch an Summarizer.create(options) übergeben. Verwenden Sie NICHT die verworfene window.ai.summarizer-API-Oberfläche.

Obligatorisches Monitoring des Fortschritts: Sie MÜSSEN ein Monitoring für den Fortschritt des Modelldownloads implementieren. Dazu müssen Sie einen monitor(m)-Callback für Summarizer.create() bereitstellen und einen Listener für das downloadprogress-Ereignis hinzufügen.

Anforderung an Nutzergesten: Wenn availability den Wert 'downloadable' oder 'downloading' hat, ist für das Auslösen des eigentlichen Downloads über Summarizer.create() eine Nutzergeste (z. B. ein Klick) erforderlich. Sie müssen den Erstellungsaufruf in einem Event-Listener platzieren, anstatt ihn bedingungslos beim Seitenaufbau aufzurufen, um NotAllowedError zu verhindern.

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

API-Funktionen und -Konfiguration

Wenn Sie einen Summarizer über Summarizer.create(options) erstellen, können Sie die Ausgabe anpassen:

Parameter Optionen Beschreibung
type key-points, tldr, teaser, headline Definiert die Zusammenfassungsstrategie.
format markdown, plain-text Stil der Ausgabesyntax.
length short, medium, long Ziellänge (z. B. 1 oder 5 Sätze)
preference auto, speed, capability Ausgewogenes Verhältnis zwischen Latenz und Qualität.

Konfigurationsbeispiel

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

Sprachunterstützung

Sie können erwartete Sprachen angeben, damit der Browser die spezifische Zusammenfassungsanfrage verarbeiten kann.

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

Zusammenfassungsmethoden

1. Batch-Zusammenfassung

Verarbeitet den gesamten Text auf einmal und gibt das Ergebnis zurück.

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. Stream-Zusammenfassung

Gibt Ergebnisse in Echtzeit zurück, während das Modell sie generiert, was eine reaktionsschnellere Benutzeroberfläche ermöglicht.

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

Sicherheit und Berechtigungen

  • Datenschutz: Es werden keine Daten an Google gesendet. Die Verarbeitung erfolgt auf dem lokalen Gerät.
  • Ursprungsübergreifend: Der Zugriff kann iFrames mithilfe der Berechtigungsrichtlinie gewährt werden.

    <iframe src="https://example.com/" allow="summarizer"></iframe>
    
  • Web-Worker: Derzeit nicht unterstützt.

Fallback-Strategie

Prüfe vor dem Initialisieren oder Abfragen der Verfügbarkeit, ob der Browser die Summarizer API unterstützt:

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

Wenn die Summarizer API nicht unterstützt wird oder die Verfügbarkeitsprüfung 'unavailable' zurückgibt, musst du einen ordnungsgemäßen Fallback durchführen.

Empfohlene Optionen:

  1. Remote-API-Fallback: Die Destillationsanfrage wird an einen Serverendpunkt oder eine Remote-API (z. B. die Vertex AI Gemini API) weitergeleitet, damit Nutzer weiterhin Zusammenfassungen erhalten.
  2. Graduelle Fehlertoleranz: Deaktivieren Sie die Steuerelemente für die Zusammenfassung in der Benutzeroberfläche visuell oder blenden Sie die Schaltfläche aus und zeigen Sie eine freundliche Meldung an (z.B. "Local summarization is currently unsupported in this browser"). Lassen Sie nicht zu, dass Interaktionen allgemeine, nicht behandelte Laufzeitausnahmen auslösen.
  3. Polyfill-Fallback: Sie können von der Community verwaltete Polyfills wie built-in-ai-task-apis-polyfills oder prompt-api-polyfill verwenden, um die API-Oberfläche mit Remote-Diensten mit Modellen in der Cloud oder On-Device-Inferenz mit lokalen Modellen zu emulieren.

Auswirkungen auf Datenschutz und Kosten: Diese Polyfills leiten Anfragen möglicherweise an Remote-Server weiter (z. B. die Gemini API über die Cloud). Dadurch werden die Datenschutzgarantien der nativen integrierten KI-APIs auf dem Gerät vollständig aufgehoben und es fallen Kosten für die serverseitige API-Nutzung an.