Podsumowania w Chrome z wbudowaną AI

Data publikacji: 11 listopada 2024 r.

Wyobraź sobie, że możesz zaoferować użytkownikom możliwość tworzenia długich artykułów, złożonych dokumentów, a nawet ożywionych rozmów na czacie w formie zwięzłych i wnikliwych podsumowań.

Interfejs Summarizer API może służyć do generowania różnego rodzaju podsumowań o różnej długości i formatach, takich jak zdania, akapity, listy punktowane itp. Uważamy, że ten interfejs API jest przydatny w tych sytuacjach:

  • Podsumowanie najważniejszych informacji z artykułu lub rozmowy na czacie.
  • sugerowanie tytułów i nagłówków artykułów;
  • tworzenie zwięzłego i pełnego informacji podsumowania długiego tekstu.
  • Generowanie zwiastuna książki na podstawie recenzji książki.

Dostępność

  • Dołącz do testowania origin interfejsu Summarizer API, które odbywa się w wersjach Chrome od 131 do 136, aby przetestować interfejs API z udziałem prawdziwych użytkowników w środowisku produkcyjnym. Testy wersji źródłowej umożliwiają korzystanie z funkcji wszystkim użytkownikom w źródle w Chrome. Dowiedz się, jak zacząć korzystać z testów pochodzenia.
    • Chociaż mogą występować limity korzystania, możesz zintegrować te funkcje, aby przetestować je w produkcji i zebrać opinie użytkowników. Celem jest informowanie o kolejnych wersjach tego interfejsu API, ponieważ pracujemy nad zwiększeniem jego dostępności.
  • Postępuj zgodnie z naszą implementacją na stronie Stan Chrome.
  • Proponowana usługa API do podsumowywania jest częścią zestawu interfejsów API do pisania i jest otwarta na dyskusję.
  • Dołącz do programu wczesnej wersji zapoznawczej, aby wcześniej zapoznać się z nowymi wbudowanymi interfejsami API AI i uzyskać dostęp do dyskusji na naszej liście mailingowej.

Ograniczenia w okresie próbnym

Podczas testowania origin interfejs Summarizer API obsługuje tylko streszczanie tekstów w języku angielskim, ponieważ jakość modelu została dokładnie przetestowana tylko w przypadku treści w tym języku. Zamierzamy znieść to ograniczenie, gdy przetestujemy dodatkowe języki pod kątem jakości i bezpieczeństwa, a interfejs API będzie dostępny dla wszystkich.

Korzystanie z interfejsu Summarizer API

Najpierw uruchom wykrywanie funkcji, aby sprawdzić, czy przeglądarka obsługuje interfejs Summarizer API.

if ('ai' in self && 'summarizer' in self.ai) {
  // The Summarizer API is supported.
}

Pobieranie modelu

Interfejs Summarizer API korzysta z potężnego modelu AI, który został przeszkolony do generowania wysokiej jakości streszczeń. Chociaż interfejs API jest wbudowany w Chrome, model jest pobierany osobno przy pierwszym użyciu interfejsu API przez witrynę.

Aby sprawdzić, czy model jest gotowy do użycia, wywołaj asynchroniczną funkcję ai.summarizer.capabilities(). Zwraca obiekt AISummarizerCapabilities z polem available, które może przyjmować 3 możliwe wartości:

  • no: bieżąca przeglądarka obsługuje interfejs Summarizer API, ale nie można go obecnie używać. Może to być spowodowane wieloma czynnikami, np. niewystarczającą ilością wolnego miejsca na dysku do pobrania modelu.
  • readily: przeglądarka obsługuje interfejs Summarizer API i można go od razu używać.
  • after-download: bieżąca przeglądarka obsługuje interfejs Summarizer API, ale najpierw musisz pobrać model.

Aby aktywować pobieranie modelu i utworzyć podsumowanie, wywołaj funkcję asynchroniczną ai.summarizer.create(). Jeśli odpowiedź na capabilities() to after-download, zalecamy sprawdzenie postępu pobierania. W ten sposób możesz poinformować użytkownika, jeśli pobieranie zajęło dużo czasu.

const summarizer = await ai.summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  }
});

Funkcje interfejsu API

Funkcja create() pozwala skonfigurować nowy obiekt podsumowania zgodnie z potrzebami. Przyjmuje opcjonalny obiekt options z tymi parametrami:

  • sharedContext: dodatkowy udostępniony kontekst, który może ułatwić streszczenie.
  • type: typ podsumowania, którego dozwolone wartości to key-points (domyślnie), tl;dr, teaser i headline.
  • format: format podsumowania z dozwolonymi wartościami markdown (domyślnie) i plain-text.
  • length: długość podsumowania, z dozwolonymi wartościami short, medium (domyślna) i long. Znaczenie tych długości może się różnić w zależności od żądanego type. Na przykład w przypadku Chrome krótkie podsumowanie kluczowych informacji składa się z 3 punktów, a krótkie podsumowanie to jedno zdanie. Długie podsumowanie kluczowych informacji składa się z 7 punktów, a długie podsumowanie to jeden akapit.

Poniższy przykład pokazuje, jak zainicjować funkcję podsumowującą.

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

const available = (await self.ai.summarizer.capabilities()).available;
let summarizer;
if (available === 'no') {
  // The Summarizer API isn't usable.
  return;
}
if (available === 'readily') {
  // The Summarizer API can be used immediately .
  summarizer = await self.ai.summarizer.create(options);
} else {
  // The Summarizer API can be used after the model is downloaded.
  summarizer = await self.ai.summarizer.create(options);
  summarizer.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
  await summarizer.ready;
}

Uruchamianie podsumowania

Istnieją 2 sposoby uruchomienia narzędzia do podsumowywania: z przesyłaniem strumieniowym i bez niego.

Podsumowanie bez strumieniowania

W przypadku podsumowywania niestrumieniowego model przetwarza dane wejściowe jako całość, a następnie generuje dane wyjściowe.

Aby uzyskać podsumowanie niestrumieniowe, wywołaj asynchroniczną funkcję summarize(). Pierwszym argumentem funkcji jest tekst, który chcesz podsumować. Drugi, opcjonalny argument to obiekt z polem context. W tym polu możesz dodać szczegóły, które mogą poprawić podsumowanie.

const longText = document.querySelector('article').innerHTML;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});

Podsumowanie transmisji

Podsumowywanie strumieniowania zapewnia wyniki w czasie rzeczywistym. Dane wyjściowe są aktualizowane na bieżąco w miarę dodawania i dostosowywania danych wejściowych.

Aby uzyskać podsumowanie strumieniowania, wywołaj funkcję summarizeStreaming(). Następnie przejdź przez dostępne segmenty tekstu w strumieniach.

let result = '';
let previousChunk = '';
for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

Funkcja summarizeStreaming() zwraca ReadableStream, w którym segmenty odpowiedzi nakładają się na siebie. Oznacza to, że każda odpowiedź zawiera całe podsumowanie wygenerowane do tego momentu, a nie tylko następny segment, co nie jest zamierzone.

Chcemy dostosować się do innych interfejsów API do strumieniowego przesyłania danych na platformie, w których segmenty to kolejne części jednego długiego strumienia. Aby osiągnąć zamierzone zachowanie, możesz wdrożyć te rozwiązania:

let result = '';
let previousLength = 0;
for await (const segment of stream) {
  const newContent = segment.slice(previousLength);
  console.log(newContent);
  previousLength = segment.length;  
  result += newContent;
}
console.log(result);

Prezentacja

Interfejs Summarizer API możesz wypróbować w Summarizer API Playground.

Standaryzacja

Pracujemy nad ujednoliceniem interfejsu Summarizer API, aby zapewnić zgodność z różnymi przeglądarkami.

Nasza propozycja interfejsu API otrzymała poparcie społeczności i została przeniesiona do grupy społeczności W3C Web Incubator w celu dalszego dyskusji. Zespół Chrome poprosił W3C Technical Architecture Group o opinię, a także MozillaWebKit o ich stanowisko w sprawie standardów.

Weź udział i podziel się opinią

Zacznij testować interfejs Summarizer API, dołączając do testu wersji źródłowej i przesyłając opinię. Twoja opinia może mieć bezpośredni wpływ na to, jak tworzymy i wdrażamy przyszłe wersje tego interfejsu API oraz wszystkie wbudowane interfejsy API AI.