Data publikacji: 12 marca 2025 r., ostatnia aktualizacja: 28 maja 2025 r.
Objaśnienie | Sieć | Rozszerzenia | Stan Chrome | Intencja |
---|---|---|---|---|
MDN | Wyświetl | Intencja dostawy |
Interfejs Summarizer API pomaga generować podsumowania informacji w różnych formatach i długościach. Używaj go z Gemini Nano w Chrome lub innych modelach językowych wbudowanych w przeglądarki, aby zwięźle wyjaśniać długie lub skomplikowane teksty.
Gdy operacja jest wykonywana po stronie klienta, możesz pracować z danymi lokalnie, co pozwala zachować bezpieczeństwo danych wrażliwych i zapewnić 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 użyć techniki 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
Warto zastanowić się, jak podzielić duży fragment tekstu, ponieważ różne strategie mogą prowadzić do różnych wyników w przypadku modeli LLM. Tekst powinien być dzielony w miejscach, w których zmienia się temat, np. w nowym rozdziale artykułu lub akapicie. Unikaj dzielenia tekstu w połowie słowa lub zdania, co oznacza, że nie możesz używać liczby znaków jako jedynej wskazówki.
Możesz to zrobić na wiele sposobów. W tym przykładzie użyliśmy rekursywnego rozdzielacza tekstu z biblioteki LangChain.js, która zapewnia równowagę między wydajnością a jakością danych wyjściowych. Ta metoda powinna się sprawdzić w przypadku większości obciążeń.
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ść modeli LLM ma okno kontekstu wyrażone jako liczba tokenów, a nie liczba znaków. Średnio token zawiera 4 znaki. W naszym przykładzie chunkSize
ma 3000 znaków, co odpowiada około 750 tokenom.
Sprawdzanie dostępności tokenów
Aby określić, ile tokenów jest dostępnych do użycia jako danych wejściowych, użyj metody measureInputUsage()
i właściwości inputQuota
. W tym przypadku implementacja jest nieograniczona, ponieważ nie możesz wiedzieć, ile razy podsumowanie będzie uruchamiane, aby przetworzyć cały tekst.
generować podsumowania dotyczące 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
– tldr
, 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 liczba znaków w podsumowaniach przekracza 3000
, łączymy je w ciąg 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 IRC (Internet Relay Chat) 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ż AI 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.
- Mniejsza wydajność: 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 zająć kilka minut.
Udostępniamy demo narzędzia do podsumowywania, a także pełny kod źródłowy.
Prześlij opinię
Spróbuj użyć techniki podsumowania podsumowań z różną długością tekstu wejściowego, różnymi rozmiarami podziału i różnymi długościami nakładania się za pomocą interfejsu Summarizer API.
- Aby przekazać opinię na temat implementacji Chrome, prześlij zgłoszenie błędu lub prośbę o dodanie funkcji.
- Przeczytaj dokumentację w MDN.
- Porozmawiaj na czacie z zespołem AI w Chrome na temat procesu podsumowywania lub innych pytań dotyczących wbudowanej AI.