De Prompt-API

Gepubliceerd: 11 november 2024, Laatst bijgewerkt: 20 mei 2025

Uitlegger Web Uitbreidingen Chrome-status Intentie
GitHub Experimenteel In de EVP Chrome bèta Chrome 137 bèta 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 in Chrome-extensies te gebruiken. Bijvoorbeeld:

  • Direct agenda-items . 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.
  • Dynamische contentfiltering . Maak een Chrome-extensie die nieuwsartikelen analyseert en content automatisch vervaagt of verbergt op basis van door de gebruiker gedefinieerde onderwerpen.

Dit zijn slechts enkele mogelijkheden, maar we zijn benieuwd wat jij gaat creëren.

Gebruik de Prompt API in extensies

Er zijn twee uitbreidingsfuncties beschikbaar in de LanguageModel -naamruimte:

  • availability() om te controleren wat het model kan en of het beschikbaar is.
  • create() om een ​​taalmodelsessie te starten.

Model downloaden

De Prompt API maakt gebruik van het Gemini Nano-model in Chrome. Hoewel de API in Chrome is ingebouwd, wordt het model apart gedownload wanneer een extensie de API voor het eerst gebruikt.

Om te bepalen of het model klaar is voor gebruik, roept u de asynchrone functie LanguageModel.availability() aan. Dit zou een van de volgende reacties moeten opleveren:

  • 'no' : De browser ondersteunt de Prompt API, maar deze kan momenteel niet worden gebruikt. Dit kan verschillende redenen hebben, zoals onvoldoende beschikbare schijfruimte om het model te downloaden.
  • 'readily' : De browser ondersteunt de Prompt API en deze kan direct gebruikt worden.
  • 'after-download' : De browser ondersteunt de Prompt API, maar moet eerst het model downloaden.

Om het downloaden van het model te activeren en de taalmodelsessie te starten, roept u de asynchrone functie LanguageModel.availability() aan. Als de respons op availability() 'after-download' was, is het raadzaam om te luisteren naar de voortgang van het downloaden. Zo kunt u de gebruiker informeren als het downloaden enige tijd duurt.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

Modelmogelijkheden

De functie availability() informeert u ook over de mogelijkheden van het taalmodel. Naast available bevat het object ook de volgende velden:

  • defaultTopK : De standaard top-K- waarde (standaard: 3 ).
  • maxTopK : De maximale top-K- waarde ( 8 ).
  • defaultTemperature : De standaardtemperatuur ( 1.0 ). De temperatuurwaarde moet tussen 0.0 en 2.0 liggen.
await LanguageModel.availability();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

Een sessie aanmaken

Zodra de Prompt API kan worden uitgevoerd, maakt u een sessie aan met de functie create() . U kunt het model aansturen met de functie prompt() of promptStreaming() .

Pas uw sessie aan

Elke sessie kan worden aangepast met topK en temperature met behulp van een optioneel optiesobject. De standaardwaarden voor deze parameters worden geretourneerd vanuit LanguageModel.availability() .

const capabilities = await LanguageModel.availability();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
  temperature: Math.max(availability.defaultTemperature * 1.2, 2.0),
  topK: capabilities.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,
})

Eerste 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. [...]' }
  ]
});

Sessielimieten

Een sessie met een bepaald taalmodel heeft een maximum aantal tokens dat kan worden verwerkt. U kunt het gebruik en de voortgang naar die limiet controleren met behulp van de volgende eigenschappen op het sessieobject:

console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);

Sessiepersistentie

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

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-streaming output

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 {available, defaultTemperature, defaultTopK, maxTopK } =
  await LanguageModel.availability();

if (available !== 'no') {
  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);
}

Streaming-uitvoer

Als u een langere respons verwacht, kunt u het beste de functie promptStreaming() gebruiken. Hiermee kunt u gedeeltelijke resultaten weergeven zodra ze uit het model binnenkomen.

const {available, defaultTemperature, defaultTopK, maxTopK } =
  await LanguageModel.availability();

if (available !== 'no') {
  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);
  }
}

promptStreaming() retourneert een ReadableStream waarvan de fragmenten elkaar opvolgen. Bijvoorbeeld: "Hello," , "Hello world," , "Hello world I am," , "Hello world I am an AI." Dit is niet het beoogde gedrag. We zijn van plan om dit af te stemmen op andere streaming-API's op het platform, waar de fragmenten opeenvolgende delen van één lange stream zijn. Dit betekent dat de uitvoer een reeks zou zijn zoals "Hello" , " world" , " I am" , " an AI" .

Om het gewenste gedrag te bereiken, kunt u nu het volgende implementeren. Dit werkt zowel met het standaard- als met het niet-standaardgedrag.

let result = '';
let previousChunk = '';

for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

Stop met het uitvoeren van een prompt

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 unsure between a
  t-shirt and a polo."
);

Demonstratie

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

Demo-interface voor de Prompt API

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.

,

Gepubliceerd: 11 november 2024, Laatst bijgewerkt: 20 mei 2025

Uitlegger Web Uitbreidingen Chrome-status Intentie
GitHub Experimenteel In de EVP Chrome bèta Chrome 137 bèta 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 in Chrome-extensies te gebruiken. Bijvoorbeeld:

  • Direct agenda-items . 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.
  • Dynamische contentfiltering . Maak een Chrome-extensie die nieuwsartikelen analyseert en content automatisch vervaagt of verbergt op basis van door de gebruiker gedefinieerde onderwerpen.

Dit zijn slechts enkele mogelijkheden, maar we zijn benieuwd wat jij gaat creëren.

Gebruik de Prompt API in extensies

Er zijn twee uitbreidingsfuncties beschikbaar in de LanguageModel -naamruimte:

  • availability() om te controleren wat het model kan en of het beschikbaar is.
  • create() om een ​​taalmodelsessie te starten.

Model downloaden

De Prompt API maakt gebruik van het Gemini Nano-model in Chrome. Hoewel de API in Chrome is ingebouwd, wordt het model apart gedownload wanneer een extensie de API voor het eerst gebruikt.

Om te bepalen of het model klaar is voor gebruik, roept u de asynchrone functie LanguageModel.availability() aan. Dit zou een van de volgende reacties moeten opleveren:

  • 'no' : De browser ondersteunt de Prompt API, maar deze kan momenteel niet worden gebruikt. Dit kan verschillende redenen hebben, zoals onvoldoende beschikbare schijfruimte om het model te downloaden.
  • 'readily' : De browser ondersteunt de Prompt API en deze kan direct gebruikt worden.
  • 'after-download' : De browser ondersteunt de Prompt API, maar moet eerst het model downloaden.

Om het downloaden van het model te activeren en de taalmodelsessie te starten, roept u de asynchrone functie LanguageModel.availability() aan. Als de respons op availability() 'after-download' was, is het raadzaam om te luisteren naar de voortgang van het downloaden. Zo kunt u de gebruiker informeren als het downloaden enige tijd duurt.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

Modelmogelijkheden

De functie availability() informeert u ook over de mogelijkheden van het taalmodel. Naast available bevat het object ook de volgende velden:

  • defaultTopK : De standaard top-K- waarde (standaard: 3 ).
  • maxTopK : De maximale top-K- waarde ( 8 ).
  • defaultTemperature : De standaardtemperatuur ( 1.0 ). De temperatuurwaarde moet tussen 0.0 en 2.0 liggen.
await LanguageModel.availability();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

Een sessie aanmaken

Zodra de Prompt API kan worden uitgevoerd, maakt u een sessie aan met de functie create() . U kunt het model aansturen met de functie prompt() of promptStreaming() .

Pas uw sessie aan

Elke sessie kan worden aangepast met topK en temperature met behulp van een optioneel optiesobject. De standaardwaarden voor deze parameters worden geretourneerd vanuit LanguageModel.availability() .

const capabilities = await LanguageModel.availability();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
  temperature: Math.max(availability.defaultTemperature * 1.2, 2.0),
  topK: capabilities.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,
})

Eerste 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. [...]' }
  ]
});

Sessielimieten

Een sessie met een bepaald taalmodel heeft een maximum aantal tokens dat kan worden verwerkt. U kunt het gebruik en de voortgang naar die limiet controleren met behulp van de volgende eigenschappen op het sessieobject:

console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);

Sessiepersistentie

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

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-streaming output

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 {available, defaultTemperature, defaultTopK, maxTopK } =
  await LanguageModel.availability();

if (available !== 'no') {
  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);
}

Streaming-uitvoer

Als u een langere respons verwacht, kunt u het beste de functie promptStreaming() gebruiken. Hiermee kunt u gedeeltelijke resultaten weergeven zodra ze uit het model binnenkomen.

const {available, defaultTemperature, defaultTopK, maxTopK } =
  await LanguageModel.availability();

if (available !== 'no') {
  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);
  }
}

promptStreaming() retourneert een ReadableStream waarvan de fragmenten elkaar opvolgen. Bijvoorbeeld: "Hello," , "Hello world," , "Hello world I am," , "Hello world I am an AI." Dit is niet het beoogde gedrag. We zijn van plan om dit af te stemmen op andere streaming-API's op het platform, waar de fragmenten opeenvolgende delen van één lange stream zijn. Dit betekent dat de uitvoer een reeks zou zijn zoals "Hello" , " world" , " I am" , " an AI" .

Om het gewenste gedrag te bereiken, kunt u nu het volgende implementeren. Dit werkt zowel met het standaard- als met het niet-standaardgedrag.

let result = '';
let previousChunk = '';

for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

Stop met het uitvoeren van een prompt

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 unsure between a
  t-shirt and a polo."
);

Demonstratie

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

Demo-interface voor de Prompt API

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.