De Prompt API in Chrome-extensies,De Prompt API in Chrome-extensies

Gepubliceerd: 11 november 2024

De Prompt API for Extensions is nu beschikbaar als origin-proefversie, zodat u Chrome-extensies kunt bouwen die Gemini Nano , ons meest efficiënte taalmodel, in de browser gebruiken.

Er zijn veel gebruiksscenario's voor de Prompt API met Chrome-extensies. Hier zijn enkele voorbeelden:

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

Beschikbaarheid

  • Sluit u aan bij de Prompt API Origin-proefperiode , uitgevoerd in Chrome 131 tot 136, om extensies te maken met deze API. Als je nieuw bent bij origin-proefversies : dit zijn in de tijd beperkte programma's die toegankelijk zijn voor alle ontwikkelaars en vroege toegang bieden tot experimentele platformfuncties. Ontwikkelaars kunnen testen, gebruikersfeedback verzamelen en itereren naar een toekomstige lancering.
    • Hoewel er mogelijk gebruikslimieten gelden, kunt u deze functies integreren voor live testen en het verzamelen van gebruikersfeedback. Het doel is om toekomstige iteraties van deze API te informeren, terwijl we werken aan een bredere beschikbaarheid.
  • Sluit u aan bij het vroege preview-programma voor een eerste blik op nieuwe ingebouwde AI API's en toegang tot discussies op onze mailinglijst.

Doe mee aan de herkomstproef

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

Om uw extensie aan te melden voor de origin-proefperiode, gebruikt u de URL chrome-extension://YOUR_EXTENSION_ID als Web Origin . Bijvoorbeeld chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk .

Aanmelden voor de Chrome Origin-proefversie

De extensie-ID wordt dynamisch gemaakt. Eenmaal toegewezen, kunt u afdwingen dat de ID stabiel blijft door de key aan het manifest toe te voegen.

Nadat u zich heeft aangemeld voor de oorspronkelijke proefperiode, ontvangt u een gegenereerde token, die u in een array moet doorgeven als de waarde van het veld trial_tokens in het manifest.

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

Voeg ondersteuning toe aan localhost

Om tijdens de oorspronkelijke proefperiode toegang te krijgen tot de Prompt API op localhost , moet u Chrome updaten naar de nieuwste versie. Volg vervolgens deze stappen:

  1. Open Chrome op een van deze platforms: Windows, Mac of Linux.
  2. Ga naar chrome://flags/#optimization-guide-on-device-model .
  3. Selecteer Ingeschakeld BypassPerfRequirement .
    • Hierdoor worden prestatiecontroles overgeslagen, waardoor u Gemini Nano mogelijk niet naar uw apparaat kunt downloaden.
  4. Klik op Opnieuw starten of start Chrome opnieuw.

Gebruik de Prompt-API

Nadat u toestemming heeft gevraagd om de Prompt API te gebruiken, kunt u uw extensie bouwen. Er zijn twee nieuwe extensiefuncties voor u 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:

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() .

Sessie opties

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

Sessie-informatie

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.