Publié le 20 mai 2025
Explication | Web | Extensions | État de Chrome | Intent |
---|---|---|---|---|
GitHub | Afficher | Intention de tester |
L'API Prompt vous permet d'envoyer des requêtes en langage naturel à Gemini Nano dans le navigateur.
Vous pouvez utiliser l'API Prompt de nombreuses façons. Dans une application Web ou un site Web, vous pouvez créer :
- Recherche optimisée par l'IA : obtenez des réponses à vos questions en fonction du contenu d'une page Web.
- Flux d'actualités personnalisés : créez un flux qui classe dynamiquement les articles par catégorie et permet aux utilisateurs de filtrer ce contenu.
Ce ne sont là que quelques exemples. Nous avons hâte de découvrir vos créations.
Consulter la configuration matérielle requise
Les API Language Detector et Translator ne fonctionnent que sur ordinateur dans Chrome.
Les API Prompt, Summarizer, Writer et Rewriter fonctionnent dans Chrome lorsque les conditions suivantes sont remplies :
- Système d'exploitation : Windows 10 ou 11, macOS 13 ou version ultérieure (Ventura et versions ultérieures) ou Linux. Nos API optimisées par Gemini Nano ne sont pas encore compatibles avec Chrome pour Android, iOS et ChromeOS.
- Stockage : au moins 22 Go sur le volume contenant votre profil Chrome.
- GPU : plus de 4 Go de VRAM.
- Réseau : données illimitées ou connexion non limitée.
Ces exigences s'appliquent à vous lors de votre processus de développement et à vos utilisateurs qui travaillent avec les fonctionnalités que vous créez.
Utiliser l'API Prompt
Avant d'utiliser cette API, prenez connaissance du Règlement de Google sur les utilisations interdites de l'IA générative.
Deux fonctions sont disponibles dans l'espace de noms LanguageModel
:
availability()
pour vérifier les capacités du modèle et sa disponibilité.create()
pour démarrer une session de modèle de langage.
Téléchargement du modèle
L'API Prompt utilise le modèle Gemini Nano dans Chrome. Bien que l'API soit intégrée à Chrome, le modèle est téléchargé séparément la première fois qu'une origine utilise l'API.
Pour déterminer si le modèle est prêt à être utilisé, appelez la fonction asynchrone LanguageModel.availability()
. L'une des réponses suivantes devrait s'afficher :
"unavailable"
signifie que l'implémentation ne prend pas en charge les options demandées ou ne prend pas du tout en charge l'invite d'un modèle linguistique."downloadable"
signifie que l'implémentation est compatible avec les options demandées, mais qu'elle devra télécharger quelque chose (par exemple, le modèle de langage lui-même ou un ajustement précis) avant de pouvoir créer une session à l'aide de ces options."downloading"
signifie que l'implémentation est compatible avec les options demandées, mais qu'elle devra terminer une opération de téléchargement en cours avant de pouvoir créer une session à l'aide de ces options."available"
signifie que l'implémentation est compatible avec les options demandées sans nécessiter de nouveaux téléchargements.
Pour déclencher le téléchargement du modèle et créer la session du modèle de langage, appelez la fonction asynchrone LanguageModel.create()
. Si la réponse à availability()
était 'downloadable'
, 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 session = await LanguageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
Capacités du modèle
La fonction params()
vous informe des paramètres du modèle linguistique. L'objet comporte les champs suivants :
defaultTopK
: valeur top-K par défaut (par défaut :3
).maxTopK
: valeur top-K maximale (8
).defaultTemperature
: température par défaut (1.0
). La valeur de température doit être comprise entre0.0
et2.0
.maxTemperature
: température maximale.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}
Créer une session
Une fois l'API Prompt en mesure de s'exécuter, vous créez une session avec la fonction create()
.
Vous pouvez inviter le modèle à l'aide des fonctions prompt()
ou promptStreaming()
.
Personnaliser votre session
Chaque session peut être personnalisée avec topK
et temperature
à l'aide d'un objet d'options facultatif. Les valeurs par défaut de ces paramètres sont renvoyées à partir de LanguageModel.params()
.
const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
topK: params.defaultTopK,
});
L'objet d'options facultatif de la fonction create()
accepte également un champ signal
, qui vous permet de transmettre un AbortSignal
pour détruire la session.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
})
Requêtes initiales
Les invites initiales vous permettent de fournir au modèle de langage un contexte sur les interactions précédentes, par exemple pour permettre à l'utilisateur de reprendre une session stockée après le redémarrage du navigateur.
const session = await LanguageModel.create({
initialPrompts: [
{ role: 'system', content: 'You are a helpful and friendly assistant.' },
{ role: 'user', content: 'What is the capital of Italy?' },
{ role: 'assistant', content: 'The capital of Italy is Rome.'},
{ role: 'user', content: 'What language is spoken there?' },
{ role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
]
});
Limite de sessions
Une session de modèle linguistique donnée peut traiter un nombre maximal de jetons. Vous pouvez vérifier l'utilisation et la progression vers cette limite à l'aide des propriétés suivantes de l'objet de session :
console.log(`${session.inputUsage}/${session.inputQuota}`);
Persistance de la session
Chaque session conserve le contexte de la conversation. Les interactions précédentes sont prises en compte pour les interactions futures jusqu'à ce que la fenêtre de contexte de la session soit pleine.
const session = await LanguageModel.create({
initialPrompts: [{
role: "system",
content: "You are a friendly, helpful assistant specialized in clothing choices."
}]
});
const result1 = await session.prompt(
"What should I wear today? It is sunny. I am unsure between a t-shirt and a polo."
);
console.log(result1);
const result2 = await session.prompt(
"That sounds great, but oh no, it is actually going to rain! New advice?"
);
console.log(result2);
Cloner une session
Pour préserver les ressources, vous pouvez cloner une session existante avec la fonction clone()
. Le contexte de la conversation est réinitialisé, mais la requête initiale reste intacte. La fonction clone()
accepte un objet d'options facultatif avec un champ signal
, qui vous permet de transmettre un AbortSignal
pour détruire la session clonée.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Inviter le modèle
Vous pouvez inviter le modèle à l'aide des fonctions prompt()
ou promptStreaming()
.
Sortie non diffusée en streaming
Si vous attendez un résultat court, vous pouvez utiliser la fonction prompt()
qui renvoie la réponse une fois qu'elle est disponible.
// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
if (available !== 'unavailable') {
const session = await LanguageModel.create();
// Prompt the model and wait for the whole result to come back.
const result = await session.prompt("Write me a poem!");
console.log(result);
}
Sortie en flux continu
Si vous vous attendez à une réponse plus longue, vous devez utiliser la fonction promptStreaming()
, qui vous permet d'afficher les résultats partiels à mesure qu'ils sont fournis par le modèle. La fonction promptStreaming()
renvoie un ReadableStream
.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
if (available !== 'unavailable') {
const session = await LanguageModel.create();
// Prompt the model and stream the result:
const stream = session.promptStreaming('Write me an extra-long poem!');
for await (const chunk of stream) {
console.log(chunk);
}
}
Arrêter l'exécution d'un prompt
prompt()
et promptStreaming()
acceptent un deuxième paramètre facultatif avec un champ signal
, qui vous permet d'arrêter l'exécution des requêtes.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt(
'Write me a poem!',
{ signal: controller.signal }
);
Arrêter une session
Appelez destroy()
pour libérer des ressources si vous n'avez plus besoin d'une session. Lorsqu'une session est détruite, elle ne peut plus être utilisée et toute exécution en cours est abandonnée. Vous pouvez conserver la session si vous prévoyez d'interroger souvent le modèle, car la création d'une session peut prendre un certain temps.
await session.prompt(
"You are a friendly, helpful assistant specialized in clothing choices."
);
session.destroy();
// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
"What should I wear today? It is sunny, and I am unsure between a
t-shirt and a polo."
);
Fonctionnalités multimodales
L'API Prompt est compatible avec les entrées audio et d'image de Chrome 138 Canary pour les tests locaux. L'API renvoie une sortie textuelle.
Ces fonctionnalités vous permettent d'effectuer les opérations suivantes :
- Autorisez les utilisateurs à transcrire les messages audio envoyés dans une application de chat.
- Décrivez une image importée sur votre site Web pour l'utiliser dans une légende ou un texte alternatif.
const session = await LanguageModel.create({
// { type: "text" } is not necessary to include explicitly, unless
// you also want to include expected input languages for text.
expectedInputs: [
{ type: "audio" },
{ type: "image" }
]
});
const referenceImage = await (await fetch("/reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");
const response1 = await session.prompt([{
role: "user",
content: [
{ type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },
{ type: "image", value: referenceImage },
{ type: "image", value: userDrawnImage }
]
}]);
console.log(response1);
const audioBlob = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([{
role: "user",
content: [
{ type: "text", value: "My response to your critique:" },
{ type: "audio", value: audioBlob }
]
}]);
Démonstrations multimodales
Consultez la démo Mediarecorder Audio Prompt pour découvrir comment utiliser l'API Prompt avec une entrée audio et la démo Canvas Image Prompt pour découvrir comment utiliser l'API Prompt avec une entrée image.
Stratégie de performances
L'API Prompt pour le Web est toujours en cours de développement. En attendant que nous développions cette API, consultez nos bonnes pratiques sur la gestion des sessions pour optimiser vos performances.
Commentaires
Vos commentaires nous aident à orienter l'avenir de cette API et à améliorer Gemini Nano. Cela peut même entraîner la création d'API de tâches dédiées (comme les API de transcription audio ou de description d'images) afin de répondre à vos besoins et à ceux de vos utilisateurs.
Participer et envoyer des commentaires
Vos réponses peuvent avoir un impact direct sur la façon dont nous concevons et implémentons les futures versions de cette API et de toutes les API d'IA intégrées.
- Rejoignez le programme Preview anticipée.
- Pour envoyer des commentaires sur l'implémentation de Chrome, signalez un bug ou demandez l'ajout d'une fonctionnalité.
- Partagez vos commentaires sur la forme de l'API en commentant un problème existant ou en en ouvrant un nouveau dans le dépôt GitHub de l'API Prompt.
- Participez à l'élaboration des normes en rejoignant le Web Incubator Community Group.