Prompt API

Veröffentlicht am 20. Mai 2025, zuletzt aktualisiert am 21. September 2025

Erklärung Web Erweiterungen Chrome-Status Absicht
GitHub Ursprungstest In Origin-Test Chrome 138 Ansicht Intent to Experiment

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

Es gibt viele Möglichkeiten, die Prompt API zu verwenden. Sie könnten beispielsweise Folgendes erstellen:

  • KI-basierte Suche: Fragen basierend auf dem Inhalt einer Webseite beantworten.
  • Personalisierte Newsfeeds: Erstellen Sie einen Feed, in dem Artikel dynamisch in Kategorien eingeteilt werden und Nutzer diese Inhalte filtern können.
  • Benutzerdefinierte Inhaltsfilter: Nachrichtenartikel analysieren und Inhalte basierend auf nutzerdefinierten Themen automatisch unkenntlich machen oder ausblenden.
  • Erstellung von Kalenderterminen: Entwickeln Sie eine Chrome-Erweiterung, die automatisch Termindetails von Webseiten extrahiert, damit Nutzer mit wenigen Schritten Kalendereinträge erstellen können.
  • Nahtlose Kontaktextraktion: Entwickeln Sie eine Erweiterung, die Kontaktdaten von Websites extrahiert, damit Nutzer leichter Kontakt mit einem Unternehmen aufnehmen oder Details zu ihrer Kontaktliste hinzufügen können.

Das sind nur einige der Möglichkeiten. Wir sind gespannt, was Sie damit anstellen werden.

Hardwareanforderungen prüfen

Für Entwickler und Nutzer, die Funktionen mit diesen APIs in Chrome verwenden, gelten die folgenden Anforderungen. Bei anderen Browsern gelten möglicherweise andere Betriebsanforderungen.

Die APIs für die Spracherkennung und die Übersetzung funktionieren in Chrome auf dem Computer. Diese APIs funktionieren nicht auf Mobilgeräten. Die Prompt API, Summarizer API, Writer API, Rewriter API und Proofreader API funktionieren in Chrome, wenn die folgenden Bedingungen erfüllt sind:

  • Betriebssystem: Windows 10 oder 11; macOS 13 oder höher (Ventura und höher); Linux; oder ChromeOS (ab Plattform 16389.0.0) auf Chromebook Plus-Geräten. Chrome für Android, iOS und ChromeOS auf Geräten, die keine Chromebook Plus-Geräte sind, werden von den APIs, die Gemini Nano verwenden, noch nicht unterstützt.
  • Speicher: Auf dem Volume, das Ihr Chrome-Profil enthält, müssen mindestens 22 GB freier Speicherplatz verfügbar sein.
  • GPU: Mehr als 4 GB VRAM.
  • Netzwerk: Unbegrenzte Daten oder eine Verbindung ohne Volumenbegrenzung.

Die genaue Größe von Gemini Nano kann variieren, da das Modell vom Browser aktualisiert wird. Die aktuelle Größe finden Sie unter chrome://on-device-internals.

Prompt API verwenden

Für die Prompt API wird das Gemini Nano-Modell in Chrome verwendet. Die API ist zwar in Chrome integriert, das Modell wird jedoch beim ersten Mal, wenn ein Ursprung die API verwendet, separat heruntergeladen. Bevor Sie diese API verwenden, müssen Sie die Richtlinie zur unzulässigen Nutzung von generativer KI von Google zur Kenntnis nehmen.

Rufen Sie LanguageModel.availability() auf, um festzustellen, ob das Modell einsatzbereit ist.

const availability = await LanguageModel.availability();

Bevor das Modell heruntergeladen werden kann, muss eine Nutzerinteraktion erfolgen, z. B. ein Klick, Tippen oder Drücken einer Taste.

Wenn die Antwort downloadable oder downloading war, sind das Modell und die APIs verfügbar, müssen aber heruntergeladen werden, bevor Sie die Funktionen verwenden können. Der Nutzer muss mit der Seite interagieren (z. B. durch Klicken, Tippen oder Drücken einer Taste), damit ein Download zulässig ist.

Rufen Sie die Funktion create() auf, um das Modell herunterzuladen und zu instanziieren.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

Wenn die Antwort auf availability() downloading war, höre auf den Downloadfortschritt und informiere den Nutzer, da der Download einige Zeit dauern kann.

Modellparameter

Die params()-Funktion informiert Sie über die Parameter des Sprachmodells. Das Objekt hat die folgenden Felder:

await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}

Sitzung erstellen

Sobald die Prompt API ausgeführt werden kann, erstellen Sie eine Sitzung mit der Funktion create().

Jede Sitzung kann mit topK und temperature mithilfe eines optionalen Optionenobjekts angepasst werden. Die Standardwerte für diese Parameter werden von LanguageModel.params() zurückgegeben.

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

Das optionale Optionenobjekt der Funktion create() akzeptiert auch das Feld signal, mit dem Sie ein AbortSignal übergeben können, um die Sitzung zu beenden.

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

const session = await LanguageModel.create({
  signal: controller.signal,
});

Mit ersten Prompts Kontext hinzufügen

Mit Initial-Prompts können Sie dem Sprachmodell Kontext zu früheren Interaktionen geben, damit der Nutzer beispielsweise eine gespeicherte Sitzung nach einem Neustart des Browsers fortsetzen kann.

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

Antworten mit einem Präfix einschränken

Sie können zusätzlich zu den vorherigen Rollen eine "assistant"-Rolle hinzufügen, um die vorherigen Antworten des Modells zu erläutern. Beispiel:

const followup = await session.prompt([
  {
    role: "user",
    content: "I'm nervous about my presentation tomorrow"
  },
  {
    role: "assistant",
    content: "Presentations are tough!"
  }
]);

In einigen Fällen möchten Sie möglicherweise nicht eine neue Antwort anfordern, sondern einen Teil der Antwortnachricht für die "assistant"-Rolle vorab ausfüllen. Das kann hilfreich sein, um das Sprachmodell dazu zu bringen, ein bestimmtes Antwortformat zu verwenden. Fügen Sie dazu der letzten Nachricht mit der Rolle "assistant" den Text prefix: true hinzu. Beispiel:

const characterSheet = await session.prompt([
  {
    role: 'user',
    content: 'Create a TOML character sheet for a gnome barbarian',
  },
  {
    role: 'assistant',
    content: '```toml\n',
    prefix: true,
  },
]);

Erwartete Eingabe und Ausgabe hinzufügen

Die Prompt API bietet multimodale Funktionen und unterstützt mehrere Sprachen. Legen Sie beim Erstellen der Sitzung die Modalitäten und Sprachen für expectedInputs und expectedOutputs fest.

  • type: Erwartete Modalität.
    • Für expectedInputs kann dies text, image oder audio sein.
    • Für expectedOutputs ist mit der Prompt API nur text möglich.
  • languages: Array zum Festlegen der erwarteten Sprache(n). Die Prompt API akzeptiert "en", "ja" und "es". Die Unterstützung für weitere Sprachen ist in Arbeit.
    • Legen Sie für expectedInputs die Systemsprache und eine oder mehrere erwartete Sprachen für Nutzer-Prompts fest.
    • Legen Sie eine oder mehrere expectedOutputs-Sprachen fest.
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});

Sie erhalten möglicherweise eine "NotSupportedError" DOMException, wenn das Modell auf eine nicht unterstützte Ein- oder Ausgabe trifft.

Multimodale Funktionen

Mit diesen Funktionen haben Sie folgende Möglichkeiten:

  • Nutzern erlauben, in einer Chat-App gesendete Sprachnachrichten in Text umzuwandeln
  • Beschreiben Sie ein auf Ihre Website hochgeladenes Bild, das in einer Bildunterschrift oder einem Alternativtext verwendet werden soll.

Sehen Sie sich die Demo Mediarecorder Audio Prompt an, um zu sehen, wie die Prompt API mit Audioeingabe verwendet wird, und die Demo Canvas Image Prompt, um zu sehen, wie die Prompt API mit Bildeingabe verwendet wird.

Nachrichten anhängen

Die Inferenz kann einige Zeit in Anspruch nehmen, insbesondere wenn Sie multimodale Eingaben verwenden. Es kann hilfreich sein, vorab festgelegte Prompts zu senden, um die Sitzung zu füllen, damit das Modell schneller mit der Verarbeitung beginnen kann.

initialPrompts sind zwar beim Erstellen von Sitzungen nützlich, die Methode append() kann jedoch zusätzlich zu den Methoden prompt() oder promptStreaming() verwendet werden, um nach dem Erstellen der Sitzung zusätzliche Kontextaufforderungen zu geben.

Beispiel:

const session = await LanguageModel.create({
  initialPrompts: [
    {
      role: 'system',
      content:
        'You are a skilled analyst who correlates patterns across multiple images.',
    },
  ],
  expectedInputs: [{ type: 'image' }],
});

fileUpload.onchange = async () => {
  await session.append([
    {
      role: 'user',
      content: [
        {
          type: 'text',
          value: `Here's one image. Notes: ${fileNotesInput.value}`,
        },
        { type: 'image', value: fileUpload.files[0] },
      ],
    },
  ]);
};

analyzeButton.onclick = async (e) => {
  analysisResult.textContent = await session.prompt(userQuestionInput.value);
};

Das von append() zurückgegebene Promise wird erfüllt, sobald der Prompt validiert, verarbeitet und an die Sitzung angehängt wurde. Das Promise wird abgelehnt, wenn der Prompt nicht angehängt werden kann.

JSON-Schema übergeben

Fügen Sie das Feld responseConstraint der Methode prompt() oder promptStreaming() hinzu, um ein JSON-Schema als Wert zu übergeben. Anschließend können Sie strukturierte Ausgaben mit der Prompt API verwenden.

Im folgenden Beispiel wird durch das JSON-Schema sichergestellt, dass das Modell mit true oder false antwortet, um zu klassifizieren, ob eine bestimmte Nachricht sich auf Töpferei bezieht.

const session = await LanguageModel.create();

const schema = {
  "type": "boolean"
};

const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";

const result = await session.prompt(
  `Is this post about pottery?\n\n${post}`,
  {
    responseConstraint: schema,
  }
);
console.log(JSON.parse(result));
// true

Ihre Implementierung kann ein JSON-Schema oder einen regulären Ausdruck als Teil der an das Modell gesendeten Nachricht enthalten. Dabei wird ein Teil des Eingabekontingents verwendet. Sie können messen, wie viel des Eingabekontingents verwendet wird, indem Sie die Option responseConstraint an session.measureInputUsage() übergeben.

Sie können dieses Verhalten mit der Option omitResponseConstraintInput vermeiden. Wenn Sie das tun, empfehlen wir, dem Prompt eine Anleitung hinzuzufügen:

const result = await session.prompt(`
  Summarize this feedback into a rating between 0-5. Only output a JSON
  object { rating }, with a single property whose value is a number:
  The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });

Prompt für das Modell erstellen

Sie können das Modell entweder mit der Funktion prompt() oder mit der Funktion promptStreaming() auffordern.

Nicht gestreamte 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 { defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();

if (available !== 'unavailable') {
  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);
}

Gestreamte Ausgabe

Wenn Sie eine längere Antwort erwarten, sollten Sie die Funktion promptStreaming() verwenden. Damit können Sie Teilergebnisse anzeigen, sobald sie vom Modell eingehen. Die Funktion promptStreaming() gibt eine ReadableStream zurück.

const { defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  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);
  }
}

Aufforderungen beenden

Sowohl prompt() als auch promptStreaming() akzeptieren einen optionalen zweiten Parameter mit einem signal-Feld, mit dem Sie das Ausführen 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,
});

Sitzungsverwaltung

In jeder Sitzung wird der Kontext der Unterhaltung beibehalten. Vorherige Interaktionen werden für zukünftige Interaktionen berücksichtigt, bis das Kontextfenster der Sitzung voll ist.

Für jede Sitzung gilt eine maximale Anzahl von Tokens, die verarbeitet werden können. So können Sie Ihren Fortschritt in Bezug auf dieses Limit prüfen:

console.log(`${session.inputUsage}/${session.inputQuota}`);

Weitere Informationen zur Sitzungsverwaltung

Sitzung klonen

Um Ressourcen zu schonen, können Sie eine vorhandene Sitzung mit der Funktion clone() klonen. Der Kontext der Unterhaltung wird zurückgesetzt, die ursprüngliche Aufforderung bleibt jedoch erhalten. Die Funktion clone() akzeptiert ein optionales Optionenobjekt mit dem Feld signal, mit dem Sie ein AbortSignal übergeben können, um die geklonte Sitzung zu beenden.

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

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

Sitzung beenden

Rufen Sie destroy() auf, um Ressourcen freizugeben, wenn Sie eine Sitzung nicht mehr benötigen. Wenn eine Sitzung beendet wird, kann sie nicht mehr verwendet werden und alle laufenden Ausführungen werden abgebrochen. Es kann sinnvoll sein, die Sitzung beizubehalten, wenn Sie das Modell häufig auffordern möchten, 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 choosing between a t-shirt
  and a polo."
);

Demos

Wir haben mehrere Demos erstellt, um die vielen Anwendungsfälle für die Prompt API zu veranschaulichen. Die folgenden Demos sind Webanwendungen:

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

Leistungsstrategie

Die Prompt API für das Web wird noch entwickelt. Bis wir diese API entwickelt haben, können Sie sich an unsere Best Practices zur Sitzungsverwaltung halten, um eine optimale Leistung zu erzielen.

Berechtigungsrichtlinie, iFrames und Web Workers

Standardmäßig ist die Prompt API nur für Fenster der obersten Ebene und für ihre Same-Origin-Iframes verfügbar. Der Zugriff auf die API kann mithilfe des Attributs allow="" der Berechtigungsrichtlinie an ursprungsübergreifende iFrames delegiert werden:

<!--
  The hosting site at https://main.example.com can grant a cross-origin iframe
  at https://cross-origin.example.com/ access to the Prompt API by
  setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>

Die Prompt API ist derzeit nicht in Webworkern verfügbar, da es sehr komplex ist, für jeden Worker ein verantwortliches Dokument zu erstellen, um den Status der Berechtigungsrichtlinie zu prüfen.

Teilnehmen und Feedback geben

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