Gepubliceerd: 12 maart 2025, Laatst bijgewerkt: 28 mei 2025
| Uitleg | Web | Uitbreidingen | Chrome-status | Intentie |
|---|---|---|---|---|
| MDN | Weergave | Voornemen tot verzending |
De Summarizer API helpt u bij het genereren van samenvattingen van informatie in verschillende lengtes en formaten. Gebruik deze API met het basismodel in Chrome, of andere taalmodellen die in browsers zijn ingebouwd, om lange of complexe teksten beknopt uit te leggen.
Wanneer de verwerking aan de clientzijde plaatsvindt, kunt u lokaal met gegevens werken, waardoor gevoelige gegevens veilig blijven en beschikbaarheid op grote schaal mogelijk is. Het contextvenster is echter veel kleiner dan bij server-side modellen, wat betekent dat het samenvatten van zeer grote documenten lastig kan zijn. Om dit probleem op te lossen, kunt u de techniek van het samenvatten van samenvattingen gebruiken.
Wat is een samenvatting van samenvattingen?
Om de techniek van het samenvatten van samenvattingen te gebruiken, splitst u de invoerinhoud op in belangrijke punten en vat u elk deel afzonderlijk samen. U kunt de resultaten van elk deel samenvoegen en deze samengevoegde tekst vervolgens samenvatten tot één uiteindelijke samenvatting.

Verdeel je content op een doordachte manier.
Het is belangrijk om te overwegen hoe je een grote tekst opsplitst, aangezien verschillende strategieën tot verschillende resultaten kunnen leiden in verschillende tekstverwerkingsprogramma's. Idealiter splits je tekst op wanneer er een verandering van onderwerp is, bijvoorbeeld bij een nieuw gedeelte van een artikel of bij een alinea. Het is belangrijk om te voorkomen dat je de tekst midden in een woord of zin splitst; dit betekent dat je het aantal tekens niet als enige leidraad kunt gebruiken.
Er zijn veel manieren om dit te doen. In het volgende voorbeeld hebben we de Recursive Text Splitter van LangChain.js gebruikt, die een balans biedt tussen prestaties en uitvoerkwaliteit. Dit zou voor de meeste taken moeten werken.
Bij het aanmaken van een nieuwe instantie zijn er twee belangrijke parameters:
-
chunkSizeis het maximale aantal tekens dat in elke splitsing is toegestaan. -
chunkOverlapis de hoeveelheid tekens die overlappen tussen twee opeenvolgende splitsingen. Dit zorgt ervoor dat elk segment een deel van de context van het vorige segment bevat.
Splits de tekst met splitText() om een array van strings te verkrijgen met elk deel.
De meeste LLM's geven hun contextvenster weer als een aantal tokens in plaats van een aantal tekens. Gemiddeld bevat een token 4 tekens. In ons voorbeeld is de chunkSize 3000 tekens, wat neerkomt op ongeveer 750 tokens.
Bepaal de beschikbaarheid van tokens
Om te bepalen hoeveel tokens beschikbaar zijn voor een invoer, gebruikt u de methode measureInputUsage() en de eigenschap inputQuota . In dit geval is de implementatie onbeperkt, omdat u niet kunt weten hoe vaak de samenvatter zal worden uitgevoerd om alle tekst te verwerken.
Genereer samenvattingen voor elke splitsing.
Zodra je hebt ingesteld hoe de inhoud wordt opgesplitst, kun je met de Summarizer API samenvattingen genereren voor elk onderdeel.
Maak een instantie van de samenvatter met de functie create() . Om zoveel mogelijk context te behouden, hebben we de parameter format ingesteld op plain-text , type op tldr en length op long .
Genereer vervolgens een samenvatting voor elke splitsing die is gemaakt door de RecursiveCharacterTextSplitter en voeg de resultaten samen tot een nieuwe tekenreeks. We hebben elke samenvatting gescheiden door een nieuwe regel om de samenvatting voor elk onderdeel duidelijk te identificeren.
Hoewel deze nieuwe regel er niet toe doet wanneer deze lus slechts één keer wordt uitgevoerd, is hij nuttig om te bepalen hoe elke samenvatting bijdraagt aan de tokenwaarde voor de uiteindelijke samenvatting. In de meeste gevallen zou deze oplossing moeten werken voor middelgrote en lange teksten.
Recursieve samenvatting van samenvattingen
Wanneer je een extreem lange tekst hebt, kan de lengte van de samengevoegde samenvatting groter zijn dan het beschikbare contextvenster, waardoor het samenvatten mislukt. Om dit te verhelpen, kun je de samenvattingen recursief samenvatten.

We verzamelen nog steeds de initiële splitsingen die gegenereerd zijn door RecursiveCharacterTextSplitter . Vervolgens herhalen we in de functie recursiveSummarizer() het samenvattingsproces op basis van de tekenlengte van de samengevoegde splitsingen. Als de tekenlengte van de samenvattingen meer dan 3000 bedraagt, voegen we ze samen tot fullSummaries . Als de limiet niet wordt bereikt, wordt de samenvatting opgeslagen als partialSummaries .
Zodra alle samenvattingen zijn gegenereerd, worden de laatste gedeeltelijke samenvattingen toegevoegd aan de volledige samenvatting. Als er slechts één samenvatting in fullSummaries staat, is er geen verdere recursie nodig. De functie retourneert een definitieve samenvatting. Als er meer dan één samenvatting aanwezig is, herhaalt de functie zich en gaat verder met het samenvatten van de gedeeltelijke samenvattingen.
We hebben deze oplossing getest met Internet Relay Chat (IRC) RFC , dat maar liefst 110.030 tekens bevat, waaronder 17.560 woorden. De Summarizer API leverde de volgende samenvatting op:
Internet Relay Chat (IRC) is een manier om online in realtime te communiceren met behulp van tekstberichten. Je kunt chatten in kanalen of privéberichten versturen, en je kunt commando's gebruiken om de chat te beheren en met de server te communiceren. Het is als een chatroom op internet waar je berichten kunt typen en die van anderen direct kunt zien.
Dat is behoorlijk effectief! En het zijn maar 309 tekens.
Beperkingen
De techniek van het samenvatten van samenvattingen helpt je te werken binnen het contextvenster van een client-side model. Hoewel client-side AI veel voordelen biedt, kun je de volgende problemen tegenkomen:
- Minder nauwkeurige samenvattingen : Bij recursie kan het samenvattingsproces zich oneindig herhalen, waardoor elke samenvatting verder van de oorspronkelijke tekst afwijkt. Dit betekent dat het model een uiteindelijke samenvatting kan genereren die te oppervlakkig is om bruikbaar te zijn.
- Tragere prestaties : Het genereren van elke samenvatting kost tijd. Bij een oneindig aantal mogelijke samenvattingen in grotere teksten kan deze aanpak meerdere minuten in beslag nemen.
We hebben een demo van de samenvattingsfunctie beschikbaar en u kunt de volledige broncode bekijken.
Deel je feedback
Probeer de techniek van het samenvatten van samenvattingen te gebruiken met verschillende lengtes van invoertekst, verschillende splitsingsgroottes en verschillende overlappingslengtes, met behulp van de Summarizer API .
- Voor feedback over de implementatie in Chrome kunt u een bugrapport of een functieverzoek indienen.
- Lees de documentatie op MDN.
- Neem contact op met het Chrome AI-team om vragen te stellen over uw samenvattingsproces of andere ingebouwde AI-functionaliteiten.