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 ein 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. Ursprungstests sind zeitlich begrenzte Programme, die für alle Entwickler offen sind und Vorabzugriff auf experimentelle Plattformfunktionen bieten. Entwickler können testen, Feedback von Nutzern einholen und iterieren, um eine zukünftige Markteinführung vorzubereiten.
    • Es kann zwar Nutzungsbeschränkungen geben, aber Sie können diese Funktionen für Livetests und die Erhebung von Nutzerfeedback einbinden. Das Ziel besteht darin, zukünftige Versionen dieser API zu verbessern, während wir daran arbeiten, die Verfügbarkeit zu erweitern.
  • Melden Sie sich für das Vorab-Programm an, um einen ersten Blick auf die neuen integrierten KI-APIs zu werfen und an der Diskussion in unserer Mailingliste teilzunehmen.

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 die Chrome Origin-Testversion

Die Erweiterungs-ID wird dynamisch erstellt. Nachdem Sie die ID zugewiesen haben, können Sie sie erzwingen, dass sie 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.

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

Unterstützung für localhost hinzufügen

Wenn Sie während des Ursprungstests auf die Prompt API auf localhost zugreifen möchten, müssen Sie Chrome auf die neueste Version aktualisieren. Folgen Sie anschließend dieser Anleitung:

  1. Öffnen Sie Chrome auf einer der folgenden Plattformen: Windows, Mac oder Linux.
  2. Öffnen Sie chrome://flags/#optimization-guide-on-device-model.
  3. Wählen Sie Enabled BypassPerfRequirement aus.
    • Dadurch werden Leistungsprüfungen übersprungen, die verhindern können, dass Sie Gemini Nano auf Ihr Gerät herunterladen können.
  4. Klicken Sie auf Neu starten oder starten Sie Chrome neu.

Prompt API verwenden

Sobald Sie die Berechtigung zur Verwendung der Prompt API angefordert haben, können Sie Ihre Erweiterung erstellen. Im chrome.aiOriginTrial.languageModel-Namespace 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 der Funktion 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 du eine AbortSignal übergeben kannst, 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 einen 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 Prompts

Mit ersten Prompts können Sie dem Sprachmodell Kontext zu früheren Interaktionen zur Verfügung stellen, z. B. damit der Nutzer eine gespeicherte Sitzung nach einem Browserneustart fortsetzen kann.

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 hat eine maximale Anzahl von Tokens, die verarbeitet werden können. 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. 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 entweder mit der prompt()- oder der promptStreaming()-Funktion anregen.

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 Funktion promptStreaming() verwenden. Damit können Sie Teilergebnisse anzeigen, sobald sie 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. Die Ausgabe wäre also eine Sequenz wie "Hello", " world", " I am", " an AI".

Um das gewünschte Verhalten zu erzielen, 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 eines Prompts 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

Sie können die Prompt API jetzt in Ihren Chrome-Erweiterungen testen. Nehmen Sie dazu am Ursprungstest teil und geben Sie Feedback. Ihr Feedback kann sich direkt darauf auswirken, wie wir zukünftige Versionen dieser API und alle integrierten KI-APIs entwickeln und implementieren.