Data publikacji: 12 marca 2025 r., ostatnia aktualizacja: 28 maja 2025 r.
Wyjaśnienie | Sieć | Rozszerzenia | Stan Chrome | Intencja |
---|---|---|---|---|
MDN | Wyświetl | Zamiar wysłania |
Interfejs Summarizer API pomaga generować podsumowania informacji o różnej długości i w różnych formatach. Używaj go z Gemini Nano w Chrome lub innymi modelami językowymi wbudowanymi w przeglądarki, aby zwięźle wyjaśniać długie lub skomplikowane teksty.
Gdy jest wykonywane po stronie klienta, możesz pracować z danymi lokalnie, co pozwala chronić dane wrażliwe i zapewnia dostępność na dużą skalę. Jednak okno kontekstowe jest znacznie mniejsze niż w przypadku modeli po stronie serwera, co oznacza, że podsumowanie bardzo dużych dokumentów może być trudne. Aby rozwiązać ten problem, możesz użyć techniki podsumowania podsumowań.
Czym jest podsumowanie podsumowań?
Aby użyć techniki podsumowania podsumowań, podziel treść wejściową na kluczowe punkty, a następnie podsumuj każdą część osobno. Możesz połączyć wyniki z każdej części, a następnie podsumować połączony tekst w jedno końcowe podsumowanie.

Rozważne dzielenie treści
Ważne jest, aby zastanowić się, jak podzielić duży fragment tekstu, ponieważ różne strategie mogą prowadzić do różnych wyników w przypadku dużych modeli językowych. Tekst należy dzielić, gdy zmienia się temat, np. w nowej sekcji artykułu lub na końcu akapitu. Ważne jest, aby nie dzielić tekstu w środku słowa lub zdania, co oznacza, że nie możesz używać liczby znaków jako jedynej wytycznej podziału.
Możesz to zrobić na wiele sposobów. W poniższym przykładzie użyliśmy rekursywnego rozdzielacza tekstu z biblioteki LangChain.js, który zapewnia równowagę między wydajnością a jakością danych wyjściowych. Powinno to działać w przypadku większości zadań.
Przy tworzeniu nowej instancji maszyny wirtualnej są 2 kluczowe parametry:
chunkSize
to maksymalna liczba znaków w każdym podziale.chunkOverlap
to liczba znaków, które mają się pokrywać między dwoma kolejnymi podziałami. Dzięki temu każdy fragment zawiera część kontekstu z poprzedniego fragmentu.
Podziel tekst za pomocą znaku splitText()
, aby zwrócić tablicę ciągów znaków z poszczególnymi fragmentami.
Większość LLM ma okno kontekstu wyrażone jako liczba tokenów, a nie liczba znaków. Token zawiera średnio 4 znaki. W naszym przykładzie chunkSize
ma 3000 znaków, co daje około 750 tokenów.
Określanie dostępności tokenów
Aby określić, ile tokenów jest dostępnych do użycia w danych wejściowych, użyj metody measureInputUsage()
i właściwości inputQuota
. W tym przypadku implementacja jest nieograniczona, ponieważ nie można przewidzieć, ile razy narzędzie do podsumowywania będzie musiało przetworzyć cały tekst.
Generowanie podsumowań dla każdego podziału
Po skonfigurowaniu sposobu podziału treści możesz wygenerować podsumowania każdej części za pomocą interfejsu Summarizer API.
Utwórz instancję narzędzia do podsumowywania za pomocą create()
funkcji. Aby zachować jak najwięcej kontekstu, ustawiliśmy parametr format
na plain-text
, type
na tldr
i length
na long
.
Następnie wygeneruj podsumowanie dla każdego podziału utworzonego przez funkcję
RecursiveCharacterTextSplitter
i połącz wyniki w nowy ciąg znaków.
Każde podsumowanie zostało oddzielone nowym wierszem, aby można było łatwo zidentyfikować podsumowanie każdej części.
Chociaż ta nowa linia nie ma znaczenia, gdy pętla jest wykonywana tylko raz, jest przydatna do określania, w jaki sposób każde podsumowanie zwiększa wartość tokena w przypadku podsumowania końcowego. W większości przypadków to rozwiązanie powinno działać w przypadku średnich i długich treści.
Rekurencyjne podsumowanie podsumowań
Jeśli tekst jest bardzo długi, długość połączonego podsumowania może być większa niż dostępne okno kontekstu, co spowoduje niepowodzenie podsumowania. Aby rozwiązać ten problem, możesz rekurencyjnie podsumowywać podsumowania.

Nadal zbieramy wstępne podziały wygenerowane przez RecursiveCharacterTextSplitter
. Następnie w funkcji recursiveSummarizer()
powtarzamy proces podsumowywania na podstawie długości znaków połączonych fragmentów. Jeśli długość znaków w podsumowaniach przekracza 3000
, łączymy je w fullSummaries
. Jeśli limit nie zostanie osiągnięty, podsumowanie zostanie zapisane jako partialSummaries
.
Gdy wszystkie podsumowania zostaną wygenerowane, końcowe podsumowania częściowe zostaną dodane do pełnego podsumowania. Jeśli w fullSummaries
jest tylko 1 podsumowanie, nie jest potrzebna dodatkowa rekurencja. Funkcja zwraca ostateczne podsumowanie. Jeśli jest więcej niż jedno podsumowanie, funkcja powtarza się i kontynuuje podsumowywanie częściowych podsumowań.
Przetestowaliśmy to rozwiązanie na RFC dotyczącym protokołu IRC, który zawiera aż 110 030 znaków, w tym 17 560 słów. Interfejs Summarizer API podał to podsumowanie:
Internet Relay Chat (IRC) to sposób komunikacji online w czasie rzeczywistym za pomocą wiadomości tekstowych. Możesz rozmawiać na kanałach lub wysyłać wiadomości prywatne, a także używać poleceń do sterowania czatem i interakcji z serwerem. To jak czat w internecie, na którym możesz pisać i natychmiast widzieć wiadomości innych osób.
To całkiem skuteczne. Ma tylko 309 znaków.
Ograniczenia
Technika podsumowania podsumowań pomaga działać w ramach okna kontekstu modelu o rozmiarze klienta. Chociaż AI po stronie klienta ma wiele zalet, możesz napotkać te problemy:
- Mniej dokładne podsumowania: w przypadku rekursji proces podsumowywania może być powtarzany w nieskończoność, a każde podsumowanie jest coraz bardziej oddalone od tekstu oryginalnego. Oznacza to, że model może wygenerować zbyt powierzchowne podsumowanie, które nie będzie przydatne.
- Wolniejsze działanie: wygenerowanie każdego podsumowania zajmuje trochę czasu. W przypadku dłuższych tekstów, w których można utworzyć nieskończenie wiele podsumowań, ta metoda może zająć kilka minut.
Dostępna jest wersja demonstracyjna narzędzia do podsumowywania, a pełny kod źródłowy możesz wyświetlić tutaj.
Prześlij opinię
Wypróbuj technikę podsumowania podsumowań z tekstem wejściowym o różnej długości, różnymi rozmiarami podziału i różnymi długościami nakładania się, korzystając z interfejsu Summarizer API.
- Jeśli chcesz przesłać opinię na temat implementacji Chrome, prześlij raport o błędzie lub prośbę o dodanie funkcji.
- Zapoznaj się z dokumentacją w MDN
- Porozmawiaj z zespołem AI w Chrome o procesie podsumowywania lub innych pytaniach dotyczących wbudowanej AI.