De Prompt-API

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

Uitleg Web Uitbreidingen Chrome-status Intentie
GitHub Oorsprongsproef Oorsprongsproef Chrome 138 Weergave Voornemen om te experimenteren

Met de Prompt API kunt u in de browser verzoeken in natuurlijke taal naar Gemini Nano sturen.

Er zijn veel manieren waarop je de Prompt API kunt gebruiken. Je zou bijvoorbeeld het volgende kunnen bouwen:

  • Zoeken met behulp van AI : beantwoord vragen op basis van de inhoud van een webpagina.
  • Gepersonaliseerde nieuwsfeeds : Bouw een feed die artikelen dynamisch indeelt in categorieën en gebruikers de mogelijkheid biedt om op basis daarvan te filteren.
  • Aangepaste contentfilters . Analyseer nieuwsartikelen en vervaag of verberg automatisch content op basis van door de gebruiker gedefinieerde onderwerpen.
  • Agenda-afspraken aanmaken . Ontwikkel een Chrome-extensie die automatisch details van evenementen van webpagina's extraheert, zodat gebruikers in slechts enkele stappen agenda-items kunnen aanmaken.
  • Naadloze contactextractie . Ontwikkel een extensie die contactgegevens van websites extraheert, waardoor gebruikers gemakkelijker contact kunnen opnemen met een bedrijf of details aan hun contactenlijst kunnen toevoegen.

Dit zijn slechts een paar mogelijkheden, en we zijn benieuwd wat jullie gaan creëren.

Bekijk de hardwarevereisten.

De volgende vereisten gelden voor ontwikkelaars en gebruikers die functies gebruiken die deze API's in Chrome inzetten. Andere browsers kunnen andere vereisten hebben.

De Language Detector- en Translator-API's werken in Chrome op desktops. 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 wordt voldaan:

  • Besturingssysteem : Windows 10 of 11; macOS 13+ (Ventura en nieuwer); Linux; of ChromeOS (vanaf platform 16389.0.0 en nieuwer) op Chromebook Plus- apparaten. Chrome voor Android, iOS en ChromeOS op niet-Chromebook Plus-apparaten wordt nog niet ondersteund door de API's die gebruikmaken van Gemini Nano.
  • Opslag : Minimaal 22 GB vrije ruimte op het volume waarop uw Chrome-profiel staat.
  • GPU of CPU : Ingebouwde modellen kunnen met een GPU of een CPU werken.
    • GPU : Strikt meer dan 4 GB VRAM.
    • CPU : 16 GB RAM of meer en 4 processorkernen of meer.
  • Netwerk : Onbeperkte data of een verbinding zonder datalimiet.

De exacte afmetingen van de Gemini Nano kunnen variëren, afhankelijk van de browserupdate van het model. Ga naar chrome://on-device-internals om de huidige afmetingen te achterhalen.

Gebruik de Prompt API

De Prompt API maakt gebruik van het Gemini Nano-model in Chrome. Hoewel de API is ingebouwd in Chrome, wordt het model apart gedownload de eerste keer dat een applicatie de API gebruikt. Voordat u deze API gebruikt, dient u het beleid van Google inzake verboden gebruik van generatieve AI te raadplegen.

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

const availability = await LanguageModel.availability();

Om de download te starten en het taalmodel te initialiseren, controleer je of de gebruiker is geactiveerd . Roep vervolgens 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 de download en informeer de gebruiker , aangezien de download enige tijd kan duren.

Gebruik op localhost

Alle ingebouwde AI-API's zijn beschikbaar op localhost in Chrome. Stel de volgende vlaggen in op 'Ingeschakeld' :

  • chrome://flags/#optimization-guide-on-device-model
  • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input

Klik vervolgens op Opnieuw starten of herstart Chrome. Als je fouten tegenkomt, los dan de problemen met localhost op .

Modelparameters

De functie params() geeft je informatie 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, maak je een sessie aan met de functie create() .

Elke sessie kan worden aangepast met topK en temperature met behulp van een optioneel optieobject. De standaardwaarden voor deze parameters worden geretourneerd door 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 opties-object van de create() functie accepteert ook een signal , waarmee je 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,
});

Voeg context toe met behulp van de eerste aanwijzingen.

Met behulp van initiële prompts kunt u het taalmodel context geven over eerdere interacties, bijvoorbeeld om de gebruiker in staat te stellen een opgeslagen sessie te hervatten na een herstart van de browser.

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

Je kunt, naast de reeds bestaande rollen, een "assistant" rol toevoegen 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 wilt u, in plaats van een nieuw antwoord aan te vragen, mogelijk een deel van het antwoordbericht voor de rol "assistant" vooraf invullen. Dit kan handig zijn om het taalmodel te sturen naar een specifiek antwoordformaat. Voeg hiervoor prefix: true toe aan het laatste antwoordbericht voor de rol "assistant" . 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 de verwachte invoer en uitvoer toe.

De Prompt API beschikt over multimodale mogelijkheden en ondersteunt meerdere talen. Stel de expectedInputs en expectedOutputs en talen 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 : Een array om de verwachte taal of talen in te stellen. De Prompt API accepteert "en" , "ja" en "es" . Ondersteuning voor extra talen is in ontwikkeling.
    • Stel voor expectedInputs de systeemprompttaal en een of meer verwachte gebruikersprompttalen in.
    • Stel een of meer expectedOutputs uitvoertalen in.
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});

U kunt een DOMException met de foutmelding "NotSupportedError" ontvangen als het model een niet-ondersteunde invoer of uitvoer tegenkomt.

Multimodale mogelijkheden

Met deze mogelijkheden zou u:

  • Gebruikers de mogelijkheid bieden om audioberichten die via een chatapplicatie worden verzonden, te transcriberen.
  • Beschrijf een afbeelding die naar uw website is geüpload voor gebruik in een onderschrift of alternatieve tekst.

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 afbeeldingsinvoer.

Berichten toevoegen

Inferentie kan enige tijd in beslag nemen, vooral bij het gebruik van meerdere soorten input. Het kan nuttig zijn om vooraf vooraf bepaalde prompts te versturen om de sessie te vullen, zodat het model een voorsprong krijgt bij de verwerking.

Hoewel initialPrompts nuttig zijn bij het aanmaken van een sessie, kan de append() methode, in combinatie met de prompt() of promptStreaming() methoden, worden gebruikt om extra contextuele prompts weer 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 door append() wordt geretourneerd, 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. Je kunt vervolgens gestructureerde uitvoer gebruiken met de Prompt API.

In het volgende voorbeeld zorgt het JSON-schema ervoor dat het model met true of false reageert 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

Je 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 het invoerquotum . Je kunt meten hoeveel van het invoerquotum dit zal gebruiken door de optie responseConstraint door te geven aan session.measureInputUsage() .

U kunt dit gedrag voorkomen met de optie omitResponseConstraintInput . Als u dit doet, raden we u aan om in de prompt een toelichting 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 een aanwijzing.

Je kunt het model aansturen met de functies prompt() of promptStreaming() .

Op verzoek gebaseerde uitvoer

Als je een snel resultaat verwacht, kun je de prompt() functie gebruiken die het antwoord teruggeeft 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 reactie verwacht, kunt u de promptStreaming() functie gebruiken. Hiermee kunt u gedeeltelijke resultaten weergeven zodra deze van het model binnenkomen. De promptStreaming() functie 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 aansporen

Zowel prompt() als promptStreaming() accepteren een optionele tweede parameter met een signal , waarmee je de lopende 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 verwerkt kan worden. Controleer uw voortgang richting deze limiet met de volgende informatie:

console.log(`${session.inputUsage}/${session.inputQuota}`);

Leer meer over sessiebeheer .

Een sessie klonen

Om resources te besparen, kunt u een bestaande sessie klonen met de functie clone() . De gesprekscontext wordt gereset, maar de initiële prompt blijft intact. De functie clone() accepteert een optioneel optieobject met een signal , waarmee u een AbortSignal kunt doorgeven om de gekloonde sessie te beëindigen.

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 geven als je een sessie niet langer nodig hebt. Wanneer een sessie wordt vernietigd, kan deze niet langer worden gebruikt en wordt alle lopende uitvoering afgebroken. Je wilt de sessie mogelijk behouden als je van plan bent het model regelmatig te gebruiken, 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 verschillende demo's gemaakt om de vele toepassingsmogelijkheden van 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 in de tussentijd 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 hun iframes van dezelfde oorsprong. Toegang tot de API kan worden gedelegeerd aan iframes van een andere oorsprong met behulp van het attribuut allow="" in het machtigingsbeleid.

<!--
  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 momenteel niet beschikbaar in Web Workers, vanwege de complexiteit van het opstellen van een verantwoordelijk document voor elke worker om de status van het machtigingsbeleid te controleren.

Doe mee en deel je feedback.

Uw input kan direct van invloed zijn op hoe we toekomstige versies van deze API en alle ingebouwde AI-API's ontwikkelen en implementeren.

,

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

Uitleg Web Uitbreidingen Chrome-status Intentie
GitHub Oorsprongsproef Oorsprongsproef Chrome 138 Weergave Voornemen om te experimenteren

Met de Prompt API kunt u in de browser verzoeken in natuurlijke taal naar Gemini Nano sturen.

Er zijn veel manieren waarop je de Prompt API kunt gebruiken. Je zou bijvoorbeeld het volgende kunnen bouwen:

  • Zoeken met behulp van AI : beantwoord vragen op basis van de inhoud van een webpagina.
  • Gepersonaliseerde nieuwsfeeds : Bouw een feed die artikelen dynamisch indeelt in categorieën en gebruikers de mogelijkheid biedt om op basis daarvan te filteren.
  • Aangepaste contentfilters . Analyseer nieuwsartikelen en vervaag of verberg automatisch content op basis van door de gebruiker gedefinieerde onderwerpen.
  • Agenda-afspraken aanmaken . Ontwikkel een Chrome-extensie die automatisch details van evenementen van webpagina's extraheert, zodat gebruikers in slechts enkele stappen agenda-items kunnen aanmaken.
  • Naadloze contactextractie . Ontwikkel een extensie die contactgegevens van websites extraheert, waardoor gebruikers gemakkelijker contact kunnen opnemen met een bedrijf of details aan hun contactenlijst kunnen toevoegen.

Dit zijn slechts een paar mogelijkheden, en we zijn benieuwd wat jullie gaan creëren.

Bekijk de hardwarevereisten.

De volgende vereisten gelden voor ontwikkelaars en gebruikers die functies gebruiken die deze API's in Chrome inzetten. Andere browsers kunnen andere vereisten hebben.

De Language Detector- en Translator-API's werken in Chrome op desktops. 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 wordt voldaan:

  • Besturingssysteem : Windows 10 of 11; macOS 13+ (Ventura en nieuwer); Linux; of ChromeOS (vanaf platform 16389.0.0 en nieuwer) op Chromebook Plus- apparaten. Chrome voor Android, iOS en ChromeOS op niet-Chromebook Plus-apparaten wordt nog niet ondersteund door de API's die gebruikmaken van Gemini Nano.
  • Opslag : Minimaal 22 GB vrije ruimte op het volume waarop uw Chrome-profiel staat.
  • GPU of CPU : Ingebouwde modellen kunnen met een GPU of een CPU werken.
    • GPU : Strikt meer dan 4 GB VRAM.
    • CPU : 16 GB RAM of meer en 4 processorkernen of meer.
  • Netwerk : Onbeperkte data of een verbinding zonder datalimiet.

De exacte afmetingen van de Gemini Nano kunnen variëren, afhankelijk van de browserupdate van het model. Ga naar chrome://on-device-internals om de huidige afmetingen te achterhalen.

Gebruik de Prompt API

De Prompt API maakt gebruik van het Gemini Nano-model in Chrome. Hoewel de API is ingebouwd in Chrome, wordt het model apart gedownload de eerste keer dat een applicatie de API gebruikt. Voordat u deze API gebruikt, dient u het beleid van Google inzake verboden gebruik van generatieve AI te raadplegen.

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

const availability = await LanguageModel.availability();

Om de download te starten en het taalmodel te initialiseren, controleer je of de gebruiker is geactiveerd . Roep vervolgens 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 de download en informeer de gebruiker , aangezien de download enige tijd kan duren.

Gebruik op localhost

Alle ingebouwde AI-API's zijn beschikbaar op localhost in Chrome. Stel de volgende vlaggen in op 'Ingeschakeld' :

  • chrome://flags/#optimization-guide-on-device-model
  • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input

Klik vervolgens op Opnieuw starten of herstart Chrome. Als je fouten tegenkomt, los dan de problemen met localhost op .

Modelparameters

De functie params() geeft je informatie 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, maak je een sessie aan met de functie create() .

Elke sessie kan worden aangepast met topK en temperature met behulp van een optioneel optieobject. De standaardwaarden voor deze parameters worden geretourneerd door 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 opties-object van de create() functie accepteert ook een signal , waarmee je 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,
});

Voeg context toe met behulp van de eerste aanwijzingen.

Met behulp van initiële prompts kunt u het taalmodel context geven over eerdere interacties, bijvoorbeeld om de gebruiker in staat te stellen een opgeslagen sessie te hervatten na een herstart van de browser.

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

Je kunt, naast de reeds bestaande rollen, een "assistant" rol toevoegen 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 wilt u, in plaats van een nieuw antwoord aan te vragen, mogelijk een deel van het antwoordbericht voor de rol "assistant" vooraf invullen. Dit kan handig zijn om het taalmodel te sturen naar een specifiek antwoordformaat. Voeg hiervoor prefix: true toe aan het laatste antwoordbericht voor de rol "assistant" . 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 de verwachte invoer en uitvoer toe.

De Prompt API beschikt over multimodale mogelijkheden en ondersteunt meerdere talen. Stel de expectedInputs en expectedOutputs en talen 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 : Een array om de verwachte taal of talen in te stellen. De Prompt API accepteert "en" , "ja" en "es" . Ondersteuning voor extra talen is in ontwikkeling.
    • Stel voor expectedInputs de systeemprompttaal en een of meer verwachte gebruikersprompttalen in.
    • Stel een of meer expectedOutputs uitvoertalen in.
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});

U kunt een DOMException met de foutmelding "NotSupportedError" ontvangen als het model een niet-ondersteunde invoer of uitvoer tegenkomt.

Multimodale mogelijkheden

Met deze mogelijkheden zou u:

  • Gebruikers de mogelijkheid bieden om audioberichten die via een chatapplicatie worden verzonden, te transcriberen.
  • Beschrijf een afbeelding die naar uw website is geüpload voor gebruik in een onderschrift of alternatieve tekst.

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 afbeeldingsinvoer.

Berichten toevoegen

Inferentie kan enige tijd in beslag nemen, vooral bij het gebruik van meerdere soorten input. Het kan nuttig zijn om vooraf vooraf bepaalde prompts te versturen om de sessie te vullen, zodat het model een voorsprong krijgt bij de verwerking.

Hoewel initialPrompts nuttig zijn bij het aanmaken van een sessie, kan de append() methode, in combinatie met de prompt() of promptStreaming() methoden, worden gebruikt om extra contextuele prompts weer 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 door append() wordt geretourneerd, 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. Je kunt vervolgens gestructureerde uitvoer gebruiken met de Prompt API.

In het volgende voorbeeld zorgt het JSON-schema ervoor dat het model met true of false reageert 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

Je 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 het invoerquotum . Je kunt meten hoeveel van het invoerquotum dit zal gebruiken door de optie responseConstraint door te geven aan session.measureInputUsage() .

U kunt dit gedrag voorkomen met de optie omitResponseConstraintInput . Als u dit doet, raden we u aan om in de prompt een toelichting 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 een aanwijzing.

Je kunt het model aansturen met de functies prompt() of promptStreaming() .

Op verzoek gebaseerde uitvoer

Als je een snel resultaat verwacht, kun je de prompt() functie gebruiken die het antwoord teruggeeft 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 reactie verwacht, kunt u de promptStreaming() functie gebruiken. Hiermee kunt u gedeeltelijke resultaten weergeven zodra deze van het model binnenkomen. De promptStreaming() functie 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 aansporen

Zowel prompt() als promptStreaming() accepteren een optionele tweede parameter met een signal , waarmee je de lopende 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 verwerkt kan worden. Controleer uw voortgang richting deze limiet met de volgende informatie:

console.log(`${session.inputUsage}/${session.inputQuota}`);

Leer meer over sessiebeheer .

Een sessie klonen

Om resources te besparen, kunt u een bestaande sessie klonen met de functie clone() . De gesprekscontext wordt gereset, maar de initiële prompt blijft intact. De functie clone() accepteert een optioneel optieobject met een signal , waarmee u een AbortSignal kunt doorgeven om de gekloonde sessie te beëindigen.

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 geven als je een sessie niet langer nodig hebt. Wanneer een sessie wordt vernietigd, kan deze niet langer worden gebruikt en wordt alle lopende uitvoering afgebroken. Je wilt de sessie mogelijk behouden als je van plan bent het model regelmatig te gebruiken, 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 verschillende demo's gemaakt om de vele toepassingsmogelijkheden van 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 in de tussentijd 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 hun iframes van dezelfde oorsprong. Toegang tot de API kan worden gedelegeerd aan iframes van een andere oorsprong met behulp van het attribuut allow="" in het machtigingsbeleid.

<!--
  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 momenteel niet beschikbaar in Web Workers, vanwege de complexiteit van het opstellen van een verantwoordelijk document voor elke worker om de status van het machtigingsbeleid te controleren.

Doe mee en deel je feedback.

Uw input kan direct van invloed zijn op hoe we toekomstige versies van deze API en alle ingebouwde AI-API's ontwikkelen en implementeren.