Interfejs Summarizer API umożliwia programistom stron internetowych oferowanie lokalnego, opartego na AI podsumowywania tekstu bezpośrednio w przeglądarce za pomocą Gemini Nano w Chrome lub Phi w Edge. Ten interfejs API obsługuje różne formaty, w tym najważniejsze punkty, nagłówki i TL;DR, a jednocześnie działa całkowicie na urządzeniu, aby zapewnić prywatność użytkowników.
Pierwsze kroki
Interfejs Summarizer API jest dostępny od wersji Chrome i Edge 138. Wymaga jednorazowego pobrania modelu Gemini Nano lub Phi.
Wymagania sprzętowe i programowe
- System operacyjny: Windows 10/11, macOS 13 lub nowszy, Linux lub ChromeOS (Chromebook Plus).
- Miejsce na dane: 22 GB wolnego miejsca na wolumin profilu.
- RAM/CPU: co najmniej 16 GB pamięci RAM i co najmniej 4 rdzenie procesora.
- VRAM co najmniej 4 GB (jeśli używasz GPU).
Pobieranie i dostępność modelu
Sprawdź, czy model jest gotowy, wymaga pobrania lub jest niedostępny.
Obowiązkowe przekazywanie opcji: musisz przekazać identyczny obiekt opcji konfiguracji zarówno do Summarizer.availability(options), jak i do Summarizer.create(options). NIE używaj wycofanego interfejsu API window.ai.summarizer.
Obowiązkowe monitorowanie postępów: MUSISZ zaimplementować monitor postępów pobierania modelu, podając wywołanie zwrotne monitor(m) do Summarizer.create() i dodając detektor zdarzenia downloadprogress.
Wymaganie dotyczące gestu użytkownika: gdy availability ma wartość 'downloadable' lub 'downloading', wywołanie rzeczywistego pobierania za pomocą Summarizer.create() wymaga gestu użytkownika (np. kliknięcia). Aby zapobiec wystąpieniu błędu NotAllowedError, musisz umieścić wywołanie tworzenia w detektorze zdarzeń, a nie wywoływać je bezwarunkowo podczas wczytywania strony.
const options = {
type: 'key-points',
format: 'plain-text',
length: 'medium'
};
const availability = await Summarizer.availability(options);
if (availability === 'available') {
const summarizer = await Summarizer.create(options);
// Ready to use immediately
} else if (availability === 'downloadable') {
// A user gesture is strictly required to start the download
document.getElementById('start-download-btn').addEventListener('click', async () => {
const summarizer = await Summarizer.create({
...options,
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
});
},
});
});
}
Funkcje i konfiguracja interfejsu API
Podczas tworzenia podsumowania za pomocą Summarizer.create(options) możesz dostosować dane wyjściowe:
| Parametr | Opcje | Opis |
|---|---|---|
type |
key-points, tldr, teaser, headline |
Definiuje strategię podsumowania. |
format |
markdown, plain-text |
Styl składni wyjściowej. |
length |
short, medium, long |
docelowa długość (np. 1 zdanie lub 5 zdań); |
preference |
auto, speed, capability |
Zapewnia równowagę między opóźnieniem a jakością. |
Przykładowa konfiguracja
const options = {
sharedContext: 'This is a scientific article',
type: 'key-points',
format: 'markdown',
length: 'medium',
};
if (navigator.userActivation.isActive) {
const summarizer = await Summarizer.create(options);
}
Obsługa języka
Możesz określić oczekiwane języki, aby mieć pewność, że przeglądarka będzie mogła obsłużyć konkretne żądanie podsumowania.
const summarizer = await Summarizer.create({
type: 'key-points',
expectedInputLanguages: ['en', 'ja'],
outputLanguage: 'es',
});
Metody podsumowywania
1. Podsumowanie zbiorcze
Przetwarza cały tekst jednocześnie i zwraca wynik.
const longText = document.querySelector('article').innerText;
const summary = await summarizer.summarize(longText, {
context: 'This article is intended for a tech-savvy audience.',
});
console.log(summary);
2. Podsumowanie strumienia
Zwraca wyniki w czasie rzeczywistym, gdy model je generuje, co zapewnia bardziej responsywny interfejs.
const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
Zabezpieczenia i uprawnienia
- Prywatność danych: żadne dane nie są wysyłane do Google. Przetwarzanie odbywa się na urządzeniu lokalnym.
Współdzielenie: dostęp do elementów iframe można przyznać za pomocą zasad uprawnień.
<iframe src="https://example.com/" allow="summarizer"></iframe>Web Workers: obecnie nie są obsługiwane.
Strategia zastępcza
Zanim zainicjujesz lub sprawdzisz dostępność, sprawdź, czy przeglądarka obsługuje interfejs API Summarizer:
if ('Summarizer' in self) {
// The Summarizer API is supported.
} else {
// Execute fallback strategy
}
Jeśli interfejs API Summarizer nie jest obsługiwany lub testy dostępności zwracają wartość 'unavailable', musisz zastosować odpowiednie rozwiązanie zastępcze.
Zalecane opcje:
- Zastępczy zdalny interfejs API: przekieruj żądanie destylacji do punktu końcowego serwera lub zdalnego interfejsu API (takiego jak Vertex AI Gemini API), aby użytkownicy nadal otrzymywali podsumowania.
- Łagodna degradacja: wizualnie wyłącz elementy sterujące podsumowaniem w interfejsie lub ukryj przycisk, wyświetlając przyjazny komunikat (np.
"Local summarization is currently unsupported in this browser"). Nie zezwalaj na interakcje, które wywołują ogólne nieobsługiwane wyjątki w czasie działania. - Polyfill Fallback: możesz używać utrzymywanych przez społeczność polyfilli, takich jak
built-in-ai-task-apis-polyfillslubprompt-api-polyfill, aby emulować interfejs API za pomocą usług zdalnych z modelami w chmurze lub wnioskowania na urządzeniu z modelami lokalnymi.
Prywatność i koszty: te polyfille mogą przekazywać żądania do serwerów zdalnych (np. Gemini API w chmurze). To całkowicie unieważnia gwarancje prywatności na urządzeniu, które zapewniają natywne wbudowane interfejsy AI API, i powoduje naliczanie kosztów korzystania z interfejsu API po stronie serwera.