Data publikacji: 12 marca 2025 r.
Objaśnienie | Sieć | Rozszerzenia | Stan Chrome | Podobne zamiary |
---|---|---|---|---|
GitHub | Wyświetl | Chęć eksperymentowania |
Interfejs Summarizer API pomaga generować streszczenia informacji o różnej długości i w różnych formatach. Korzystaj z niego w Chrome z Gemini Nano, aby wykonywać wnioskowanie po stronie klienta i zwięźle wyjaśniać skomplikowane lub długie teksty.
Gdy operacja jest wykonywana po stronie klienta, możesz pracować z danymi lokalnie, co pozwala na bezpieczne przechowywanie danych wrażliwych i zapewnia dostępność na dużą skalę. Okno kontekstu jest jednak znacznie mniejsze niż w przypadku modeli po stronie serwera, co oznacza, że bardzo duże dokumenty mogą być trudne do podsumowania. Aby rozwiązać ten problem, możesz użyć techniki podsumowania podsumowań.
Co to jest podsumowanie podsumowań?
Aby zastosować technikę podsumowania podsumowań, podziel dane wejściowe w kluczowych punktach, a potem podsumuj każdą część osobno. Możesz złączyć dane wyjściowe z każdej części, a potem podsumować połączony tekst w jedną ostateczną treść.

Przemyślane dzielenie treści
Należy przemyśleć, jak podzielić duży fragment tekstu, ponieważ podział w różnych miejscach może prowadzić do radykalnie różnych wyników w Gemini Nano lub innych modelach LLM. Teksty najlepiej dzielić w miejscach, w których zmienia się temat, np. w nowej sekcji artykułu lub akapicie. Unikaj dzielenia tekstu w połowie słowa lub zdania, co oznacza, że nie możesz ustawić liczby znaków jako jedynej wskazówki.
Możesz to zrobić na wiele sposobów, bez ręcznego wysiłku. W tym przykładzie użyliśmy rekursywnego dzielnika tekstu z biblioteki LangChain.js, która zapewnia równowagę między wydajnością a jakością danych wyjściowych. Powinna ona działać w przypadku większości zbiorów zadań.
Podczas tworzenia nowej instancji należy podać 2 kluczowe parametry:
chunkSize
to maksymalna liczba znaków dozwolonych w każdej części.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ą funkcji splitText()
, aby zwrócić tablicę ciągów znaków z każdym fragmentem.
Większość LLM ma okno kontekstu wyrażone jako liczba tokenów, a nie liczba znaków. Średnio token zawiera 4 znaki, więc możesz oszacować liczbę tokenów użytych w danych wejściowych, dzieląc liczbę znaków przez 4.
W naszym przykładzie chunkSize
ma 3000 znaków, co odpowiada około 750 tokenom.
generować podsumowania dla każdego podziału;
Po skonfigurowaniu podziału treści możesz wygenerować podsumowania dla poszczególnych części za pomocą interfejsu Summarizer API.
Utwórz instancję funkcji podsumowującej za pomocą funkcji create()
. Aby zachować jak najwięcej kontekstu, parametr format
ma wartość plain-text
, parametr type
– tl;dr
, a parametr length
– long
.
Następnie wygeneruj podsumowanie każdego podziału utworzonego przez funkcję RecursiveCharacterTextSplitter
i złącz wyniki w nowy ciąg znaków.
Każde podsumowanie zostało oddzielone nowym wierszem, aby wyraźnie je wyróżnić.
Chociaż ta nowa linia nie ma znaczenia, gdy pętla jest wykonywana tylko raz, jest przydatna do określenia, jak każda wartość podsumowania wpływa na wartość tokenu w podsumowaniu końcowym. 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, złączone podsumowanie może być dłuższe niż dostępne okno kontekstu, co spowoduje niepowodzenie podsumowania. Aby rozwiązać ten problem, możesz rekurencyjnie podsumowywać podsumowania.

Nadal zbieramy początkowe podziały wygenerowane przez RecursiveCharacterTextSplitter
. Następnie w funkcji recursiveSummarizer()
pętlizuje proces podsumowania na podstawie długości znaków połączonych podziałów. Jeśli długość znaków podsumowania przekracza 3000
, łączymy je w fullSummaries
. Jeśli limit nie zostanie osiągnięty, podsumowanie zostanie zapisane jako partialSummaries
.
Po wygenerowaniu wszystkich podsumowań do pełnego podsumowania zostaną dodane ostateczne podsumowania częściowe. Jeśli w elementach fullSummaries
jest tylko 1 podsumowanie, nie trzeba stosować dodatkowej rekurencji. Funkcja zwraca podsumowanie końcowe. Jeśli jest więcej niż jedno podsumowanie, funkcja powtarza i kontynuuje podsumowanie podsumowań częściowych.
Przetestowaliśmy to rozwiązanie za pomocą protokołu Internet Relay Chat (IRC) RFC, który zawiera aż 110 030 znaków, w tym 17 560 słów. Interfejs Summarizer API podał takie podsumowanie:
Internet Relay Chat (IRC) to sposób na komunikację online w czasie rzeczywistym za pomocą wiadomości tekstowych. Możesz prowadzić rozmowy na kanałach lub wysyłać wiadomości prywatne. Możesz też używać poleceń do kontrolowania czatu i interakcji z serwerem. To jak pokój czatu w internecie, w którym możesz wpisywać i natychmiast wyświetlać wiadomości innych osób.
To bardzo skuteczne. Ma tylko 309 znaków.
Ograniczenia
Technika podsumowania podsumowań pomaga działać w oknie kontekstu modelu o rozmiarach klienta. Chociaż sztuczna inteligencja po stronie klienta ma wiele zalet, możesz napotkać te problemy:
- Mniej dokładne streszczenia: w przypadku rekurencji powtarzanie procesu streszczania może być nieskończone, a każde kolejne streszczenie jest coraz bardziej odległe od pierwotnego tekstu. Oznacza to, że model może wygenerować podsumowanie, które jest zbyt płytkie, aby było przydatne.
- Wolniejsze działanie: generowanie każdego podsumowania wymaga czasu. Ponieważ w przypadku dłuższych tekstów istnieje nieskończona liczba możliwych streszczeń, wykonanie tego zadania może potrwać kilka minut.
Udostępniamy demo narzędzia do podsumowywania, a także pełny kod źródłowy.
Prześlij opinię
Aby określić, która z nich najlepiej sprawdza się w Twoim przypadku, spróbuj użyć techniki podsumowania podsumowań z różną długością tekstu wejściowego, różnymi rozmiarami podziałów i różnymi długościami nakładania się.
Zacznij testować interfejs Summarizer API, dołączając do testu wersji źródłowej i przesyłając opinię. Twoje opinie mogą mieć bezpośredni wpływ na sposób tworzenia i wdrażania przyszłych wersji tego interfejsu API oraz wszystkich wbudowanych interfejsów API AI.
- Aby przekazać opinię na temat implementacji Chrome, prześlij raport o błędzie lub prośbę o dodanie funkcji.
- Porozmawiaj o projektowaniu interfejsu Summarizer API na GitHubie, komentując istniejący problem lub otwierając nowy.
- Aby wziąć udział w pracach nad standardami, dołącz do grupy społecznościowej Web Incubator.
- Porozmawiaj na czacie z zespołem AI w Chrome na temat procesu podsumowywania lub innych wbudowanych pytań dotyczących AI.