De Prompt-API

Gepubliceerd: 11 november 2024

Uitlegger Web Extensies Chrome-status Intentie
GitHub Experimenteel In de EPP Achter een vlag Oorsprong proef Niet van toepassing Niet van toepassing

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

De Prompt API is beschikbaar in een origin-proefversie voor Chrome-extensies. Webontwikkelaars kunnen de verkennende API gebruiken, bedoeld voor het maken van prototypen en het ontdekken van aanvullende gebruiksscenario's, door deel te nemen aan het vroege preview-programma .

Er zijn veel manieren waarop u de Prompt API in Chrome-extensies kunt gebruiken. Bijvoorbeeld:

  • Directe agenda-evenementen . Ontwikkel een Chrome-extensie die automatisch afspraakdetails uit webpagina's haalt, zodat gebruikers in slechts een paar stappen agenda-items kunnen maken.
  • Naadloze contactextractie . Bouw een extensie die contactgegevens uit websites haalt, waardoor het voor gebruikers gemakkelijker wordt om contact op te nemen met een bedrijf of details toe te voegen aan hun lijst met contacten.
  • Dynamische inhoudfiltering . Maak een Chrome-extensie die nieuwsartikelen analyseert en inhoud automatisch vervaagt of verbergt op basis van door de gebruiker gedefinieerde onderwerpen.

Dit zijn slechts enkele mogelijkheden, maar we zijn benieuwd wat u maakt.

Ga aan de slag

Als u de Prompt API in Chrome-extensies wilt gebruiken, voegt u de machtiging "aiLanguageModelOriginTrial" toe aan de manifest.json van de extensie, samen met eventuele andere machtigingen die uw extensie mogelijk nodig heeft.

{
  "manifest_version": 3,
  "name": "YOUR_EXTENSION_NAME",
  "key": "YOUR_EXTENSION_KEY",
  "permissions": ["aiLanguageModelOriginTrial"]
}

Hiermee wordt een tijdelijke toestemming verleend, die alleen geldig is voor de duur van het herkomstproces. Als de API wordt gestart, moet u uw extensie bijwerken en opnieuw uploaden, waarbij u de verlopen machtigingen verwijdert en vervangt door de definitieve machtigingen.

Daarnaast raden we u aan een consistente extensie-ID te behouden door de key aan uw manifest toe te voegen

Doe mee aan de origin-proefperiode

Om de Prompt API aan uw Chrome-extensie toe te voegen:

  1. Doe mee aan de Prompt API Origin-proefperiode , uitgevoerd in Chrome 131 tot 136.
  2. Gebruik de URL chrome-extension://YOUR_EXTENSION_ID van uw extensie als weboorsprong . Bijvoorbeeld chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk .

  3. Update uw manifest om uw proeftoken als array toe te voegen.

    {
      "manifest_version": 3,
      "name": "YOUR_EXTENSION_NAME",
      "key": "YOUR_EXTENSION_KEY",
      "permissions": ["aiLanguageModelOriginTrial"],
      "trial_tokens": ["GENERATED_TOKEN"],
    }
    

Gebruik de Prompt API in Extensies

Nadat u toestemming heeft gevraagd om de Prompt API te gebruiken, kunt u uw extensie bouwen. Er zijn twee extensiefuncties beschikbaar in de naamruimte chrome.aiOriginTrial.languageModel :

  • capabilities() om te controleren waartoe het model in staat is 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 afzonderlijk gedownload de eerste keer dat een extensie de API gebruikt.

Om te bepalen of het model klaar is voor gebruik, roept u de asynchrone chrome.aiOriginTrial.languageModel.capabilities() functie aan. Het retourneert een AILanguageModelCapabilities -object met een available veld dat drie mogelijke waarden kan aannemen:

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

Om het downloaden van het model te activeren en de taalmodelsessie te maken, roept u de asynchrone functie chrome.aiOriginTrial.languageModel.create() aan. Als het antwoord op capabilities() 'after-download' was, kunt u het beste luisteren naar de downloadvoortgang. Op deze manier kunt u de gebruiker informeren als het downloaden tijd kost.

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

Modelmogelijkheden

De functie capabilities() informeert u ook over de mogelijkheden van het taalmodel. available heeft het resulterende object AILanguageModelCapabilities 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 chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

Creëer een sessie

Zodra u er zeker van bent dat de Prompt API kan worden uitgevoerd, maakt u een sessie met de functie create() , waarmee u vervolgens het model kunt oproepen met de functies prompt() of promptStreaming() .

Pas uw sessie aan

Elke sessie kan worden aangepast met topK en temperature met behulp van een optioneel optieobject. De standaardwaarden voor deze parameters worden geretourneerd door chrome.aiOriginTrial.languageModel.capabilities() .

const capabilities = await chrome.aiOriginTrial.languageModel.capabilities();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await chrome.aiOriginTrial.languageModel.create({
  temperature: Math.max(capabilities.defaultTemperature * 1.2, 2.0),
  topK: capabilities.defaultTopK,
});

Het optionele optieobject van de functie create() gebruikt ook een signal , waarmee u een AbortSignal kunt doorgeven om de sessie te vernietigen.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await chrome.aiOriginTrial.languageModel.create({
  signal: controller.signal,
})
Systeemprompts

Met systeemprompts kunt u het taalmodel enige context geven.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'

Eerste aanwijzingen

Met initiële prompts kunt u het taalmodel voorzien van context over eerdere interacties, zodat de gebruiker bijvoorbeeld een opgeslagen sessie kan hervatten nadat de browser opnieuw is opgestart.

const session = await chrome.aiOriginTrial.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 bepaalde taalmodelsessie heeft een maximaal aantal tokens dat kan worden verwerkt. U kunt het gebruik en de voortgang richting die limiet controleren door de volgende eigenschappen van het sessieobject te gebruiken:

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

Sessiepersistentie

Bij elke sessie wordt de context van het gesprek bijgehouden. Er wordt rekening gehouden met eerdere interacties voor toekomstige interacties totdat het contextvenster van de sessie vol is.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: '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);

Kloon een sessie

Om bronnen te behouden, kunt u een bestaande sessie klonen met de clone() functie. De gesprekscontext wordt opnieuw ingesteld, maar de initiële prompt of de systeemprompts blijven intact. De functie clone() gebruikt een optioneel optieobject 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,
});

Vraag het model

U kunt het model oproepen met de functies prompt() of promptStreaming() .

Niet-streaming-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 {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.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 langer antwoord verwacht, moet u de functie promptStreaming() gebruiken, waarmee u gedeeltelijke resultaten kunt weergeven zodra deze uit het model binnenkomen.

const {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.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 delen achtereenvolgens op elkaar voortbouwen. 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 af te stemmen op andere streaming-API's op het platform, waarbij de chunks opeenvolgende stukken van een enkele lange stream zijn. Dit betekent dat de uitvoer een reeks zou zijn als "Hello" , " world" , " I am" , " an AI" .

Om het beoogde gedrag te bereiken, kunt u voorlopig het volgende implementeren. Dit werkt zowel bij standaard als bij niet-standaard gedrag.

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 bronnen vrij te maken als je geen sessie meer nodig hebt. Wanneer een sessie wordt vernietigd, kan deze niet langer worden gebruikt en wordt elke lopende uitvoering afgebroken. Mogelijk wilt u de sessie behouden als u van plan bent het model vaak te vragen, aangezien het maken 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.'
);

Demo

Installeer de demo-extensie om de Prompt API in Chrome-extensies te testen. De broncode van de extensie is beschikbaar op GitHub.

Demo-interface voor de Prompt API

Doe mee en deel feedback

Begin nu met het testen van de Prompt API in uw Chrome-extensies door deel te nemen aan de origin-proefperiode en deel uw feedback. 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.