Publié le 12 mars 2025
Vidéo explicative | Web | Extensions | État de Chrome | Intention |
---|---|---|---|---|
GitHub | Afficher | Intent to Experiment |
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 pour effectuer des inférences côté client et expliquer de manière concise des textes complexes ou longs.
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 le fractionnement à différents endroits peut entraîner des résultats radicalement différents de la part de Gemini Nano ou d'autres LLM. Idéalement, les textes doivent être divisés en cas de 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 définir un nombre de caractères comme seule consigne de division.
Pour ce faire, vous pouvez utiliser de nombreuses méthodes, sans effort manuel. 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. Vous pouvez donc estimer le nombre de jetons utilisés par une entrée en divisant le nombre de caractères par quatre.
Dans notre exemple, le chunkSize
est composé de 3 000 caractères, soit environ 750 jetons.
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 tl;dr
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 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 pour déterminer ce qui fonctionne le mieux pour vos cas d'utilisation.
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 manière dont nous concevons et implémentons les futures versions de cette API, ainsi que toutes les API d'IA intégrées.
- Pour envoyer des commentaires sur l'implémentation de Chrome, envoyez un rapport de bug ou une demande de fonctionnalité.
- Discuter de la conception de l'API Summarizer sur GitHub en commentant un problème existant ou en en créant un
- Participez à l'élaboration des normes en rejoignant le groupe de la communauté Web Incubator.
- 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.