Résumer des articles dans Chrome avec l'IA intégrée

Publié le 11 novembre 2024

Imaginez que vous puissiez offrir à vos utilisateurs la possibilité de condenser des articles longs, des documents complexes ou même des conversations de chat animées en résumés concis et pertinents.

L'API Summarizer permet de générer différents types de résumés dans différents formats et longueurs, tels que des phrases, des paragraphes, des listes à puces, etc. Nous pensons que cette API est utile dans les scénarios suivants:

  • résumer les points clés d'un article ou d'une conversation par chat ;
  • suggérer des titres et des titres pour les articles ;
  • Rédiger un résumé concis et informatif d'un long texte.
  • Générer un extrait d'un livre à partir d'un avis

Disponibilité

  • Participez à la phase d'évaluation de l'API Summarizer, qui s'exécute de Chrome 131 à Chrome 136, pour tester l'API en production auprès de vrais utilisateurs. Les phases d'évaluation activent la fonctionnalité pour tous les utilisateurs de votre origine sur Chrome. Découvrez comment faire vos premiers pas avec les essais d'origine.
    • Bien que des limites d'utilisation puissent s'appliquer, vous pouvez intégrer ces fonctionnalités pour effectuer des tests en direct et recueillir les commentaires des utilisateurs. L'objectif est d'informer les futures itérations de cette API, car nous travaillons à une disponibilité plus large.
  • Suivez notre implémentation dans État de Chrome.
  • La proposition d'API Summarizer fait partie d'une suite d'API d'écriture et est ouverte à la discussion.
  • Rejoignez le programme Preview anticipé pour découvrir en avant-première les nouvelles API d'IA intégrées et participer aux discussions sur notre liste de diffusion.

Limites pendant la période d'essai de l'origine

Pendant la phase d'évaluation, l'API Summarizer n'accepte que la synthèse de textes anglais, car la qualité du modèle n'a été soigneusement testée que sur du contenu en anglais. Nous prévoyons de lever cette limitation une fois que nous aurons testé d'autres langues pour vérifier leur qualité et leur sécurité, et que l'API sera largement disponible.

Utiliser l'API Summarizer

Commencez par exécuter la détection de fonctionnalités pour voir si le navigateur est compatible avec l'API Summarizer.

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

Téléchargement du modèle

L'API Summarizer utilise un puissant modèle d'IA entraîné pour générer des résumés de haute qualité. Bien que l'API soit intégrée à Chrome, le modèle est téléchargé séparément la première fois qu'un site Web utilise l'API.

Pour déterminer si le modèle est prêt à l'emploi, appelez la fonction ai.summarizer.capabilities() asynchrone. Elle renvoie un objet AISummarizerCapabilities avec un champ available pouvant prendre trois valeurs possibles:

  • no: Le navigateur actuel est compatible avec l'API Summarizer, mais il ne peut pas être utilisé pour le moment. Plusieurs raisons peuvent expliquer ce problème, comme un espace disque disponible insuffisant pour télécharger le modèle.
  • readily: le navigateur actuel est compatible avec l'API Summarizer et peut être utilisé immédiatement.
  • after-download: le navigateur actuel est compatible avec l'API Summarizer, mais il doit d'abord télécharger le modèle.

Pour déclencher le téléchargement du modèle et créer le récapitulatif, appelez la fonction ai.summarizer.create() asynchrone. Si la réponse à capabilities() était after-download, il est recommandé d'écouter la progression du téléchargement. Vous pouvez ainsi informer l'utilisateur si le téléchargement prend du temps.

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

Fonctions de l'API

La fonction create() vous permet de configurer un nouvel objet récapitulatif en fonction de vos besoins. Il accepte un objet options facultatif avec les paramètres suivants:

  • sharedContext: contexte partagé supplémentaire pouvant aider le récapitulatif.
  • type: type de synthèse, avec les valeurs autorisées key-points (par défaut), tl;dr, teaser et headline.
  • format: format de la synthèse, avec les valeurs autorisées markdown (par défaut) et plain-text.
  • length: longueur de la synthèse, avec les valeurs autorisées short, medium (par défaut) et long. La signification de ces longueurs varie en fonction de la type demandée. Par exemple, dans l'implémentation de Chrome, un bref résumé des points clés se compose de trois puces, et un bref résumé se compose d'une phrase. Un long résumé des points clés se compose de sept puces, et un long résumé se compose d'un paragraphe.

L'exemple suivant montre comment initialiser le récapitulatif.

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;
}

Exécuter l'outil de synthèse

Il existe deux façons d'exécuter le récapitulatif: en streaming et en non-streaming.

Synthèse hors streaming

Avec la synthèse non en streaming, le modèle traite l'entrée dans son ensemble, puis produit la sortie.

Pour obtenir un résumé non en streaming, appelez la fonction summarize() asynchrone du récapitulatif. Le premier argument de la fonction est le texte que vous souhaitez résumer. Le deuxième argument facultatif est un objet avec un champ context. Ce champ vous permet d'ajouter des informations générales qui peuvent améliorer le résumé.

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

Récapitulatif de streaming

Le résumé en streaming offre des résultats en temps réel. La sortie est mise à jour en continu à mesure que l'entrée est ajoutée et ajustée.

Pour obtenir un résumé en streaming, appelez la fonction summarizeStreaming() du récapitulatif. Itérez ensuite sur les segments de texte disponibles dans le flux.

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);

summarizeStreaming() renvoie un ReadableStream, dans lequel les segments de réponse se construisent successivement les uns sur les autres. Cela signifie que chaque réponse contient l'intégralité du récapitulatif généré jusqu'à ce point, et non seulement le segment suivant, ce qui n'est pas le comportement prévu.

Nous prévoyons de nous aligner sur les autres API de streaming de la plate-forme, où les segments sont des éléments successifs d'un seul long flux. Pour le moment, pour obtenir le comportement souhaité, vous pouvez implémenter ce qui suit:

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);

Démo

Vous pouvez essayer l'API Summarizer dans Summarizer API Playground.

Effort de standardisation

Nous mettons tout en œuvre pour normaliser l'API Summarizer afin de garantir la compatibilité entre les navigateurs.

Notre proposition d'API a reçu l'appui de la communauté et a été transférée au groupe de la communauté de l'incubateur Web du W3C pour une discussion plus approfondie. L'équipe Chrome a demandé des commentaires au Groupe d'architecture technique du W3C, et à Mozilla et WebKit de préciser leur position sur les normes.

Participer et envoyer des commentaires

Commencez à tester l'API Summarizer dès maintenant en participant à la phase d'évaluation et envoyez-nous vos commentaires. Vos commentaires peuvent avoir un impact direct sur la façon dont nous créons et implémentons les futures versions de cette API et de toutes les API d'IA intégrées.