Die Prompt API in Chrome-Erweiterungen

Veröffentlicht: 11. November 2024

Die Prompt API für Erweiterungen ist jetzt in einem Ursprungstest verfügbar. Sie können also Chrome-Erweiterungen erstellen, die Gemini Nano, unser effizientestes Sprachmodell, im Browser verwenden.

Es gibt viele Anwendungsfälle für die Prompt API mit Chrome-Erweiterungen. Hier einige Beispiele:

  • Sofortige Kalendertermine Entwickeln Sie eine Chrome-Erweiterung, die automatisch Termindetails aus Webseiten extrahiert, damit Nutzer Kalendereinträge in nur wenigen Schritten erstellen können.
  • Nahtlose Kontaktextraktion Erstellen Sie eine Erweiterung, die Kontaktdaten von Websites extrahiert, damit Nutzer einfacher Unternehmen kontaktieren oder ihrer Kontaktliste Details hinzufügen können.
  • Dynamische Filterung von Inhalten Erstellen Sie eine Chrome-Erweiterung, die Nachrichtenartikel analysiert und Inhalte basierend auf benutzerdefinierten Themen automatisch unkenntlich macht oder ausblendet.

Das sind nur einige Möglichkeiten. Wir sind gespannt auf deine Kreationen.

Verfügbarkeit

  • Nehmen Sie am Ursprungstest der Prompt API teil, der in Chrome 131 bis 136 ausgeführt wird, um Erweiterungen mit dieser API zu erstellen. Wenn Sie zum ersten Mal Ursprungstests nutzen, sind dies zeitlich begrenzte Programme, die allen Entwicklern zur Verfügung stehen und Vorabzugriff auf experimentelle Plattformfunktionen bieten. Entwickler können testen, Feedback von Nutzern einholen und iterieren, um eine zukünftige Markteinführung vorzubereiten.
    • Auch wenn es Nutzungslimits gibt, kannst du diese Funktionen für Live-Tests und das Einholen von Nutzerfeedback integrieren. Das Ziel besteht darin, zukünftige Versionen dieser API zu verbessern, während wir daran arbeiten, die Verfügbarkeit zu erweitern.
  • Nehmen Sie am Early Preview-Programm teil, um einen ersten Blick auf die neuen integrierten KI-APIs zu erhalten und Diskussionen auf unserer Mailingliste zu führen.

Am Ursprungstest teilnehmen

Wenn Sie die Prompt API in Chrome-Erweiterungen verwenden möchten, fügen Sie Ihrer manifest.json-Datei die Berechtigung "aiLanguageModelOriginTrial" sowie alle anderen Berechtigungen hinzu, die Ihre Erweiterung möglicherweise benötigt.

Wenn Sie Ihre Erweiterung für den Test registrieren möchten, verwenden Sie die URL chrome-extension://YOUR_EXTENSION_ID als Web-Ursprung. Beispiel: chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk.

Registrierung für den Chrome-Ursprungstest

Die Erweiterungs-ID wird dynamisch erstellt. Nachdem Sie eine ID zugewiesen haben, können Sie erzwingen, dass die ID stabil bleibt, indem Sie dem Manifest das Attribut key hinzufügen.

Nachdem du dich für den ursprünglichen Test registriert hast, erhältst du ein generiertes Token, das du als Array als Wert des Felds trial_tokens im Manifest übergeben musst. Im Snippet finden Sie ein Beispiel.

{
  "permissions": ["aiLanguageModelOriginTrial"],
  "trial_tokens": ["GENERATED_TOKEN"],
}

Prompt API verwenden

Sobald Sie die Berechtigung zur Verwendung der Prompt API angefordert haben, können Sie Ihre Erweiterung erstellen. Im Namespace chrome.aiOriginTrial.languageModel sind zwei neue Erweiterungsfunktionen verfügbar:

  • capabilities(), um zu sehen, was das Modell kann und ob es verfügbar ist.
  • create(), um eine Sitzung mit dem Language Model zu starten.

Modelldownload

Die Prompt API verwendet das Gemini Nano-Modell in Chrome. Die API ist zwar in Chrome integriert, das Modell wird jedoch separat heruntergeladen, wenn eine Erweiterung die API zum ersten Mal verwendet.

Rufen Sie die asynchrone Funktion chrome.aiOriginTrial.languageModel.capabilities() auf, um zu prüfen, ob das Modell einsatzbereit ist. Es gibt ein AILanguageModelCapabilities-Objekt mit einem available-Feld zurück, das drei mögliche Werte annehmen kann:

  • 'no': Der aktuelle Browser unterstützt die Prompt API, kann sie aber derzeit nicht verwenden. Das kann verschiedene Gründe haben, z. B. nicht genügend Speicherplatz zum Herunterladen des Modells.
  • 'readily': Der aktuelle Browser unterstützt die Prompt API und sie kann sofort verwendet werden.
  • 'after-download': Der aktuelle Browser unterstützt die Prompt API, muss aber zuerst das Modell herunterladen.

Rufen Sie die asynchrone Funktion chrome.aiOriginTrial.languageModel.create() auf, um den Modelldownload auszulösen und die Sitzung des Sprachmodells zu erstellen. Wenn die Antwort auf capabilities() 'after-download' war, solltest du auf den Downloadfortschritt achten. So können Sie den Nutzer informieren, falls der Download etwas Zeit in Anspruch nimmt.

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

Modellfunktionen

Die Funktion capabilities() informiert Sie auch über die Funktionen des Sprachmodells. Neben available enthält das resultierende AILanguageModelCapabilities-Objekt auch die folgenden Felder:

await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

Sitzung erstellen

Nachdem Sie sichergestellt haben, dass die Prompt API ausgeführt werden kann, erstellen Sie eine Sitzung mit der Funktion create(). Anschließend können Sie das Modell entweder mit der Funktion prompt() oder promptStreaming() anregen.

Sitzungsoptionen

Jede Sitzung kann mit topK und temperature über ein optionales Optionsobjekt angepasst werden. Die Standardwerte für diese Parameter werden von chrome.aiOriginTrial.languageModel.capabilities() zurückgegeben.

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

Das optionale Optionsobjekt der Funktion create() nimmt auch ein signal-Feld an, über das Sie eine AbortSignal übergeben können, um die Sitzung zu beenden.

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

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

Mit Systemprompts können Sie dem Sprachmodell etwas Kontext geben.

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

Erste Aufforderungen

Mit anfänglichen Aufforderungen können Sie dem Sprachmodell Kontext zu vorherigen Interaktionen bereitstellen, um es dem Nutzer beispielsweise zu ermöglichen, eine gespeicherte Sitzung nach einem Browserneustart fortzusetzen.

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

Informationen zur Sitzung

Eine Sitzung eines bestimmten Language Models kann eine maximale Anzahl von Tokens verarbeiten. Mit den folgenden Properties des Sitzungsobjekts können Sie die Nutzung und den Fortschritt im Hinblick auf dieses Limit prüfen:

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

Sitzungsspeicherung

Bei jeder Sitzung wird der Kontext der Unterhaltung gespeichert. Bisherige Interaktionen werden für zukünftige Interaktionen berücksichtigt, bis das Kontextfenster der Sitzung voll ist.

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

Sitzung klonen

Um Ressourcen zu sparen, können Sie eine vorhandene Sitzung mit der Funktion clone() klonen. Der Konversationskontext wird zurückgesetzt, aber die ursprüngliche Aufforderung oder die Systemaufforderungen bleiben erhalten. Die Funktion clone() nimmt ein optionales Optionsobjekt mit einem signal-Feld an, über das Sie eine AbortSignal übergeben können, um die geklonte Sitzung zu löschen.

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

const clonedSession = await session.clone({
  signal: controller.signal,
});

Prompt für das Modell

Sie können das Modell mit den Funktionen prompt() oder promptStreaming() auffordern.

Nicht-Streaming-Ausgabe

Wenn Sie ein kurzes Ergebnis erwarten, können Sie die Funktion prompt() verwenden, die die Antwort zurückgibt, sobald sie verfügbar ist.

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

Streamingausgabe

Wenn Sie eine längere Antwort erwarten, sollten Sie die promptStreaming()-Funktion verwenden. Damit können Sie Teilergebnisse anzeigen lassen, sobald diese vom Modell eingehen.

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() gibt einen ReadableStream zurück, dessen Blöcke aufeinander aufbauen. Beispiel: "Hello,", "Hello world,", "Hello world I am,", "Hello world I am an AI.". Das ist nicht beabsichtigt. Wir möchten uns an anderen Streaming-APIs auf der Plattform orientieren, bei denen die Chunks aufeinanderfolgende Teile eines einzelnen langen Streams sind. Dies bedeutet, dass die Ausgabe eine Sequenz wie "Hello", " world", " I am", " an AI" sein würde.

Um das gewünschte Verhalten zu erreichen, können Sie vorerst Folgendes implementieren. Das funktioniert sowohl mit dem Standard- als auch mit dem nicht standardmäßigen Verhalten.

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

Ausführung einer Aufforderung beenden

Sowohl prompt() als auch promptStreaming() akzeptieren einen optionalen zweiten Parameter mit einem signal-Feld, mit dem Sie die Ausführung von Prompts beenden können.

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

const result = await session.prompt(
  'Write me a poem!',
  { signal: controller.signal }
);

Sitzung beenden

Rufen Sie destroy() an, um Ressourcen freizugeben, wenn Sie eine Sitzung nicht mehr benötigen. Wenn eine Sitzung zerstört wird, kann sie nicht mehr verwendet werden und alle laufenden Ausführungen werden abgebrochen. Wenn Sie das Modell häufig auffordern möchten, sollten Sie die Sitzung beibehalten, da das Erstellen einer Sitzung einige Zeit in Anspruch nehmen kann.

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

Wenn Sie die Prompt API in Chrome-Erweiterungen testen möchten, installieren Sie die Demo-Erweiterung. Der Quellcode der Erweiterung ist auf GitHub verfügbar.

Demo-Oberfläche für die Prompt API

Teilnehmen und Feedback geben

Starten Sie jetzt den Test der Prompt API in Ihren Chrome-Erweiterungen, indem Sie am Ursprungstest teilnehmen und uns Feedback geben. Ihr Feedback kann sich direkt darauf auswirken, wie wir zukünftige Versionen dieser API und alle integrierten KI-APIs entwickeln und implementieren.