Gepubliceerd: 12 maart 2025, Laatst bijgewerkt: 28 mei 2025
Uitlegger | Web | Uitbreidingen | Chrome-status | Intentie |
---|---|---|---|---|
MDN | Weergave | Intentie tot verzending |
Met de Summarizer API kunt u samenvattingen van informatie genereren in verschillende lengtes en formaten. Gebruik de API met Gemini Nano in Chrome of andere taalmodellen die in browsers zijn ingebouwd om lange of ingewikkelde tekst beknopt uit te leggen.
Wanneer u dit client-side uitvoert, kunt u lokaal met gegevens werken, waardoor u gevoelige gegevens veilig kunt houden en beschikbaarheid op schaal kunt bieden. Het contextvenster is echter veel kleiner dan bij server-side modellen, waardoor het lastig kan zijn om zeer grote documenten samen te vatten. Om dit probleem op te lossen, kunt u de samenvatting van samenvattingen- techniek gebruiken.
Wat is een samenvatting van samenvattingen?
Om de samenvatting van samenvattingentechniek te gebruiken, splitst u de invoer op belangrijke punten en vat u vervolgens elk onderdeel afzonderlijk samen. U kunt de uitvoer van elk onderdeel samenvoegen en deze samengevoegde tekst vervolgens samenvatten tot één definitieve samenvatting.
Splits uw inhoud zorgvuldig op
Het is belangrijk om goed na te denken over hoe je een groot stuk tekst opsplitst, aangezien verschillende strategieën tot verschillende resultaten kunnen leiden binnen verschillende LLM's. Idealiter splits je tekst bij een onderwerpsverandering, zoals een nieuwe sectie in een artikel of bij een alinea. Het is belangrijk om te voorkomen dat je de tekst midden in een woord of zin splitst. Je kunt het aantal tekens dus niet als enige richtlijn 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 vindt tussen prestaties en outputkwaliteit. Dit zou voor de meeste workloads moeten werken.
Bij het maken van een nieuw exemplaar zijn er twee belangrijke parameters:
-
chunkSize
is het maximale aantal tekens dat is toegestaan in elke splitsing. -
chunkOverlap
is het aantal tekens dat overlapt tussen twee opeenvolgende splitsingen. Dit zorgt ervoor dat elk fragment een deel van de context van het vorige fragment bevat.
Splits de tekst met splitText()
om bij elk fragment een reeks strings te retourneren.
De meeste LLM's hebben een contextvenster dat wordt uitgedrukt in 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 samenvatting zal worden uitgevoerd om alle tekst te verwerken.
Genereer samenvattingen voor elke splitsing
Nadat u hebt ingesteld hoe de inhoud wordt gesplitst, kunt u met de Summarizer API samenvattingen voor elk onderdeel genereren.
Maak een instantie van de summar met de create()
functie . Om zoveel mogelijk context te behouden, hebben we de format
parameter ingesteld op plain-text
, type
op tldr
en length
op long
.
Genereer vervolgens de samenvatting voor elke splitsing die door de RecursiveCharacterTextSplitter
is gemaakt en voeg de resultaten samen tot een nieuwe string. We hebben elke samenvatting gescheiden met 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 middellange en lange content.
Recursieve samenvatting van samenvattingen
Bij een extreem lange tekst kan de lengte van de gecombineerde samenvatting groter zijn dan het beschikbare contextvenster, waardoor de samenvatting mislukt. Om dit probleem op te lossen, kunt u 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 aaneengeschakelde splitsingen. Als de tekenlengte van de samenvattingen groter is dan 3000
, voegen we de samenvatting samen tot fullSummaries
. Als de limiet niet bereikt wordt, 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 extra recursie nodig. De functie retourneert een definitieve samenvatting. Als er meer dan één samenvatting aanwezig is, herhaalt de functie de samenvatting 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:
Internet Relay Chat (IRC) is een manier om online in realtime te communiceren via tekstberichten. Je kunt chatten in kanalen of privéberichten sturen, en je kunt commando's gebruiken om de chat te besturen en met de server te communiceren. Het is vergelijkbaar met een chatroom op internet waar je berichten kunt typen en direct kunt zien wat anderen zeggen.
Dat is behoorlijk effectief! En het zijn maar 309 tekens.
Beperkingen
De samenvatting van samenvattingen-techniek helpt u te werken binnen het contextvenster van een model op clientformaat. Hoewel client-side AI veel voordelen biedt, kunt u de volgende tegenkomen:
- Minder nauwkeurige samenvattingen : bij recursie is de herhaling van het samenvattingsproces mogelijk oneindig, en elke samenvatting staat verder af van de oorspronkelijke tekst. 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. Ook hier geldt dat, met een oneindig aantal mogelijke samenvattingen in grotere teksten, deze aanpak enkele minuten kan duren.
Er is een samenvattingsdemo beschikbaar en u kunt de volledige broncode bekijken.
Deel uw feedback
Probeer de samenvatting van samenvattingentechniek te gebruiken met verschillende lengtes invoertekst, verschillende splitsingsgroottes en verschillende overlappingslengtes, met behulp van de Summarizer API .
- Als u feedback wilt geven over de implementatie van Chrome, kunt u een bugrapport of een functieverzoek indienen.
- Lees de documentatie op MDN
- Chat met het Chrome AI-team over uw samenvattingsproces of andere vragen over de ingebouwde AI.