Publié le 12 mars 2025, dernière mise à jour le 28 mai 2025
Vidéo explicative | Web | Extensions | État de Chrome | Intent |
---|---|---|---|---|
MDN | Afficher | Intent to Ship |
L'API Summarizer vous aide à générer des résumés d'informations dans différents formats et longueurs. Utilisez-le avec Gemini Nano dans Chrome ou d'autres modèles de langage intégrés aux navigateurs pour expliquer de manière concise un texte long ou complexe.
Lorsqu'elle est effectuée côté client, vous pouvez travailler avec des données localement, ce qui vous permet de protéger les données sensibles et de proposer une disponibilité à grande échelle. Toutefois, la fenêtre de contexte est beaucoup plus petite que celle des modèles côté serveur, ce qui signifie que les documents très volumineux peuvent être difficiles à résumer. Pour résoudre ce problème, vous pouvez utiliser la technique de récapitulatif des récapitulatifs.
Qu'est-ce qu'un résumé de résumés ?
Pour utiliser la technique de résumé des résumés, divisez le contenu d'entrée en points clés, puis résumez chaque partie indépendamment. Vous pouvez concaténer les sorties de chaque partie, puis résumer ce texte concaténé en un résumé final.

Diviser judicieusement votre contenu
Il est important de réfléchir à la façon dont vous allez diviser un long texte, car différentes stratégies peuvent entraîner des résultats différents entre les LLM. Idéalement, le texte doit être divisé lorsqu'il y a un changement de sujet, comme une nouvelle section d'un article ou un paragraphe. Il est important d'éviter de diviser le texte au milieu d'un mot ou d'une phrase. Vous ne pouvez donc pas utiliser le nombre de caractères comme seule consigne de division.
Pour ce faire, vous pouvez utiliser différentes méthodes. Dans l'exemple suivant, nous avons utilisé le séparateur de texte récursif de LangChain.js, qui équilibre les performances et la qualité de sortie. Cela devrait fonctionner pour la plupart des charges de travail.
Lorsque vous créez une instance, deux paramètres clés sont disponibles:
chunkSize
correspond au nombre maximal de caractères autorisés dans chaque fractionnement.chunkOverlap
correspond au nombre de caractères à chevaucher entre deux fractionnements consécutifs. Cela garantit que chaque bloc contient une partie du contexte du bloc précédent.
Divisez le texte avec splitText()
pour renvoyer un tableau de chaînes avec chaque segment.
La fenêtre de contexte de la plupart des LLM est exprimée en nombre de jetons, et non en nombre de caractères. En moyenne, un jeton contient quatre caractères. Dans notre exemple, chunkSize
est composé de 3 000 caractères, soit environ 750 jetons.
Déterminer la disponibilité des jetons
Pour déterminer le nombre de jetons disponibles pour une entrée, utilisez la méthode measureInputUsage()
et la propriété inputQuota
. Dans ce cas, l'implémentation est illimitée, car vous ne pouvez pas savoir combien de fois le récapitulatif s'exécutera pour traiter l'intégralité du texte.
Générer des récapitulatifs pour chaque fractionnement
Une fois que vous avez configuré la répartition du contenu, vous pouvez générer des résumés pour chaque partie à l'aide de l'API Summarizer.
Créez une instance du récapitulatif avec la fonction create()
. Pour conserver autant de contexte que possible, nous avons défini le paramètre format
sur plain-text
, type
sur tldr
et length
sur long
.
Ensuite, générez le résumé pour chaque fractionnement créé par RecursiveCharacterTextSplitter
et concaténez les résultats dans une nouvelle chaîne.
Nous avons séparé chaque résumé par une nouvelle ligne pour identifier clairement le résumé de chaque partie.
Bien que cette nouvelle ligne n'ait pas d'importance lorsque vous exécutez cette boucle une seule fois, elle est utile pour déterminer comment chaque résumé ajoute à la valeur du jeton pour le résumé final. Dans la plupart des cas, cette solution devrait fonctionner pour les contenus de taille moyenne et longue.
Résumé récursif des résumés
Lorsque vous disposez d'un texte extrêmement long, la longueur du résumé concaténé peut être supérieure à la fenêtre de contexte disponible, ce qui entraîne l'échec de la synthèse. Pour résoudre ce problème, vous pouvez résumer de manière récursive les résumés.

Nous collectons toujours les divisions initiales générées par RecursiveCharacterTextSplitter
. Ensuite, dans la fonction recursiveSummarizer()
, nous bouclons le processus de résumé en fonction de la longueur des coupures concaténées. Si la longueur des résumés en caractères dépasse 3000
, nous les concaténons dans fullSummaries
. Si la limite n'est pas atteinte, le récapitulatif est enregistré en tant que partialSummaries
.
Une fois tous les récapitulatifs générés, les récapitulatifs partiels finaux sont ajoutés au récapitulatif complet. S'il n'y a qu'un seul résumé dans fullSummaries
, aucune récursion supplémentaire n'est nécessaire. La fonction renvoie un résumé final. Si plusieurs récapitulatifs sont présents, la fonction se répète et continue de résumer les récapitulatifs partiels.
Nous avons testé cette solution avec la RFC IRC (Internet Relay Chat), qui compte 110 030 caractères, dont 17 560 mots. L'API Summarizer a fourni le résumé suivant:
Internet Relay Chat (IRC) est un moyen de communiquer en ligne en temps réel à l'aide de messages texte. Vous pouvez discuter dans des canaux ou envoyer des messages privés, et vous pouvez utiliser des commandes pour contrôler la discussion et interagir avec le serveur. Il s'agit d'une salle de chat sur Internet où vous pouvez saisir et voir instantanément les messages des autres utilisateurs.
C'est très efficace ! Et il ne comporte que 309 caractères.
Limites
La technique de résumé des résumés vous aide à travailler dans la fenêtre de contexte d'un modèle de taille client. Bien que l'IA côté client présente de nombreux avantages, vous pouvez rencontrer les problèmes suivants:
- Résumés moins précis: avec la récursion, la répétition du processus de résumé est potentiellement infinie, et chaque résumé est plus éloigné du texte d'origine. Cela signifie que le modèle peut générer un résumé final trop superficiel pour être utile.
- Performances plus lentes: la génération de chaque résumé prend du temps. Là encore, avec un nombre infini de résumés possibles dans les textes plus longs, cette approche peut prendre plusieurs minutes.
Une démonstration du récapitulatif est disponible, et vous pouvez consulter le code source complet.
Envoyer des commentaires
Essayez d'utiliser la technique de résumé des résumés avec différentes longueurs de texte d'entrée, différentes tailles de fractionnement et différentes longueurs de chevauchement, avec l'API Summarizer.
- Pour envoyer des commentaires sur l'implémentation de Chrome, envoyez un rapport de bug ou une demande de fonctionnalité.
- Consultez la documentation sur MDN.
- Discutez avec l'équipe Chrome chargée de l'IA au sujet de votre processus de résumé ou de toute autre question concernant l'IA intégrée.