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 des LanguageModel Interfaces sendet Eingaben 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 Antworten schrittweise an Benutzer anzuzeigen, insbesondere bei Ausgaben, die lange dauern, oder in jeder Situation, in der die wahrgenommene Latenz minimiert werden soll. Der Stream kann mit for await...of konsumiert werden oder indem man einen Leser über ReadableStream.getReader() anhängt.
Syntax
promptStreaming(input)
promptStreaming(input, options)
Parameter
input-
Der Inhalt, mit dem das Modell aufgefordert wird. Dies ist entweder:
- Ein String — Kurzform für eine einzelne textuelle Nachricht.
- Ein Array von Objekten, wobei jedes Objekt eine einzelne Nachricht in einem Gespräch mit einem Sprachmodell repräsentiert.
Objekte können die folgenden Eigenschaften haben:
role-
Ein String, der angibt, aus welcher Sicht die Nachricht formuliert ist. Muss eine der folgenden sein:
system-
Eine systemweite Anweisung, die das gesamte Verhalten des Modells anleitet. Dies muss die erste Anweisung sein, die dem Modell übergeben wird.
user-
Eine Nachricht vom Benutzer, auf die die API reagieren soll.
assistant-
Eine Eingabe, die Kontext für den KI-Assistenten bereitstellt, wie seine Persona oder das Format seiner Antworten. Solche Nachrichten dienen hauptsächlich dazu, Kontext/Geschichte bereitzustellen und weiter zu definieren, wie das Modell reagiert.
content-
Ein String, der eine textbasierte Eingabe darstellt, oder ein Array von Objekten. Jedes Objekt enthält die folgenden Eigenschaften:
type-
Ein enumerierter Wert, der den Content-Typ repräsentiert. Dies kann einer der folgenden sein:
audio-
Audio-Inhalt.
image-
Bild-Inhalt.
text-
Textueller Inhalt.
tool-call-
Ein vom Modell ausgeführter Werkzeugaufruf.
tool-response-
Das Ergebnis eines Werkzeugaufrufs.
value-
Der Inhalt der Nachricht. Wenn der
typetextist, ist dies immer ein String. Wenn dertypeaudiooderimageist, kann dervalueeiner von mehreren verschiedenen Objekttypen sein; siehe Welche Datentypen werden akzeptiert?.
prefixOptional-
Ein boolescher Wert, standardmäßig
false. Wenntrue, wird die Nachricht als Präfix für die nächste vom Modell generierte Antwort und nicht als vollständiger Zug behandelt.
optionsOptional-
Optionen zur Erstellung eines Prompts. Eigenschaften umfassen:
responseConstraint-
Ein Objekt gemäß der Struktur, die von JSON Schema definiert wird und das genaue Format angibt, in dem die Ausgabe des Modells geliefert werden soll. Wenn bereitgestellt und
omitResponseConstraintInputfalseist, wird jede implementierungsspezifische Beschreibungsnachricht zur Messung hinzugefügt. omitResponseConstraintInput-
Ein boolescher Wert; Wenn
true, wird die automatische Beschreibungsnachricht von der Messung ausgeschlossen. signal-
Ein
AbortSignal, um den Vorgang abzubrechen.
Rückgabewert
Ein ReadableStream von String-Teilen. Jeder Teil repräsentiert ein Stück der Modellantwort, während sie generiert wird. Der Stream wird geschlossen, wenn die Generierung abgeschlossen ist.
Ausnahmen
Fehler werden als Stream-Fehler und nicht als abgelehnte Promises angezeigt. Verbraucher sollten Fehler mit den Standard-Fehlerbehandlungsmechanismen eines Streams behandeln.
AbortErrorDOMException-
Wird ausgelöst, wenn der Vorgang über die
signal-Option abgebrochen wurde. NotAllowedErrorDOMException-
Wird ausgelöst, wenn die Verwendung der Methode durch eine
language-modelPermissions-Policyblockiert wird. NotSupportedErrorDOMException-
Wird ausgelöst, wenn:
- Die
roleeiner Nachrichtassistantist und ihrtypeetwas anderes alstextist. - Der
typeeiner Nachrichttextist und ihrvaluekein String ist. - Die Eingabe- oder Ausgabetexte in einer Sprache vorliegen, die der Benutzeragent für die Aufforderung nicht unterstützt.
- Der
typeeiner Nachrichtimageoderaudioist, aber der Typ nicht inexpectedInputsaufgelistet war oder dervaluekein akzeptierter Datentyp ist.
- Die
OperationErrorDOMException-
Wird ausgelöst, wenn die Aufforderung aus einem anderen Grund fehlschlägt, der nicht unter den anderen Ausnahmetypen aufgeführt ist.
QuotaExceededErrorDOMException-
Wird ausgelöst, wenn die Aufforderung dazu führen würde, dass die Kontextnutzung der Sitzung das Modell
LanguageModel.contextWindowüberschreitet. SyntaxErrorDOMException-
Wird ausgelöst, wenn:
- Keine Nachrichten im Nachrichtenarray enthalten sind.
- Die
prefix-Eigenschaft einer Nachricht auftruegesetzt ist und:- Die
roleder Nachricht nichtassistantist. - Die Nachricht nicht das letzte Element im Nachrichtenarray ist.
- Die
TypeError-
Wird ausgelöst, wenn:
omitResponseConstraintInputtrueist, aberresponseConstraintnicht bereitgestellt wurde.- Die
roleeiner Nachrichtsystemist, aber nicht die erste Nachricht im Kontext war.
Beschreibung
Die promptStreaming()-Methode fügt das bereitgestellte Eingabematerial zum 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 Inhalt zum Kontextfenster hinzuzufügen, ohne eine Antwort zu generieren, verwenden Sie LanguageModel.append().
Jeder Aufruf von promptStreaming() fügt der Sitzungskontext hinzu. Um von einem gegebenen Zustand aus abzweigen zu können, ohne die ursprüngliche Sitzung zu beeinflussen, verwenden Sie LanguageModel.clone().
Beispiele
>Streaming einer Antwort zur Webseite
Dieses Beispiel schreibt Teile eines promptStreaming()-Aufrufs aus einem ReadableStream, sobald sie ankommen.
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 ein AbortController mit promptStreaming() verwendet wird.
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.");
}
}
Gesammelte gestreamte Teile in einen einzelnen String umwandeln
In diesem Beispiel werden Teile aus einem ReadableStream gesammelt, bevor der gesamte Stream geschrieben 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> |