Veröffentlicht: 12. März 2025
Erklärvideo | Web | Erweiterungen | Chrome-Status | Absicht |
---|---|---|---|---|
GitHub | Ansicht | Testabsicht |
Mit der Summarizer API können Sie Zusammenfassungen von Informationen in verschiedenen Längen und Formaten erstellen. Sie können es mit Gemini Nano in Chrome verwenden, um clientseitige Inferenzen durchzuführen und komplizierte oder lange Texte prägnant zu erklären.
Wenn die Verarbeitung clientseitig erfolgt, können Sie lokal mit Daten arbeiten. So können Sie sensible Daten schützen und eine hohe Verfügbarkeit bieten. Das Kontextfenster ist jedoch viel kleiner als bei serverseitigen Modellen. Das bedeutet, dass sehr große Dokumente möglicherweise nur schwer zu fassen sind. Um dieses Problem zu lösen, können Sie die Zusammenfassung von Zusammenfassungen verwenden.
Was ist eine Zusammenfassung von Zusammenfassungen?
Wenn Sie die Zusammenfassung von Zusammenfassungen verwenden möchten, teilen Sie den Eingabeinhalt an wichtigen Punkten auf und fassen Sie dann jeden Teil unabhängig voneinander zusammen. Sie können die Ausgaben der einzelnen Teile zusammenführen und dann diesen zusammengesetzten Text in einer endgültigen Zusammenfassung zusammenfassen.

Inhalte sinnvoll aufteilen
Es ist wichtig, zu überlegen, wie Sie einen großen Text aufteilen, da eine Aufteilung an verschiedenen Stellen zu radikal unterschiedlichen Ergebnissen von Gemini Nano oder anderen LLMs führen kann. Idealerweise sollten Texte bei einem Themawechsel geteilt werden, z. B. bei einem neuen Abschnitt eines Artikels oder bei einem Absatz. Der Text darf nicht in der Mitte eines Wortes oder Satzes geteilt werden. Sie können also keine Anzahl von Zeichen als einzige Richtlinie für die Texttrennung festlegen.
Es gibt viele Möglichkeiten, dies ohne manuellen Aufwand zu tun. Im folgenden Beispiel haben wir den rekursiven Textsplitter von LangChain.js verwendet, der Leistung und Ausgabequalität in Einklang bringt. Das sollte für die meisten Arbeitslasten funktionieren.
Beim Erstellen einer neuen Instanz gibt es zwei wichtige Parameter:
chunkSize
ist die maximale Anzahl von Zeichen, die in jeder Aufteilung zulässig sind.chunkOverlap
ist die Anzahl der Zeichen, die zwischen zwei aufeinanderfolgenden Trennlinien überlappen sollen. So enthält jeder Block einen Teil des Kontexts aus dem vorherigen Block.
Mit splitText()
können Sie den Text in mehrere Strings aufteilen.
Bei den meisten LLMs wird das Kontextfenster als Anzahl von Tokens und nicht als Anzahl von Zeichen angegeben. Ein Token enthält durchschnittlich vier Zeichen. Sie können die Anzahl der Tokens in einer Eingabe daher schätzen, indem Sie die Anzahl der Zeichen durch vier teilen.
In unserem Beispiel hat chunkSize
3.000 Zeichen, was etwa 750 Tokens entspricht.
Zusammenfassungen für jede Aufteilung generieren
Nachdem du die Aufteilung der Inhalte festgelegt hast, kannst du mit der Summarizer API Zusammenfassungen für jeden Teil generieren.
Erstellen Sie eine Instanz des Zusammenfassungstools mit der Funktion create()
. Um den Kontext so gut wie möglich zu erhalten, haben wir den Parameter format
auf plain-text
, den Parameter type
auf tl;dr
und den Parameter length
auf long
festgelegt.
Erstellen Sie dann die Zusammenfassung für jede Aufteilung, die mit RecursiveCharacterTextSplitter
erstellt wurde, und verknüpfen Sie die Ergebnisse zu einem neuen String.
Wir haben jede Zusammenfassung durch eine neue Zeile getrennt, um die Zusammenfassung für jeden Teil klar zu identifizieren.
Diese neue Zeile spielt keine Rolle, wenn diese Schleife nur einmal ausgeführt wird. Sie ist jedoch nützlich, um zu ermitteln, wie sich jede Zusammenfassung auf den Tokenwert für die endgültige Zusammenfassung auswirkt. In den meisten Fällen sollte diese Lösung für mittellange und lange Inhalte funktionieren.
Rekursiver Zusammenfassung von Zusammenfassungen
Bei sehr langem Text kann die Länge der zusammengesetzten Zusammenfassung größer als der verfügbare Kontextzeitraum sein. Dies führt dazu, dass die Zusammenfassung fehlschlägt. Um dies zu vermeiden, können Sie die Zusammenfassungen rekursiv zusammenfassen.

Die ursprünglichen Aufteilungen, die von RecursiveCharacterTextSplitter
generiert wurden, werden weiterhin erfasst. In der Funktion recursiveSummarizer()
wird dann der Zusammenfassungsprozess basierend auf der Zeichenlänge der zusammengefügten Teilungen in einer Schleife ausgeführt. Wenn die Zeichenlänge der Zusammenfassungen 3000
überschreitet, werden sie zu fullSummaries
zusammengefügt. Wird das Limit nicht erreicht, wird die Zusammenfassung als partialSummaries
gespeichert.
Sobald alle Zusammenfassungen generiert wurden, werden die endgültigen Teilzusammenfassungen der vollständigen Zusammenfassung hinzugefügt. Wenn in fullSummaries
nur eine Zusammenfassung vorhanden ist, ist keine zusätzliche Rekursion erforderlich. Die Funktion gibt eine endgültige Zusammenfassung zurück. Wenn mehr als eine Zusammenfassung vorhanden ist, wiederholt die Funktion die Zusammenfassung der Teilzusammenfassungen und fährt fort.
Wir haben diese Lösung mit dem Internet Relay Chat (IRC) RFC getestet, der 110.030 Zeichen mit 17.560 Wörtern enthält. Die Summarizer API hat die folgende Zusammenfassung geliefert:
Internet Relay Chat (IRC) ist eine Möglichkeit, online in Echtzeit per Textnachricht zu kommunizieren. Sie können in Kanälen chatten oder private Nachrichten senden. Außerdem können Sie mithilfe von Befehlen den Chat steuern und mit dem Server interagieren. Es ist wie ein Chatroom im Internet, in dem Sie Nachrichten eingeben und sofort die Nachrichten anderer sehen können.
Das ist ziemlich effektiv. Außerdem hat er nur 309 Zeichen.
Beschränkungen
Mit der Zusammenfassung von Zusammenfassungen können Sie im Kontextfenster eines Modells mit Kundengröße arbeiten. Auch wenn es viele Vorteile für clientseitige KI gibt, können folgende Probleme auftreten:
- Weniger genaue Zusammenfassungen: Bei der Rekursion ist die Wiederholung des Zusammenfassungsprozesses möglicherweise unendlich und jede Zusammenfassung weicht weiter vom ursprünglichen Text ab. Das bedeutet, dass das Modell möglicherweise eine endgültige Zusammenfassung generiert, die zu oberflächlich ist, um nützlich zu sein.
- Langsamere Leistung: Die Erstellung jeder Zusammenfassung dauert einige Zeit. Da es bei größeren Texten unendlich viele mögliche Zusammenfassungen gibt, kann dieser Ansatz mehrere Minuten dauern.
Wir haben eine Demo für den Summarizer und Sie können sich den vollständigen Quellcode ansehen.
Feedback geben
Probieren Sie die Zusammenfassung von Zusammenfassungen mit unterschiedlichen Eingabetextlängen, unterschiedlichen Spaltengrößen und unterschiedlichen Überlappungslängen aus, um zu ermitteln, was für Ihre Anwendungsfälle am besten funktioniert.
Sie können die Summarizer API jetzt testen, indem Sie am Ursprungstest teilnehmen und uns Feedback geben. Ihre Antworten können sich direkt darauf auswirken, wie wir zukünftige Versionen dieser API und alle eingebauten KI-APIs entwickeln und implementieren.
- Wenn Sie Feedback zur Implementierung in Chrome geben möchten, können Sie einen Fehlerbericht oder eine Funktionsanfrage senden.
- Diskutieren Sie das Design der Summarizer API auf GitHub, indem Sie ein vorhandenes Problem kommentieren oder ein neues öffnen.
- Wenn Sie sich an der Standardsentwicklung beteiligen möchten, können Sie der Web Incubator Community Group beitreten.
- Chatten Sie mit dem Chrome-KI-Team über den Zusammenfassungsprozess oder andere Fragen zur integrierten KI.