Chrome a intégré un modèle d'IA directement dans le navigateur. L'API Prompt est l'interface JavaScript que vous appelez pour l'utiliser. Aucune clé API, aucun aller-retour réseau, aucune facturation par jeton. Le modèle est Gemini Nano, il s'exécute sur l'appareil de l'utilisateur, et depuis Chrome 138, il est généralement disponible pour les extensions et derrière un drapeau pour les pages web. Pour les développeurs d'API, cela change ce qu'il est raisonnable de faire côté client.
Ce guide couvre ce qu'est l'API Prompt de Chrome, comment elle diffère de l'API Gemini basée sur le cloud, quand elle s'intègre réellement dans un flux de travail d'API, du code pratique pour les extensions et les pages web, et les limites que vous atteindrez plus rapidement que les documents ne l'admettent. Nous l'associons à Apidog à la fin afin que les mêmes tâches aient un chemin de repli lorsque le modèle n'est pas disponible.
En bref
- L'API Prompt de Chrome expose Gemini Nano via
LanguageModel, disponible surwindow.LanguageModelpour les pages web etchrome.languageModelpour les extensions. - Le modèle s'exécute entièrement sur l'appareil. Aucun appel réseau, aucune clé, aucun coût par jeton.
- Stable pour les extensions Chrome dans Chrome 138+. Pour les pages web, elle est déployée derrière le drapeau
chrome://flags/#prompt-api-for-gemini-nanoet un Origin Trial enregistré. - Meilleures utilisations pour les développeurs d'API : analyse d'entrée côté client, réparation de la forme JSON, résumé des réponses API pour l'interface utilisateur et génération de stubs pendant le développement.
- Toujours prévoir un repli vers le cloud. Le modèle sur l'appareil échoue en mode ouvert ; votre code ne devrait pas.
Ce que l'API Prompt expose réellement
L'API Prompt fait partie d'un petit groupe d'API « IA intégrées » que Chrome a commencé à déployer l'année dernière. Les autres sont plus spécifiques : Summarizer (résumeur), Writer (rédacteur), Rewriter (réécrivain), Translator (traducteur) et Language Detector (détecteur de langue). L'API Prompt est l'interface à usage général ; les autres l'enveloppent avec des paramètres par défaut spécifiques à la tâche.

Trois primitives sont importantes :
LanguageModel.availability(). Retourneavailable(disponible),downloadable(téléchargeable),downloading(en cours de téléchargement) ouunavailable(non disponible). Le modèle fait environ 2 Go et se télécharge en arrière-plan la première fois qu'un site le demande.LanguageModel.create(options). Lance une session. La session conserve l'état du tour, le prompt système et quelques paramètres d'échantillonnage.session.prompt(text)etsession.promptStreaming(text). Les deux façons d'appeler réellement le modèle.
La forme est intentionnellement proche du SDK cloud de Gemini mais allégée. Il n'y a pas encore d'appel d'outils, pas d'entrée d'image sur le canal stable (elle est en Origin Trial), et la fenêtre contextuelle est petite (4K jetons d'entrée, 1K de sortie, avec une extension douce à 8K au total).
Un premier appel depuis une page web ressemble à ceci :
if (!('LanguageModel' in window)) {
console.warn('Prompt API not available. Falling back to cloud.');
} else {
const status = await LanguageModel.availability();
if (status === 'unavailable') {
console.warn('Device does not support Gemini Nano.');
} else {
if (status !== 'available') {
// Triggers a background download. Show a UI.
await LanguageModel.create({ monitor(m) {
m.addEventListener('downloadprogress', e => {
console.log(`downloaded ${(e.loaded * 100).toFixed(0)}%`);
});
}});
}
const session = await LanguageModel.create({
systemPrompt: 'You answer in three concise bullets. JSON only.',
});
const reply = await session.prompt(
'Summarize this changelog in three bullets.\n\n' + changelog
);
console.log(reply);
}
}
Chaque élément significatif est affiché dans l'extrait : détection de fonctionnalité, vérification de disponibilité, téléchargement optionnel, création de session, prompt système, appel de prompt.
Comment elle diffère de l'API Gemini basée sur le cloud
Même famille, déploiement différent. Les différences déterminent ce que vous pouvez et ne pouvez pas construire avec elle.
| Propriété | API Prompt de Chrome | API Gemini (cloud) |
|---|---|---|
| Modèle | Gemini Nano (sur l'appareil) | gemini-3-flash, gemini-3-flash-preview, gemini-3-pro |
| Coût par appel | Zéro | Facturation par jeton |
| Latence | 50 à 300 ms (premier jeton typique) | 200 à 800 ms (premier jeton) |
| Réseau | Aucun requis après le téléchargement du modèle | Requis à chaque appel |
| Confidentialité | L'entrée ne quitte jamais l'appareil | Envoyée aux serveurs Google |
| Fenêtre de contexte | 4K entrée / 1K sortie (8K combiné) | Jusqu'à 1M jetons |
| Appel d'outils | Non (prévu) | Oui |
| Multimodal | Entrée d'image en Origin Trial | Oui |
| Mode JSON | Meilleur effort via le prompt système | De première classe avec schéma |
| Disponibilité | Chrome uniquement, matériel compatible uniquement | Tout client avec réseau |
Le modèle sur l'appareil est environ deux ordres de grandeur plus petit que gemini-3-flash. Utilisez-le pour des tâches courtes où vous auriez utilisé une expression régulière ou un classificateur de prompts ajusté manuellement. Ne l'utilisez pas comme un substitut direct pour Gemini cloud.
Où elle s'intègre réellement dans le flux de travail d'un développeur d'API
Quatre cas d'utilisation justifient le coût d'intégration. En dehors de ceux-ci, l'API cloud reste le bon choix.
1. Analyse et reformulation des entrées utilisateur côté client.Prenez une requête en forme libre et transformez-la en un filtre structuré pour votre API. L'utilisateur tape « frais Stripe de plus de 100 $ la semaine dernière » ; l'API Prompt la transforme en { "amount_gt": 100, "since": "2026-04-22", "provider": "stripe" } avant que vous n'appeliez votre endpoint de recherche. Cela économise un aller-retour et protège la vie privée de l'utilisateur.
2. Résumé des réponses API pour l'interface utilisateur.Vous interrogez votre propre API, obtenez 40 enregistrements et avez besoin d'un résumé d'une ligne à afficher dans une carte. L'envoi des enregistrements à un modèle cloud ajoute de la latence et des coûts. L'API Prompt s'exécute localement et renvoie un résultat en moins de 200 ms.
3. Réparation de la structure JSON.Les réponses des LLM arrivent suffisamment souvent mal formées pour que cela compte. Exécutez une passe de réparation unique via Gemini Nano : « Voici un JSON invalide. Retournez uniquement un JSON valide avec les mêmes champs. » Peu coûteux, rapide, sans frais.
4. Création de stubs locaux pendant le développement.Pendant que vous câblez un nouvel endpoint et que le backend est à moitié construit, générez des corps de réponse plausibles à la volée. Les structures ne seront pas parfaites pour la production, mais elles débloquent le travail frontal. Combinez-le avec le serveur de mock d'Apidog pour une configuration hybride où les endpoints critiques proviennent d'exemples enregistrés et les endpoints exploratoires proviennent de l'API Prompt.
L'intégrer dans une extension
Les extensions reçoivent l'API Prompt sur le canal stable à partir de Chrome 138. Vous déclarez la permission et appelez chrome.languageModel.
manifest.json:
{
"manifest_version": 3,
"name": "Endpoint Summarizer",
"version": "1.0.0",
"permissions": ["languageModel"],
"action": { "default_popup": "popup.html" }
}
popup.js:
const status = await chrome.languageModel.availability();
if (status === 'unavailable') {
document.getElementById('out').textContent =
'Device does not support on-device AI.';
return;
}
const session = await chrome.languageModel.create({
systemPrompt: [
'You summarize HTTP responses in three short bullets.',
'Mention status, the most-changed field, and any error keys.',
].join(' '),
temperature: 0.3,
topK: 3,
});
document.getElementById('go').addEventListener('click', async () => {
const tab = await chrome.tabs.query({ active: true, currentWindow: true });
const [{ result }] = await chrome.scripting.executeScript({
target: { tabId: tab[0].id },
func: () => document.body.innerText.slice(0, 4000),
});
const stream = session.promptStreaming(result);
const out = document.getElementById('out');
out.textContent = '';
for await (const chunk of stream) {
out.textContent += chunk;
}
});
Deux points méritent d'être soulignés. temperature et topK sont les seuls paramètres d'échantillonnage que l'API expose ; topP n'est pas pris en charge sur le canal stable. Le streaming est un itérateur asynchrone, et non des événements envoyés par le serveur (SSE), de sorte que le modèle de consommation est for await plutôt que le lecteur SSE que vous écririez pour Gemini cloud.
L'intégrer dans une page web
Les pages web nécessitent que l'utilisateur active un drapeau ou que votre origine soit inscrite à l'Origin Trial. Le jeton d'essai est placé dans une balise meta.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="origin-trial" content="YOUR_TRIAL_TOKEN_HERE" />
</head>
<body>
<textarea id="in" placeholder="Paste an API response..."></textarea>
<button id="go">Summarize</button>
<pre id="out"></pre>
<script type="module">
if (!('LanguageModel' in window)) {
document.getElementById('out').textContent =
'Prompt API not available in this browser.';
} else {
const session = await LanguageModel.create({
systemPrompt: 'Reply in JSON: { "summary": "...", "tags": [...] }',
temperature: 0.2,
});
document.getElementById('go').onclick = async () => {
const text = document.getElementById('in').value;
const reply = await session.prompt(text);
try {
document.getElementById('out').textContent =
JSON.stringify(JSON.parse(reply), null, 2);
} catch {
document.getElementById('out').textContent = reply;
}
};
}
</script>
</body>
</html>
Si vous souhaitez tester la page sans jeton Origin Trial, ouvrez chrome://flags/#prompt-api-for-gemini-nano, activez-le et redémarrez Chrome. Ce drapeau est stable depuis les six dernières versions, mais il n'est pas garanti qu'il le reste indéfiniment ; utilisez le chemin de l'Origin Trial si vous voulez un comportement prévisible.
Limites et pièges que la documentation ne souligne pas suffisamment
Six choses qui vous poseront problème.
- 1. Le contexte est petit. 4K en entrée, 1K en sortie. Tronquez de manière agressive. Ne collez pas un document JSON de 50K jetons en vous attendant à une réponse utile.
- 2. Le support matériel est inégal. Le modèle nécessite environ 4 Go de VRAM ou de mémoire unifiée et ne fonctionne que sur Chrome 138+ sous Windows, macOS, Linux et les versions récentes de ChromeOS. Chrome mobile n'est pas pris en charge au moment de la rédaction.
- 3. Le premier chargement est lent. Le téléchargement de 2 Go s'effectue en arrière-plan mais bloque la première session. Affichez toujours une interface utilisateur de progression du téléchargement.
- 4. Pas d'appel d'outils. Si votre tâche nécessite que le modèle appelle votre API, faites-le vous-même côté client ; le modèle décide seulement quoi appeler.
- 5. Dérive du prompt système. Le modèle sur l'appareil suit les prompts système moins rigidement que les variantes cloud. Fixez le format avec des exemples directs dans le prompt système.
- 6. Les permissions sont importantes. Les extensions ont besoin de
"languageModel"danspermissions. Oubliez-le et l'API renverra silencieusementunavailable.
Prévoyez un repli vers le cloud avant de déployer
Votre application est déployée auprès d'utilisateurs qui n'ont pas le modèle. Prévoyez toujours un repli. Le modèle est court :
async function summarize(text) {
if ('LanguageModel' in window) {
const status = await LanguageModel.availability();
if (status === 'available') {
const session = await LanguageModel.create({
systemPrompt: 'Reply with one bullet summary, max 12 words.',
});
return session.prompt(text);
}
}
// Repli : appelez votre serveur, qui appelle Gemini cloud ou votre propre modèle.
const r = await fetch('/api/summarize', {
method: 'POST', body: JSON.stringify({ text }),
});
return (await r.json()).summary;
}
Confidentialité et ce qu'il faut dire aux utilisateurs
L'argument de vente de l'API Prompt est que l'entrée ne quitte jamais l'appareil. C'est vrai aujourd'hui et c'est l'intention de conception explicite de l'initiative IA intégrée. Deux nuances à connaître :
- Le modèle lui-même a été entraîné par Google sur les données de Google ; l'exécuter localement ne change rien à cela. Chrome déploie les poids avec la mise à jour du navigateur.
- Les données de télémétrie sur l'utilisation peuvent toujours être rapportées par Chrome selon les paramètres de télémétrie Chrome normaux de l'utilisateur. Le contenu du prompt ne fait pas partie de cette télémétrie.
Pour la plupart des applications grand public, c'est un argument de confidentialité solide que vous pouvez intégrer à votre interface utilisateur sans examen juridique. Pour les charges de travail réglementées (HIPAA, PCI), consultez un conseiller juridique avant de vous en dépendre.
Quand ignorer l'API Prompt
Choisissez plutôt l'API Gemini cloud lorsque :
- Votre tâche nécessite plus de 4K jetons en entrée.
- Vous avez besoin d'appels d'outils, d'une sortie structurée avec application de schéma, ou d'entrées multimodales au-delà de l'Origin Trial.
- Vous servez des utilisateurs sur Safari, Firefox ou Chrome mobile. Le support du navigateur est uniquement Chrome aujourd'hui et Apple n'a pas annoncé de date de déploiement.
- La qualité de la sortie est plus importante que la latence. Nano est petit ; Pro ne l'est pas.
Pour l'angle des modèles à poids ouverts, Comment exécuter DeepSeek V4 localement explique comment exécuter un modèle significativement plus grand sur une machine de développeur sans quitter le réseau local.
FAQ
- L'API Prompt est-elle dans le processus officiel de normalisation web ?Elle fait partie du groupe communautaire W3C WebML en tant que proposition. Traitez-la comme spécifique à Chrome jusqu'à ce que d'autres moteurs la déploient.
- Puis-je l'utiliser depuis un service worker ?Dans Chrome 138+, oui pour les extensions. Les pages web la limitent actuellement au contexte du document. Consultez la documentation avant de la déployer dans un service worker.
- Quelle taille de modèle obtiens-je réellement ?Gemini Nano se situe dans la gamme de paramètres 2-4B, quantifié pour s'adapter. Google ne s'est pas engagé sur une taille spécifique ; attendez-vous à ce qu'il évolue.
- Prend-elle en charge l'appel de fonctions ?Non sur le canal stable. La branche Origin Trial dispose d'un support expérimental pour les outils ; ne vous en dépendez pas pour la production.
- Comment la tester dans une CI automatisée ?Vous ne pouvez pas encore exécuter le modèle sur l'appareil dans Chromium sans interface graphique. Simulez la globale
LanguageModeldans les tests et exécutez le chemin de repli cloud en CI. - Est-ce gratuit pour un usage commercial ?Oui. Il n'y a pas de facturation par appel. Vous supportez le coût de stockage sur l'appareil de l'utilisateur (environ 2 Go) et Chrome gère les mises à jour.
Pour les équipes exécutant déjà des flux de travail LLM côté cloud en parallèle, l'article Qu'est-ce que GPT-5.5 couvre plus en détail les compromis côté cloud, et Apidog gère le mock et le câblage de repli sans outil de test séparé.
