Gepubliceerd: 20 mei 2025, Laatst bijgewerkt: 21 juli 2025
Uitlegger | Web | Uitbreidingen | Chrome-status | Intentie |
---|---|---|---|---|
GitHub | Weergave | Intentie om te experimenteren |
Met de Prompt API kunt u verzoeken in natuurlijke taal naar Gemini Nano in de browser sturen.
Er zijn veel manieren om de Prompt API te gebruiken in een webapplicatie of website. U kunt bijvoorbeeld het volgende bouwen:
- Zoeken op basis van kunstmatige intelligentie (AI) : beantwoord vragen op basis van de inhoud van een webpagina.
- Gepersonaliseerde nieuwsfeeds : maak een feed die artikelen dynamisch classificeert met categorieën en waarmee gebruikers op die inhoud kunnen filteren.
Dit zijn slechts enkele mogelijkheden. Wij zijn benieuwd wat u ervan maakt.
Controleer de hardwarevereisten
De volgende vereisten gelden voor ontwikkelaars en gebruikers die functies gebruiken met deze API's in Chrome. Andere browsers kunnen andere vereisten hebben.
De Language Detector- en Translator-API's werken in Chrome op desktopcomputers. Deze API's werken niet op mobiele apparaten. De Prompt API, Summarizer API, Writer API en Rewriter API werken in Chrome wanneer aan de volgende voorwaarden is voldaan:
- Besturingssysteem : Windows 10 of 11; macOS 13+ (Ventura en hoger); Linux; of ChromeOS (vanaf platform 16389.0.0 en hoger) op [Chromebook Plus](https://www.google.com/chromebook/chromebookplus/)-apparaten. Chrome voor Android, iOS en ChromeOS op apparaten zonder Chromebook Plus worden nog niet ondersteund door de API's die Gemini Nano gebruiken.
- Opslag : minimaal 22 GB vrije ruimte op het volume met uw Chrome-profiel.
- GPU : absoluut meer dan 4 GB VRAM.
- Netwerk : Onbeperkt dataverbruik of een onbeperkte verbinding.
De exacte grootte van de Gemini Nano kan variëren naarmate de browser het model bijwerkt. Om de huidige grootte te bepalen, gaat u naar chrome://on-device-internals
en vervolgens naar Modelstatus . Open het vermelde bestandspad om de modelgrootte te bepalen.
Gebruik de Prompt API
De Prompt API gebruikt het Gemini Nano-model in Chrome. Hoewel de API in Chrome is ingebouwd, wordt het model apart gedownload wanneer een origin de API voor het eerst gebruikt.
Om te bepalen of het model klaar is voor gebruik, roept u LanguageModel.availability()
aan. Als de respons op availability()
downloadable
is, luister dan naar de voortgang van het downloaden en informeer de gebruiker, aangezien het downloaden enige tijd kan duren.
const availability = await LanguageModel.availability();
Om het downloaden te activeren en het taalmodel te instantiëren, controleert u op gebruikersactivatie . Roep vervolgens de asynchrone functie LanguageModel.create()
aan.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
Modelparameters
De functie params()
informeert u over de parameters van het taalmodel. Het object heeft de volgende velden:
-
defaultTopK
: De standaard top-K -waarde. -
maxTopK
: De maximale top-K- waarde. -
defaultTemperature
: De standaardtemperatuur . -
maxTemperature
: De maximumtemperatuur.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
Een sessie aanmaken
Zodra de Prompt API kan worden uitgevoerd, maakt u een sessie met de functie create()
.
Elke sessie kan worden aangepast met topK
en temperature
met behulp van een optioneel optiesobject. De standaardwaarden voor deze parameters worden geretourneerd vanuit 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,
});
Het optionele options-object van de create()
functie accepteert ook een signal
, waarmee u een AbortSignal
kunt doorgeven om de sessie te beëindigen.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
Context toevoegen met initiële prompts
Met de eerste prompts kunt u het taalmodel context geven over eerdere interacties, zodat de gebruiker bijvoorbeeld een opgeslagen sessie kan hervatten nadat de browser opnieuw is opgestart.
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. [...]',
},
],
});
Beperk reacties met een voorvoegsel
U kunt een "assistant"
-rol toevoegen, naast eerdere rollen, om de eerdere antwoorden van het model verder uit te werken. Bijvoorbeeld:
const followup = await session.prompt([
{
role: "user",
content: "I'm nervous about my presentation tomorrow"
},
{
role: "assistant",
content: "Presentations are tough!"
}
]);
In sommige gevallen kunt u, in plaats van een nieuw antwoord aan te vragen, een deel van het antwoordbericht "assistant"
-role vooraf invullen. Dit kan handig zijn om het taalmodel te begeleiden bij het gebruik van een specifieke antwoordopmaak. Voeg hiervoor prefix: true
toe aan het afsluitende bericht "assistant"
-role. Bijvoorbeeld:
const characterSheet = await session.prompt([
{
role: 'user',
content: 'Create a TOML character sheet for a gnome barbarian',
},
{
role: 'assistant',
content: '```toml\n',
prefix: true,
},
]);
Berichten toevoegen
Inferentie kan enige tijd duren, vooral bij multimodale invoer. Het kan nuttig zijn om vooraf bepaalde prompts te versturen om de sessie te vullen, zodat het model een voorsprong heeft op de verwerking.
Hoewel initialPrompts
handig zijn bij het aanmaken van een sessie, kan de append()
methode worden gebruikt in aanvulling op de prompt()
- of promptStreaming()
methoden om extra contextuele prompts te geven nadat de sessie is aangemaakt.
Bijvoorbeeld:
const session = await LanguageModel.create({
initialPrompts: [
{
role: 'system',
content:
'You are a skilled analyst who correlates patterns across multiple images.',
},
],
expectedInputs: [{ type: 'image' }],
});
fileUpload.onchange = async () => {
await session.append([
{
role: 'user',
content: [
{
type: 'text',
value: `Here's one image. Notes: ${fileNotesInput.value}`,
},
{ type: 'image', value: fileUpload.files[0] },
],
},
]);
};
analyzeButton.onclick = async (e) => {
analysisResult.textContent = await session.prompt(userQuestionInput.value);
};
De belofte die append()
retourneert, wordt vervuld zodra de prompt is gevalideerd, verwerkt en aan de sessie is toegevoegd. De belofte wordt afgewezen als de prompt niet kan worden toegevoegd.
Sessiepersistentie en limieten
Elke sessie houdt de context van het gesprek bij. Eerdere interacties worden meegenomen in toekomstige interacties totdat het contextvenster van de sessie vol is.
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);
Elke sessie heeft een maximum aantal tokens dat kan worden verwerkt. Controleer uw voortgang naar deze limiet met het volgende:
console.log(`${session.inputUsage}/${session.inputQuota}`);
Geef een JSON-schema door
Voeg het veld responseConstraint
toe aan prompt()
- of promptStreaming()
methode om een JSON-schema als waarde door te geven. U kunt vervolgens gestructureerde uitvoer gebruiken met de Prompt API.
In het volgende voorbeeld zorgt het JSON-schema ervoor dat het model reageert met true
of false
om te classificeren of een bepaald bericht over aardewerk gaat.
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
Uw implementatie kan een JSON-schema of reguliere expressie bevatten als onderdeel van het bericht dat naar het model wordt verzonden. Dit gebruikt een deel van de invoerquota . U kunt meten hoeveel van de invoerquota wordt gebruikt door de optie responseConstraint
door te geven aan session.measureInputUsage()
.
U kunt dit gedrag voorkomen met de optie omitResponseConstraintInput
. In dat geval raden we u aan om wat instructies in de prompt op te nemen:
const result = await session.prompt(`
Summarize this feedback into a rating between 0-5. Only output a JSON
object { rating }, with a single property whose value is a number:
The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });
Een sessie klonen
Om resources te behouden, kunt u een bestaande sessie klonen met de functie clone()
. De conversatiecontext wordt gereset, maar de initiële prompt blijft intact. De functie clone()
accepteert een optioneel options-object met een signal
, waarmee u een AbortSignal
kunt doorgeven om de gekloonde sessie te vernietigen.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Geef het model opdracht
U kunt het model aansturen met de functie prompt()
of promptStreaming()
.
Niet-gestreamde uitvoer
Als u een kort resultaat verwacht, kunt u de functie prompt()
gebruiken die het antwoord retourneert zodra het beschikbaar is.
// 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);
}
Gestreamde uitvoer
Als u een langere respons verwacht, kunt u de functie promptStreaming()
gebruiken. Hiermee kunt u gedeeltelijke resultaten weergeven zoals ze uit het model komen. De functie promptStreaming()
retourneert een 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);
}
}
Stop met aandringen
Zowel prompt()
als promptStreaming()
accepteren een optionele tweede parameter met een signal
, waarmee u het uitvoeren van prompts kunt stoppen.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt('Write me a poem!', {
signal: controller.signal,
});
Een sessie beëindigen
Roep destroy()
aan om resources vrij te maken als u geen sessie meer nodig hebt. Wanneer een sessie wordt vernietigd, kan deze niet meer worden gebruikt en wordt de uitvoering afgebroken. Het is raadzaam de sessie te behouden als u het model vaak wilt activeren, aangezien het aanmaken van een sessie enige tijd kan duren.
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 choosing between a t-shirt
and a polo."
);
Multimodale mogelijkheden
De Prompt API Origin Trial ondersteunt audio- en beeldinvoer. De API retourneert een tekstuitvoer.
Met deze mogelijkheden kunt u:
- Hiermee kunnen gebruikers audioberichten transcriberen die via een chatapplicatie worden verzonden.
- Beschrijf een afbeelding die u naar uw website uploadt om te gebruiken in een bijschrift of alt-tekst.
const session = await LanguageModel.create({
// { type: 'text' } only required when including expected input languages.
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 an 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 },
],
},
]);
Bekijk de Mediarecorder Audio Prompt- demo voor het gebruik van de Prompt API met audio-invoer en de Canvas Image Prompt -demo voor het gebruik van de Prompt API met beeldinvoer.
Prestatiestrategie
De Prompt API voor het web is nog in ontwikkeling. Raadpleeg tijdens de ontwikkeling van deze API onze best practices voor sessiebeheer voor optimale prestaties.
Toestemmingsbeleid, iframes en webworkers
Standaard is de Prompt API alleen beschikbaar voor vensters op het hoogste niveau en voor iframes met dezelfde oorsprong. Toegang tot de API kan worden gedelegeerd aan iframes met meerdere oorsprongen met behulp van het kenmerk Permission Policy allow=""
:
<!--
The hosting site at https://main.example.com can grant a cross-origin iframe
at https://cross-origin.example.com/ access to the Prompt API by
setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>
De Prompt API is op dit moment niet beschikbaar in webworkers, omdat het lastig is om voor elke worker een verantwoordelijk document in te stellen om de status van het machtigingsbeleid te controleren.
Deelnemen en feedback delen
Uw input kan rechtstreeks van invloed zijn op de manier waarop we toekomstige versies van deze API en alle ingebouwde AI API's bouwen en implementeren.
- Voor feedback over de implementatie van Chrome kunt u een bugrapport of een functieverzoek indienen.
- Deel uw feedback over de API-shape door commentaar te geven op een bestaand probleem of door een nieuw probleem te openen in de Prompt API GitHub-repository .
- Doe mee met het early preview-programma .