Podsumowanie

Funkcje internetowe: Podsumowanie

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:

  1. 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.
  2. Ł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.
  3. Polyfill Fallback: możesz używać utrzymywanych przez społeczność polyfilli, takich jak built-in-ai-task-apis-polyfills lub prompt-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.