L'API Summarizer permet aux développeurs Web de proposer une distillation de texte locale optimisée par l'IA directement dans le navigateur à l'aide de Gemini Nano dans Chrome ou de Phi dans Edge. Cette API est compatible avec différents formats, y compris les points clés, les titres et les résumés, tout en fonctionnant entièrement sur l'appareil pour garantir la confidentialité des utilisateurs.
Premiers pas
L'API Summarizer est disponible à partir de Chrome et Edge 138. Il nécessite un téléchargement unique du modèle Gemini Nano ou Phi (respectivement).
Configuration matérielle et logicielle requise
- OS : Windows 10/11, macOS 13 ou version ultérieure, Linux ou ChromeOS (Chromebook Plus).
- Stockage : 22 Go d'espace libre pour le volume du profil.
- RAM/CPU : au moins 16 Go de RAM et au moins 4 cœurs de CPU.
- VRAM : 4 Go ou plus (si vous utilisez un GPU).
Téléchargement et disponibilité des modèles
Vérifiez si le modèle est prêt, s'il doit être téléchargé ou s'il n'est pas disponible.
Transmission obligatoire des options : vous devez transmettre l'objet d'options de configuration identique à Summarizer.availability(options) et Summarizer.create(options). N'utilisez PAS la surface d'API window.ai.summarizer obsolète.
Surveillance obligatoire de la progression : vous DEVEZ implémenter un outil de surveillance de la progression du téléchargement du modèle en fournissant un rappel monitor(m) à Summarizer.create() et en ajoutant un écouteur pour l'événement downloadprogress.
Exigence de geste de l'utilisateur : lorsque availability est défini sur 'downloadable' ou 'downloading', le déclenchement du téléchargement réel via Summarizer.create() nécessite un geste de l'utilisateur (par exemple, un clic). Vous devez placer l'appel de création dans un écouteur d'événements plutôt que de l'appeler de manière inconditionnelle lors du chargement de page pour éviter NotAllowedError.
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)}%`);
});
},
});
});
}
Fonctions et configuration de l'API
Lorsque vous créez un outil de résumé via Summarizer.create(options), vous pouvez personnaliser le résultat :
| Paramètre | Options | Description |
|---|---|---|
type |
key-points, tldr, teaser, headline |
Définit la stratégie de résumé. |
format |
markdown, plain-text |
Style de syntaxe de sortie. |
length |
short, medium, long |
Longueur cible (par exemple, une ou cinq phrases). |
preference |
auto, speed, capability |
Équilibre entre latence et qualité. |
Exemple de configuration
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);
}
Langues acceptées
Vous pouvez spécifier les langues attendues pour vous assurer que le navigateur peut gérer la requête de résumé spécifique.
const summarizer = await Summarizer.create({
type: 'key-points',
expectedInputLanguages: ['en', 'ja'],
outputLanguage: 'es',
});
Méthodes de synthèse
1. Synthèse par lot
Traite l'intégralité du texte en une seule fois et renvoie le résultat.
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. Synthèse de flux
Renvoie les résultats en temps réel à mesure que le modèle les génère, ce qui permet d'obtenir une UI plus réactive.
const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
Sécurité et autorisations
- Confidentialité des données : aucune donnée n'est envoyée à Google. Le traitement s'effectue sur l'appareil local.
Interorigine : l'accès peut être accordé aux iFrames à l'aide de la règle d'autorisation.
<iframe src="https://example.com/" allow="summarizer"></iframe>Web Workers : non compatibles pour le moment.
Stratégie de remplacement
Avant d'initialiser ou d'interroger la disponibilité, vérifiez si le navigateur est compatible avec l'API Summarizer :
if ('Summarizer' in self) {
// The Summarizer API is supported.
} else {
// Execute fallback strategy
}
Si l'API Summarizer n'est pas compatible ou si les vérifications de disponibilité renvoient 'unavailable', vous devez effectuer un remplacement progressif.
Options recommandées :
- Solution de secours avec API distante : dirigez la requête de distillation vers un point de terminaison de serveur ou une API distante (comme l'API Gemini Vertex AI) pour que les utilisateurs continuent de recevoir des résumés.
- Dégradation élégante : désactivez visuellement les commandes de résumé dans l'interface utilisateur ou masquez le bouton tout en affichant un message convivial (par exemple,
"Local summarization is currently unsupported in this browser"). Ne permettez pas à l'interaction de déclencher des exceptions d'exécution génériques non gérées. - Polyfill de remplacement : vous pouvez utiliser des polyfills gérés par la communauté, comme
built-in-ai-task-apis-polyfillsouprompt-api-polyfill, pour émuler la surface de l'API à l'aide de services distants avec des modèles dans le cloud ou d'inférence sur l'appareil avec des modèles locaux.
Implications en termes de confidentialité et de coûts : ces polyfills peuvent envoyer des requêtes proxy à des serveurs distants (comme l'API Gemini sur le cloud). Cela annule complètement les garanties de confidentialité sur l'appareil des API d'IA intégrées natives et entraîne des coûts d'utilisation de l'API côté serveur.