Prompt API

Veröffentlicht: 11. November 2024, letzte Aktualisierung: 20. Mai 2025

Erklärvideo Web Erweiterungen Chrome-Status Absicht
GitHub Experimentell In EPP Chrome Beta Chrome 137 Beta Ansicht Testabsicht

Mit der Prompt API können Sie im Browser Anfragen in natürlicher Sprache an Gemini Nano senden.

Es gibt viele Möglichkeiten, die Prompt API in Chrome-Erweiterungen zu verwenden. Beispiel:

  • Instant-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, mit der Kontaktdaten von Websites extrahiert werden, damit Nutzer Unternehmen leichter 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, was ihr damit erschafft.

Prompt API in Erweiterungen verwenden

Im Namespace LanguageModel stehen zwei Erweiterungsfunktionen zur Verfügung:

  • availability(), um zu prüfen, welche Funktionen das Modell bietet und ob es verfügbar ist.
  • create(), um eine Sitzung mit dem Language Model zu starten.

Download des Modells

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 LanguageModel.availability() auf, um zu prüfen, ob das Modell einsatzbereit ist. Daraufhin sollte eine der folgenden Antworten zurückgegeben werden:

  • 'no': Der 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 Browser unterstützt die Prompt API und kann sofort verwendet werden.
  • 'after-download': Der Browser unterstützt die Prompt API, muss aber zuerst das Modell herunterladen.

Rufen Sie die asynchrone Funktion LanguageModel.availability() auf, um den Modelldownload auszulösen und die Sitzung des Sprachmodells zu erstellen. Wenn die Antwort auf availability() '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 LanguageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

Modellfunktionen

Die Funktion availability() informiert Sie auch über die Funktionen des Sprachmodells. Neben available hat das Objekt auch die folgenden Felder:

await LanguageModel.availability();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

Sitzung erstellen

Sobald die Prompt API ausgeführt werden kann, erstellst du eine Sitzung mit der Funktion create(). Sie können das Modell entweder mit der prompt()- oder der promptStreaming()-Funktion anregen.

Sitzung anpassen

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

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

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 LanguageModel.create({
  signal: controller.signal,
})

Erste Prompts

Mit ersten Prompts können Sie dem Sprachmodell Kontext zu früheren Interaktionen zur Verfügung stellen, z. B. um dem Nutzer zu ermöglichen, eine gespeicherte Sitzung nach einem Browserneustart fortzusetzen.

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

Sitzungen

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

Sitzung klonen

Um Ressourcen zu sparen, können Sie eine vorhandene Sitzung mit der Funktion clone() klonen. Der Konversationskontext wird zurückgesetzt, aber der ursprüngliche Prompt bleibt erhalten. Die Funktion clone() nimmt ein optionales Optionsobjekt mit einem signal-Feld entgegen. Über dieses Feld können Sie einen AbortSignal übergeben, 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 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);
}

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 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() 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 einzigen 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 Demoerweiterung. Der Quellcode der Erweiterung ist auf GitHub verfügbar.

Demo-Oberfläche für die Prompt API

Teilnehmen und Feedback geben

Ihr Feedback kann sich direkt darauf auswirken, wie wir zukünftige Versionen dieser API und alle integrierten KI-APIs entwickeln und implementieren.