De Prompt-API

Gepubliceerd: 20 mei 2025, Laatst bijgewerkt: 21 september 2025

Uitlegger Web Uitbreidingen Chrome-status Intentie
GitHub Oorsprongsproef In Origin-proef Chroom 138 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. Je 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.
  • Aangepaste inhoudsfilters . Analyseer nieuwsartikelen en vervaag of verberg inhoud automatisch op basis van door de gebruiker gedefinieerde onderwerpen.
  • Agenda-items maken . Ontwikkel een Chrome-extensie die automatisch gebeurtenisgegevens van webpagina's haalt, zodat gebruikers in slechts een paar stappen agenda-items kunnen maken.
  • Naadloze contactextractie . Bouw een extensie die contactgegevens van websites haalt, zodat gebruikers gemakkelijker contact kunnen opnemen met een bedrijf of gegevens aan hun contactpersonenlijst kunnen toevoegen.

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, Rewriter API en Proofreader 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- 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. Ga naar chrome://on-device-internals om de huidige grootte 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 bron de API voor het eerst gebruikt. Voordat u deze API gebruikt, dient u het beleid van Google inzake verboden gebruik van generatieve AI te lezen.

Om te bepalen of het model klaar is voor gebruik, roept u LanguageModel.availability() aan.

const availability = await LanguageModel.availability();

Voordat het model kan worden gedownload, moet er een gebruikersinteractie plaatsvinden, zoals klikken, tikken of op een toets drukken.

Als de respons downloadable of downloading was, zijn het model en de API's beschikbaar, maar moeten ze worden gedownload voordat u de functies kunt gebruiken. De gebruiker moet met de pagina interacteren (zoals klikken, tikken of op een toets drukken) om een ​​download toe te staan.

Om het model te downloaden en te instantiëren, roept u de functie create() aan.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

Als het antwoord op availability() downloading was, luister dan naar de voortgang van het downloaden en informeer de gebruiker, aangezien het downloaden enige tijd kan duren.

Modelparameters

De functie params() informeert u over de parameters van het taalmodel. Het object heeft de volgende velden:

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,
  },
]);

Voeg verwachte invoer en uitvoer toe

De Prompt API heeft multimodale mogelijkheden en ondersteunt meerdere talen. Stel de modaliteiten en talen voor expectedInputs en expectedOutputs in bij het aanmaken van uw sessie.

  • type : Verwachte modaliteit.
    • Voor expectedInputs kan dit text , image of audio zijn.
    • Voor expectedOutputs staat de Prompt API alleen text toe.
  • languages : Array om de verwachte taal of talen in te stellen. De Prompt API accepteert "en" , "ja" en "es" . Ondersteuning voor andere talen is in ontwikkeling.
    • Voor expectedInputs stelt u de taal voor de systeemprompt en een of meer verwachte talen voor de gebruikerprompt in.
    • Stel een of meer expectedOutputs -talen in.
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});

U ontvangt mogelijk een DOMException-fout "NotSupportedError" als het model een niet-ondersteunde invoer of uitvoer tegenkomt.

Multimodale mogelijkheden

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.

Bekijk de demo van Mediarecorder Audio Prompt voor het gebruik van de Prompt API met audio-invoer en de demo van Canvas Image Prompt voor het gebruik van de Prompt API met afbeeldingsinvoer.

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.

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 });

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,
});

Sessiebeheer

Elke sessie houdt de context van het gesprek bij. Eerdere interacties worden meegenomen in toekomstige interacties totdat het contextvenster van de sessie vol is.

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}`);

Meer informatie over sessiebeheer .

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,
});

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."
);

Demo's

We hebben meerdere demo's gebouwd om de vele use cases voor de Prompt API te verkennen. De volgende demo's zijn webapplicaties:

Om de Prompt API in Chrome-extensies te testen, installeer je de demo-extensie. De broncode van de extensie is beschikbaar op GitHub.

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.