Prompt API

Veröffentlicht am 20. Mai 2025, zuletzt aktualisiert am 26. August 2026

Erklärvideo Web Erweiterungen Chrome-Status Absicht
GitHub Chrome 148 Chrome 138 Ansicht Absicht zum Versenden
GitHub Ursprungstest Ursprungstest für Sampling-Parameter Chrome 148 Ansicht Absicht zum Testen

Mit der Prompt API können Sie Anfragen in natürlicher Sprache an das Foundation Model in Chrome senden.

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

  • KI-gestützte Suche: Antworten auf Fragen basierend auf dem Inhalt einer Webseite.
  • Personalisierte Nachrichten-Feeds: Erstellen Sie einen Feed, in dem Artikel dynamisch nach Kategorien klassifiziert werden und ermöglichen Sie Nutzern, nach diesen Inhalten zu filtern.
  • Benutzerdefinierte Inhaltsfilter. Analysieren Sie Nachrichtenartikel und blenden Sie Inhalte automatisch aus oder machen Sie sie unscharf, basierend auf benutzerdefinierten Themen.
  • Kalendertermine erstellen. Entwickeln Sie eine Chrome-Erweiterung, die automatisch Termindetails von Webseiten extrahiert, damit Nutzer in wenigen Schritten Kalendereinträge erstellen können.
  • Nahtlose Kontaktextraktion. Erstellen Sie eine Erweiterung, die Kontaktdaten von Websites extrahiert, damit Nutzer einfacher Kontakt mit einem Unternehmen aufnehmen oder Details zu ihrer Kontaktliste hinzufügen können.

Das sind nur einige Möglichkeiten. Wir sind gespannt darauf, was Sie erstellen.

Hardwareanforderungen

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

Die Language Detector API und die Translator API funktionieren in Chrome auf dem Desktop. Auf Mobilgeräten funktionieren diese APIs nicht.

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 Nicht-Chromebook Plus-Geräten wird von den APIs, die Foundation Models verwenden, noch nicht unterstützt.
  • Speicher: Mindestens 22 GB freier Speicherplatz auf dem Volume, das Ihr Chrome-Profil enthält.
  • GPU oder CPU: Integrierte Modelle können mit GPU oder CPU ausgeführt werden.
    • GPU: Mehr als 4 GB VRAM.
    • CPU: Mindestens 16 GB RAM und mindestens 4 CPU-Kerne.
    • Hinweis: Für die Prompt API mit Audioeingabe ist eine GPU erforderlich.
  • Netzwerk: Unbegrenzte Daten oder eine Verbindung ohne Datenlimit.

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

Prompt API verwenden

Die Prompt API verwendet das Gemini Nano-Modell in Chrome. Die API ist zwar in Chrome integriert, das Modell wird aber beim ersten Mal, wenn ein Ursprung die API verwendet, separat heruntergeladen.

Rufen Sie LanguageModel.availability() auf, um zu prüfen, ob das Modell einsatzbereit ist.

const availability = await LanguageModel.availability({
  // The same options in `prompt()` or `promptStreaming()`
});

Prüfen Sie, ob der Nutzer die Funktion aktiviert hat, um den Download auszulösen und das Language Model zu instanziieren. Rufen Sie dann die create() Funktion auf.

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

Wenn die Antwort auf availability() downloading lautet, beobachten Sie den Downloadfortschritt und informieren Sie den Nutzer, da der Download einige Zeit dauern kann.

Sitzung erstellen

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

const session = await LanguageModel.create();

Das optionale Optionenobjekt der Funktion create() enthält ein 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,
});

Sampling-Parameter

{: #sampling_parameters }

Mit der Steuerung der Stichprobenerhebung können Sie festlegen, wie vorhersehbar (deterministisch) oder kreativ (variiert) die Antworten des Modells sein sollen. Die Verfügbarkeit von Sampling-Parametern unterscheidet sich zwischen der Webplattform und Chrome-Erweiterungen:

  • Web (Standard): Standardmäßig werden in der Prompt API im Web keine Sampling-Parameter verfügbar gemacht, da numerische Einstellungen wie temperature und topK nicht konsistent auf verschiedene zugrunde liegende Modelle und Architekturen übertragen werden können.
  • Web (Origin-Test): Ein Origin Test schaltet die samplingMode Option frei, mit der die Vorhersehbarkeit der Ausgabe mit beschreibenden Enum-Werten anstelle von Rohzahlen angepasst werden kann.
  • Chrome-Erweiterungen: Legacy-Parameter (topK, temperature) und die Methode LanguageModel.params() werden unterstützt.

Web-Sampling-Modus (Ursprungstest)

Wenn Sie am Origin-Test für Sampling-Parameter teilnehmen, können Sie die Option samplingMode an LanguageModel.create() (oder LanguageModel.availability()) übergeben.

Die unterstützten Enum-Werte für samplingMode sind:

  • "most-predictable": Höchster Determinismus und höchste Vorhersehbarkeit.
  • "predictable": Vorhersehbarere Ausgabe mit minimaler Variation.
  • "slightly-predictable": Leicht vorhersehbare Ausgabe.
  • "balanced": Ein Gleichgewicht zwischen Vorhersehbarkeit und Kreativität (typisches Standardverhalten).
  • "slightly-creative": Leicht variierte und kreative Ausgabe.
  • "creative": Kreative und variierte Ausgabe.
  • "most-creative": Maximale Variabilität und Kreativität.
// Available on the web with the Sampling Parameters Origin Trial enabled
const session = await LanguageModel.create({
  samplingMode: 'creative',
});

// The configured sampling mode is exposed on the session instance
console.log(session.samplingMode);
// "creative"

Sampling-Parameter für Chrome-Erweiterungen

Wenn Sie die Prompt API in Chrome-Erweiterungen verwenden, kann jede Sitzung weiterhin mit topK und temperature über das Optionenobjekt angepasst werden.

Die statische Funktion LanguageModel.params() informiert Sie über die Standard- und Höchstwerte für die Parameter des Sprachmodells:

// Only available in Chrome Extensions
const params = await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}

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

console.log(slightlyHighTemperatureSession.temperature);
console.log(slightlyHighTemperatureSession.topK);

Kontext mit anfänglichen Prompts hinzufügen

Mit anfänglichen Prompts können Sie dem Language Model 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 Rolle "assistant" 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 "assistant"-Rollenantwortnachricht vorab ausfüllen. Das kann hilfreich sein, um das Language Model dazu zu bringen, ein bestimmtes Antwortformat zu verwenden. Fügen Sie dazu prefix: true zur nachfolgenden Nachricht der Rolle "assistant"-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 lässt die Prompt API nur text zu.
  • languages: Array zum Festlegen der erwarteten Sprache oder Sprachen. Die Prompt API akzeptiert "en", "ja", "es", "de" und "fr". Die Unterstützung für weitere Sprachen ist in Entwicklung.
    • Legen Sie für expectedInputs die Sprache des System-Prompts und eine oder mehrere erwartete Sprachen für den Nutzer-Prompt fest.
    • Legen Sie eine oder mehrere Sprachen für expectedOutputs fest.
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});

Möglicherweise erhalten Sie eine "NotSupportedError" DOMException, wenn das Modell auf eine nicht unterstützte Eingabe oder Ausgabe stößt.

Multimodale Funktionen

Mit diesen Funktionen haben Sie folgende Möglichkeiten:

  • Nutzern erlauben, Audionachrichten zu transkribieren, die in einer Chat-Anwendung gesendet wurden.
  • Beschreiben Sie ein Bild, das auf Ihre Website hochgeladen wurde, zur Verwendung in einer Bildunterschrift oder einem Alt-Text.

In der Mediarecorder Audio Prompt Demo erfahren Sie, wie Sie die Prompt API mit Audioeingabe verwenden, und in der Canvas Image Prompt Demo wie Sie die Prompt API mit Bildeingabe verwenden.

Die Prompt API unterstützt die folgenden Eingabetypen:

Dieses Snippet zeigt eine multimodale Sitzung, in der zuerst zwei visuelle Elemente (ein Bild-Blob und ein HTMLCanvasElement) verarbeitet werden und die KI sie vergleicht. Anschließend kann der Nutzer mit einer Audioaufnahme (als AudioBuffer) antworten.

const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en"] },
    { type: "audio" },
    { type: "image" },
  ],
  expectedOutputs: [{ type: "text", languages: ["en"] }],
});

const referenceImage = await (await fetch("reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");

const response1 = await session.prompt([
  {
    role: "user",
    content: [
      {
        type: "text",
        value:
          "Give a helpful artistic critique of how well the second image matches the first:",
      },
      { type: "image", value: referenceImage },
      { type: "image", value: userDrawnImage },
    ],
  },
]);
console.log(response1);

const audioBuffer = await captureMicrophoneInput({ seconds: 10 });

const response2 = await session.prompt([
  {
    role: "user",
    content: [
      { type: "text", value: "My response to your critique:" },
      { type: "audio", value: audioBuffer },
    ],
  },
]);
console.log(response2);

Nachrichten anhängen

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

initialPrompts sind zwar bei der Sitzungserstellung nützlich, die Methode append() kann aber zusätzlich zu den Methoden prompt() oder promptStreaming() verwendet werden, um nach der Erstellung der Sitzung weitere kontextbezogene Prompts zu senden.

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 zur Methode prompt() oder promptStreaming() hinzu, um ein JSON-Schema als Wert zu übergeben. Sie können dann strukturierte Ausgaben mit der Prompt API verwenden.

Im folgenden Beispiel sorgt das JSON-Schema dafür, dass das Modell mit true oder false antwortet, um zu klassifizieren, ob es in einer bestimmten Nachricht um Keramik geht.

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 Nachricht enthalten, die an das Modell gesendet wird. Dadurch wird ein Teil des Kontextfensters verwendet. Sie können messen, wie viel des Kontextfensters verwendet wird, indem Sie die Option responseConstraint an session.measureContextUsage() übergeben.

Mit der Option omitResponseConstraintInput können Sie dieses Verhalten vermeiden. In diesem Fall empfehlen wir, einige Anweisungen in den Prompt aufzunehmen:

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

Modell prompten

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

Anfragebasierte 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 = await LanguageModel.availability({
  expectedInputs: [{type: 'text', languages: ['en']}],
  expectedOutputs: [{type: 'text', languages: ['en']}],
});

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, mit der Sie Teilergebnisse anzeigen können, sobald sie vom Modell eingehen. Die Funktion promptStreaming() gibt einen ReadableStream zurück.

const available = await LanguageModel.availability({
  expectedInputs: [{type: 'text', languages: ['en']}],
  expectedOutputs: [{type: 'text', languages: ['en']}],
});
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);
  }
}

Prompten beenden

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

Sitzungsverwaltung

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

Jede Sitzung hat 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.contextUsage}/${session.contextWindow}`);

Es ist möglich, einen Prompt zu senden, der zu einem Überlauf des Kontextfensters führt. In solchen Fällen werden die ersten Teile der Unterhaltung mit dem Language Model entfernt, jeweils ein Prompt- und Antwortpaar, bis genügend Tokens zur Verarbeitung des neuen Prompts verfügbar sind. Die einzige Ausnahme ist der System-Prompt, der nie entfernt wird.

Solche Überläufe können erkannt werden, indem Sie auf das Ereignis contextoverflow in der Sitzung warten:

session.addEventListener("contextoverflow", () => {
  console.log("We've gone past the context window, and some inputs will be dropped!");
});

Wenn nicht genügend Tokens aus dem Unterhaltungsverlauf entfernt werden können, um den neuen Prompt zu verarbeiten, schlägt der Aufruf von prompt() oder promptStreaming() mit der Ausnahme QuotaExceededError fehl und es wird nichts entfernt. Die Ausnahme QuotaExceededError hat die folgenden Eigenschaften:

  • requested: Anzahl der Tokens in der Eingabe
  • contextWindow: Anzahl der verfügbaren Tokens

Weitere Informationen zur Sitzungsverwaltung.

Sitzung klonen

Um Ressourcen zu sparen, können Sie eine vorhandene Sitzung mit der Funktion clone() kopieren. Dadurch wird eine Kopie der Unterhaltung erstellt, wobei der Kontext und der anfängliche Prompt beibehalten werden.

Die Funktion clone() verwendet ein optionales Optionenobjekt mit einem 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 prompten möchten, da das Erstellen einer Sitzung einige Zeit dauern 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. Während wir diese API entwickeln, sollten Sie unsere Best Practices zur Sitzungsverwaltung für eine optimale Leistung beachten.

Berechtigungsrichtlinie, iFrames und Web Worker

Standardmäßig ist die Prompt API nur für Fenster der obersten Ebene und für ihre iFrames mit demselben Ursprung verfügbar. Der Zugriff auf die API kann mit dem Attribut allow="" der Berechtigungsrichtlinie an iFrames mit anderem Ursprung 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 Web Workern verfügbar, da es 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 direkten Einfluss darauf haben, wie wir zukünftige Versionen von dieser API und allen integrierten KI-APIsentwickeln und implementieren.