LanguageModel: promptStreaming()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die promptStreaming()-Methode der LanguageModel-Schnittstelle sendet eine Eingabe an das Sprachmodell und gibt einen ReadableStream zurück, der die Antwort des Modells schrittweise liefert, während sie generiert wird.
Dies ist nützlich, um Benutzern Antworten schrittweise anzuzeigen, deren Generierung lange dauert, oder wenn die wahrgenommene Wartezeit möglichst gering sein soll. Verarbeiten Sie den Stream mit for await...of oder binden Sie über ReadableStream.getReader() einen Reader ein.
Syntax
promptStreaming(input)
promptStreaming(input, options)
Parameter
input-
Der Inhalt, der dem Modell als Prompt übergeben wird. Dies ist entweder:
- Ein String – Kurzform für eine einzelne Textnachricht.
- Ein Array von Objekten, die jeweils eine einzelne Nachricht in einer Unterhaltung mit einem Sprachmodell darstellen.
Die Objekte können folgende Eigenschaften haben:
role-
Ein String, der angibt, aus welcher Perspektive die Nachricht formuliert ist. Muss einer der folgenden Werte sein:
system-
Eine Anweisung auf Systemebene, die das allgemeine Verhalten des Modells steuert. Dies muss die erste Anweisung sein, die an das Modell übergeben wird.
user-
Eine Nachricht des Benutzers, auf die die API antworten soll.
assistant-
Eine Eingabe, die dem KI-Assistenten Kontext gibt, etwa zu seiner Persona oder zum Format seiner Antworten. Solche Nachrichten dienen hauptsächlich dazu, Kontext oder Verlauf bereitzustellen und die Antworten des Modells weiter zu beeinflussen.
content-
Ein String, der einen textuellen Prompt darstellt, oder ein Array von Objekten. Jedes Objekt enthält folgende Eigenschaften:
type-
Ein Aufzählungswert, der die Art des Inhalts angibt. Dies kann einer der folgenden Werte sein:
audio-
Audioinhalt.
image-
Bildinhalt.
text-
Textinhalt.
tool-call-
Ein vom Modell ausgelöster Tool-Aufruf.
tool-response-
Das Ergebnis eines Tool-Aufrufs.
value-
Der Inhalt der Nachricht. Wenn
typeden Werttexthat, ist dies immer ein String. Wenntypeden Wertaudiooderimagehat, kannvalueeinem von mehreren verschiedenen Objekttypen entsprechen; siehe Welche Datentypen werden akzeptiert?.
prefixOptional-
Ein boolescher Wert, standardmäßig
false. Beitruewird die Nachricht als Präfix für die nächste generierte Antwort des Modells behandelt statt als vollständiger Gesprächsbeitrag.
optionsOptional-
Optionen für die Erstellung eines Prompts. Zu den Eigenschaften gehören:
responseConstraint-
Ein Objekt gemäß der durch JSON Schema definierten Struktur, das das genaue Format der Modellausgabe festlegt. Wenn es angegeben ist und
omitResponseConstraintInputden Wertfalsehat, wird jede implementierungsspezifische Nachricht zur Beschreibung der Formatvorgabe in die Messung einbezogen. omitResponseConstraintInput-
Ein boolescher Wert; bei
truewird die automatisch erzeugte Nachricht zur Beschreibung der Formatvorgabe von der Messung ausgeschlossen. signal-
Ein
AbortSignal, um den Vorgang abzubrechen.
Rückgabewert
Ein ReadableStream aus String-Fragmenten. Jedes Fragment stellt einen Teil der Antwort des Modells dar, während sie generiert wird. Der Stream wird geschlossen, wenn die Generierung abgeschlossen ist.
Ausnahmen
Fehler werden als Stream-Fehler ausgegeben, nicht als abgelehnte Promises. Verarbeiten Sie Fehler mit den üblichen Fehlerbehandlungsmechanismen eines Streams.
AbortErrorDOMException-
Wird ausgelöst, wenn der Vorgang über die Option
signalabgebrochen wurde. NotAllowedErrorDOMException-
Wird ausgelöst, wenn die Verwendung der Methode durch eine
language-model-Permissions-Policyblockiert wird. NotSupportedErrorDOMException-
Wird ausgelöst, wenn:
roleeiner Nachricht den Wertassistanthat und ihrtypeeinen anderen Wert alstexthat.typeeiner Nachricht den Werttexthat und ihrvaluekein String ist.- Der Eingabe- oder Ausgabetext in einer Sprache verfasst ist, die der User Agent für Prompts nicht unterstützt.
typeeiner Nachricht den Wertimageoderaudiohat, dieser Typ aber nicht inexpectedInputsaufgeführt wurde odervaluekeinem akzeptierten Datentyp entspricht.
OperationErrorDOMException-
Wird ausgelöst, wenn der Prompt aus einem anderen Grund fehlschlägt, der nicht unter den übrigen Ausnahmetypen aufgeführt ist.
QuotaExceededErrorDOMException-
Wird ausgelöst, wenn der Prompt dazu führen würde, dass die Kontextnutzung der Sitzung das
LanguageModel.contextWindowdes Modells überschreitet. SyntaxErrorDOMException-
Wird ausgelöst, wenn:
- Das Nachrichten-Array keine Nachrichten enthält.
- Die Eigenschaft
prefixeiner Nachricht auftruegesetzt ist und:roleder Nachricht nichtassistantist.- Die Nachricht nicht das letzte Element im Nachrichten-Array ist.
TypeError-
Wird ausgelöst, wenn:
omitResponseConstraintInputden Werttruehat, aberresponseConstraintnicht angegeben wurde.roleeiner Nachricht den Wertsystemhat, sie aber nicht die erste Nachricht war, die an den Kontext übergeben wurde.
Beschreibung
Die promptStreaming()-Methode fügt die bereitgestellte Eingabe dem Kontextfenster hinzu und generiert eine Antwort. Die gesamte Antwort wird schrittweise als ReadableStream empfangen.
Um die Antwort als einen vollständigen String zu erhalten, verwenden Sie stattdessen LanguageModel.prompt(). Um dem Kontextfenster Inhalt hinzuzufügen, ohne eine Antwort zu generieren, verwenden Sie LanguageModel.append().
Jeder Aufruf von promptStreaming() erweitert den Kontext der Sitzung. Um von einem bestimmten Zustand aus einen separaten Zweig zu erstellen, ohne die ursprüngliche Sitzung zu beeinflussen, rufen Sie LanguageModel.clone() auf.
Beispiele
>Eine Antwort schrittweise auf der Seite ausgeben
Dieses Beispiel gibt Fragmente aus dem ReadableStream eines promptStreaming()-Aufrufs aus, sobald sie eintreffen.
const session = await LanguageModel.create();
const output = document.querySelector("#output");
const stream = session.promptStreaming("Write a short poem about the ocean.");
for await (const chunk of stream) {
output.textContent += chunk;
}
Siehe auch Verwendung der Prompt API > Vollständiges Streaming-Beispiel.
Streaming mit einem Abbruchsignal
Dieses Beispiel zeigt, wie Sie einen AbortController mit promptStreaming() verwenden.
const controller = new AbortController();
document
.querySelector("#stop")
.addEventListener("click", () => controller.abort());
const stream = session.promptStreaming("Tell me a long story.", {
signal: controller.signal,
});
try {
for await (const chunk of stream) {
output.textContent += chunk;
}
} catch (err) {
if (err.name === "AbortError") {
console.log("Streaming was stopped by the user.");
}
}
Gestreamte Fragmente zu einem einzelnen String zusammenfügen
In diesem Beispiel werden Fragmente aus einem ReadableStream gesammelt, bevor der gesamte Stream ausgegeben wird.
const session = await LanguageModel.create();
const stream = session.promptStreaming("Explain quantum entanglement.");
const chunks = [];
for await (const chunk of stream) {
chunks.push(chunk);
}
const fullResponse = chunks.join("");
console.log(fullResponse);
Spezifikationen
| Spezifikation |
|---|
| Prompt API> # dom-languagemodel-promptstreaming> |