Veröffentlicht: 20. Mai 2025, letzte Aktualisierung: 21. Oktober 2026
| Erklärvideo | Web | Erweiterungen | Chrome-Status | Absicht |
|---|---|---|---|---|
| GitHub | Ansicht | Intent to Ship | ||
| GitHub | Ansicht | Intent to Experiment |
Mit der Prompt API können Sie Anfragen in natürlicher Sprache an das Foundation Model in Chrome senden.
Die Prompt API lässt sich auf vielfältige Weise nutzen. Sie könnten beispielsweise Folgendes erstellen:
- KI-basierte Suche: Fragen basierend auf dem Inhalt einer Webseite beantworten.
- Personalisierte Nachrichtenfeeds: Erstellen Sie einen Feed, der Artikel dynamisch nach Kategorien klassifiziert, und ermöglichen Sie Nutzern, nach diesen Inhalten zu filtern.
- Benutzerdefinierte Inhaltsfilter: Nachrichtenartikel analysieren und Inhalte basierend auf benutzerdefinierten Themen automatisch unkenntlich machen oder ausblenden.
- Kalendertermine erstellen: Entwickeln Sie eine Chrome-Erweiterung, die automatisch Termindetails von Webseiten extrahiert, damit Nutzer mit nur wenigen Schritten Kalendereinträge erstellen können.
- Nahtlose Kontaktextraktion: Erstellen Sie eine Erweiterung, die Kontaktdaten von Websites extrahiert, damit Nutzer leichter mit einem Unternehmen in Kontakt treten oder Details zu ihrer Kontaktliste hinzufügen können.
Das sind nur einige der Möglichkeiten. Wir sind gespannt, was Sie daraus machen.
Hardwareanforderungen prüfen
Für Entwickler und Nutzer, die Funktionen mit diesen APIs in Chrome verwenden, gelten die folgenden Anforderungen. Für andere Browser gelten möglicherweise andere Betriebsanforderungen.
Die Language Detector API und die Translator API funktionieren in Chrome auf dem Computer. Diese APIs funktionieren nicht auf Mobilgeräten.
Die Prompt API, die Summarizer API, die Writer API, die Rewriter API und die 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 Foundation Models verwenden, noch nicht unterstützt.
- Speicherplatz: 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: Unbegrenztes Datenvolumen oder eine Verbindung ohne Datenlimit.
Die genaue Größe von Gemini Nano kann variieren, wenn 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 in Chrome integriert, das Modell wird jedoch separat heruntergeladen, wenn ein Ursprung die API zum ersten Mal verwendet.
Rufen Sie LanguageModel.availability() auf, um festzustellen, ob das Modell einsatzbereit ist.
const availability = await LanguageModel.availability({
// The same options in `prompt()` or `promptStreaming()`
});
Um den Download auszulösen und das Sprachmodell zu instanziieren, prüfen Sie, ob eine Nutzeraktivierung vorliegt. Rufen Sie dann die Funktion create() auf.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
Wenn die Antwort auf availability() downloading war, warte auf den Downloadfortschritt und informiere 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 Optionsobjekt der Funktion create() akzeptiert ein signal-Feld, 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,
});
Parameter für die Stichprobenerhebung
Durch die Steuerung des Samplings können Sie festlegen, wie vorhersehbar (deterministisch) oder kreativ (abwechslungsreich) die Antworten des Modells sind. Die Verfügbarkeit von Stichprobenparametern unterscheidet sich zwischen der Webplattform und Chrome-Erweiterungen:
- Web: Verwenden Sie die Option
samplingMode, die beschreibende Enum-Werte anstelle von Rohzahlen verwendet, um die Vorhersagbarkeit der Ausgabe anzupassen. - Chrome-Erweiterungen: Legacy-numerische Parameter (
topK,temperature) und die MethodeLanguageModel.params()werden unterstützt.
Web-Stichprobenmodus
Übergeben Sie die Option samplingMode an LanguageModel.create() (oder LanguageModel.availability()).
Die unterstützten samplingMode-Enum-Werte sind:
"most-predictable": Höchster Determinismus und höchste Vorhersehbarkeit."predictable": Vorhersehbarere Ausgabe mit minimaler Abweichung."slightly-predictable": Leicht vorhersehbare Ausgabe."balanced": Ein ausgewogenes Verhältnis zwischen Vorhersehbarkeit und Kreativität (typisches Standardverhalten)."slightly-creative": Leicht variierte und kreative Ausgabe."creative": Kreative und abwechslungsreiche 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 Optionsobjekt angepasst werden.
Die statische Funktion LanguageModel.params() informiert Sie über die Standard- und Höchstwerte für die Parameter des Sprachmodells:
defaultTopK: Der Standardwert für Top-K.maxTopK: Der maximale Top-K-Wert.defaultTemperature: Die Standard-Temperatur.maxTemperature: Die maximale Temperatur.
// 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 ersten Prompts hinzufügen
Mit Initial Prompts können Sie dem Language Model Kontext zu früheren Interaktionen bereitstellen, damit der Nutzer beispielsweise nach einem Browserneustart eine gespeicherte Sitzung 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 einen Teil der Antwortnachricht der "assistant"-Rolle vorab ausfüllen, anstatt eine neue Antwort anzufordern. Das kann hilfreich sein, um das Sprachmodell dazu zu bringen, ein bestimmtes Antwortformat zu verwenden. Fügen Sie dazu prefix: true zur abschließenden "assistant"-Rollen-Nachricht 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: Modalität erwartet.- Für
expectedInputskann diestext,imageoderaudiosein. - Für
expectedOutputslässt die Prompt API nurtextzu.
- Für
languages: Array zum Festlegen der erwarteten Sprache oder Sprachen. Die Prompt API akzeptiert"en","ja","es","de"und"fr". Die Unterstützung weiterer Sprachen ist in Entwicklung.- Legen Sie für
expectedInputsdie Sprache des System-Prompts und eine oder mehrere erwartete Sprachen für Nutzer-Prompts fest. - Legen Sie eine oder mehrere
expectedOutputs-Sprachen fest.
- Legen Sie für
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
],
expectedOutputs: [
{ type: "text", languages: ["ja"] }
]
});
Wenn das Modell eine nicht unterstützte Eingabe oder Ausgabe erhält, wird möglicherweise eine "NotSupportedError"-DOMException ausgegeben.
Multimodale Funktionen
Mit diesen Funktionen haben Sie folgende Möglichkeiten:
- Nutzern erlauben, Sprachnachrichten zu transkribieren, die in einer Chat-Anwendung gesendet wurden.
- Beschreiben Sie ein Bild, das auf Ihre Website hochgeladen wurde, um es in einer Bildunterschrift oder einem Alt-Text zu verwenden.
Sehen Sie sich die Demo Mediarecorder Audio Prompt zur Verwendung der Prompt API mit Audioeingabe und die Demo Canvas Image Prompt zur Verwendung der Prompt API mit Bildeingabe an.
Die Prompt API unterstützt die folgenden Eingabetypen:
- Audio:
- Visuell:
HTMLImageElementSVGImageElementHTMLVideoElement(verwendet den Frame an der aktuellen Videoposition)HTMLCanvasElementImageBitmapOffscreenCanvasVideoFrameBlobImageData
Dieses Snippet zeigt eine multimodale Sitzung, in der zuerst zwei visuelle Elemente (ein Bild Blob und ein HTMLCanvasElement) verarbeitet und von der KI verglichen werden. 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 bei Prompts mit multimodalen Eingaben. Es kann hilfreich sein, vorab festgelegte Prompts zu senden, um die Sitzung zu füllen, damit das Modell einen Vorsprung bei der Verarbeitung hat.
initialPrompts sind beim Erstellen einer Sitzung nützlich. Die Methode append() kann zusätzlich zu den Methoden prompt() oder promptStreaming() verwendet werden, um nach dem Erstellen der Sitzung zusätzliche kontextbezogene Prompts bereitzustellen.
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 die strukturierte Ausgabe 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 Töpfern 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 an das Modell gesendeten Nachricht enthalten. Dabei 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.
Sie können dieses Verhalten mit der Option omitResponseConstraintInput vermeiden. In diesem Fall empfehlen wir, dem Prompt einige Hinweise 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 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 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,
});
Sitzungsverwaltung
In jeder Sitzung wird der Kontext der Unterhaltung im Blick behalten. Frühere Interaktionen werden für zukünftige Interaktionen berücksichtigt, bis das Kontextfenster der Sitzung voll ist.
Für jede Sitzung gibt es eine maximale Anzahl von Tokens, die verarbeitet werden können. So können Sie Ihren Fortschritt im Hinblick auf dieses Limit prüfen:
console.log(`${session.contextUsage}/${session.contextWindow}`);
Es ist möglich, einen Prompt zu senden, der das Kontextfenster überlaufen lässt. In solchen Fällen werden die ersten Teile der Unterhaltung mit dem Language Model entfernt, und zwar jeweils ein Prompt- und Antwortpaar, bis genügend Tokens verfügbar sind, um den neuen Prompt zu verarbeiten. Die Ausnahme ist der System-Prompt, der nie entfernt wird.
Solche Überläufe können erkannt werden, indem das Ereignis contextoverflow in der Sitzung beobachtet wird:
session.addEventListener("contextoverflow", () => {
console.log("We've gone past the context window, and some inputs will be dropped!");
});
Wenn es nicht möglich ist, genügend Tokens aus dem Unterhaltungsverlauf zu entfernen, um den neuen Prompt zu verarbeiten, schlägt der Aufruf von prompt() oder promptStreaming() mit einer QuotaExceededError-Ausnahme fehl und es wird nichts entfernt. Der QuotaExceededError hat die folgenden Eigenschaften:
requested: Anzahl der Tokens, aus denen die Eingabe bestehtcontextWindow: wie viele Tokens verfügbar waren
Weitere Informationen zur Sitzungsverwaltung
Sitzung klonen
Um Ressourcen zu sparen, können Sie eine vorhandene Sitzung mit der Funktion clone() kopieren. Dadurch wird eine Verzweigung der Unterhaltung erstellt, wobei der Kontext und der ursprüngliche Prompt beibehalten werden.
Die Funktion clone() akzeptiert ein optionales Optionsobjekt mit einem signal-Feld, mit dem Sie einen 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,
});
Sitzung beenden
Rufen Sie destroy() auf, um Ressourcen freizugeben, wenn Sie eine Sitzung nicht mehr benötigen. Wenn eine Sitzung gelöscht wird, kann sie nicht mehr verwendet werden und alle laufenden Ausführungen werden abgebrochen. Sie sollten die Sitzung beibehalten, wenn Sie das Modell häufig auffordern 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 Demo-Erweiterung. Der Quellcode der Erweiterung ist auf GitHub verfügbar.
Leistungsstrategie
Die Prompt API für das Web befindet sich noch in der Entwicklung. Während wir diese API entwickeln, finden Sie in unseren Best Practices zur Sitzungsverwaltung Informationen zur optimalen Leistung.
Berechtigungsrichtlinie, iFrames und Web-Worker
Standardmäßig ist die Prompt API nur für Fenster der obersten Ebene und deren iFrames mit demselben Ursprung 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 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 dieser API und aller integrierten KI-APIs entwickeln und implementieren.
- Wenn Sie Feedback zur Implementierung von Chrome geben möchten, können Sie einen Fehlerbericht oder einen Feature Request einreichen.
- Sie können Feedback zur API-Form geben, indem Sie einen vorhandenen Issue kommentieren oder einen neuen im Prompt API-GitHub-Repository erstellen.
- Am Early-Preview-Programm teilnehmen