Veröffentlicht: 20. Mai 2025, zuletzt aktualisiert: 21. Juli 2025
Erklärung | Web | Erweiterungen | Chrome-Status | Absicht |
---|---|---|---|---|
GitHub | Ansicht | Absicht, Tests durchzuführen |
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 in einer Webanwendung oder auf einer Website 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.
Das sind nur einige der Möglichkeiten. Wir sind gespannt, was Sie damit anstellen.
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 der Desktopversion von Chrome. Diese APIs funktionieren nicht auf Mobilgeräten. Die Prompt API, Summarizer API, Writer API und Rewriter API funktionieren in Chrome, wenn die folgenden Bedingungen erfüllt sind:
- Betriebssystem: Windows 10 oder 11; macOS 13+ (Ventura und höher); Linux; oder ChromeOS (ab Plattform 16389.0.0) auf [Chromebook Plus](https://www.google.com/chromebook/chromebookplus/)-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
im Modellstatus. Öffnen Sie den aufgeführten Dateipfad, um die Modellgröße zu ermitteln.
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.
Rufen Sie LanguageModel.availability()
auf, um festzustellen, ob das Modell einsatzbereit ist.
Wenn die Antwort auf availability()
downloadable
war, höre auf den Downloadfortschritt und informiere den Nutzer, da der Download einige Zeit dauern kann.
const availability = await LanguageModel.availability();
Prüfen Sie auf Nutzeraktivierung, um den Download auszulösen und das Sprachmodell zu instanziieren. Rufen Sie dann die asynchrone Funktion LanguageModel.create()
auf.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
Modellparameter
Die params()
-Funktion informiert Sie über die Parameter des Sprachmodells. Das Objekt hat die folgenden Felder:
defaultTopK
: Der Standardwert für Top-K.maxTopK
: Der maximale Top-K-Wert.defaultTemperature
: Die Standard-Temperatur.maxTemperature
: Die maximale Temperatur.
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,
},
]);
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.
Sitzungspersistenz und ‑limits
In jeder Sitzung wird der Kontext der Unterhaltung beibehalten. Vorherige Interaktionen werden bei zukünftigen 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);
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}`);
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 });
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
, über das 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,
});
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,
});
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."
);
Multimodale Funktionen
Im Rahmen des Origin Trials für die Prompt API werden Audio- und Bildeingaben unterstützt. Die API gibt eine Textausgabe zurück.
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.
const session = await LanguageModel.create({
// { type: 'text' } only required when including expected input languages.
expectedInputs: [{ type: 'audio' }, { type: 'image' }],
});
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 an artistic critique of how well the second image matches the first:',
},
{ type: 'image', value: referenceImage },
{ type: 'image', value: userDrawnImage },
],
},
]);
console.log(response1);
const audioBlob = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([
{
role: 'user',
content: [
{ type: 'text', value: 'My response to your critique:' },
{ type: 'audio', value: audioBlob },
],
},
]);
Im Mediarecorder Audio Prompt-Demo sehen Sie, wie Sie die Prompt API mit Audioeingabe verwenden, und im Canvas Image Prompt-Demo, wie Sie die Prompt API mit Bildeingabe verwenden.
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.
- Wenn Sie Feedback zur Implementierung von Chrome geben möchten, melden Sie einen Fehler oder stellen Sie eine Anfrage zu einem Feature.
- Sie können Feedback zur API geben, indem Sie einen Kommentar zu einem vorhandenen Problem hinterlassen oder ein neues Problem im GitHub-Repository der Prompt API erstellen.
- Am Early-Access-Programm teilnehmen