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 Eingaben an das Sprachmodell und gibt einen ReadableStream zurück, der die Antwort des Modells inkrementell liefert, während sie generiert wird.
Dies ist nützlich, um Antworten an Benutzer schrittweise für Ausgaben anzuzeigen, die lange dauern, oder in jedem Szenario, in dem die wahrgenommene Latenz minimiert werden soll. Der Stream kann mit for await...of konsumiert oder ein Leser über ReadableStream.getReader() angehängt werden.
Syntax
promptStreaming(input)
promptStreaming(input, options)
Parameter
input-
Der Inhalt, mit dem das Modell angesprochen wird. Dies ist entweder:
- Ein String — Abkürzung für eine einzelne textuelle Nachricht.
- Ein Array von Objekten, wobei jedes Objekt eine einzelne Nachricht in einem Gespräch mit einem Sprachmodell darstellt.
Objekte können die folgenden Eigenschaften haben:
role-
Ein String, der die Perspektive angibt, aus der die Nachricht formuliert ist. Muss eine der folgenden sein:
system-
Eine Systemanweisung, die das allgemeine Verhalten des Modells steuert. Dies muss die erste Anweisung sein, die an das Modell übergeben wird.
user-
Eine Nachricht vom Benutzer, auf die die API antworten soll.
assistant-
Eine Eingabe, die dem KI-Assistenten Kontext bietet, wie seine Persona oder das Format seiner Antworten. Solche Nachrichten dienen hauptsächlich dazu, Kontext/Verlauf zu liefern und weiter zu beeinflussen, wie das Modell antwortet.
content-
Ein String, der einen textuellen Prompt darstellt, oder ein Array von Objekten. Jedes Objekt enthält die folgenden Eigenschaften:
type-
Ein enumerierter Wert, der den Typ des Inhalts darstellt. Dies kann einer der folgenden sein:
audio-
Audio-Inhalt.
image-
Bild-Inhalt.
text-
Textueller Inhalt.
tool-call-
Eine vom Modell ausgeführte 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 Boolean, defaultmäßig
false. Wenntrue, wird die Nachricht als Präfix für die nächste vom Modell generierte Antwort behandelt, anstatt als vollständige Wendung.
optionsOptional-
Optionen zum Erstellen eines Prompts. Eigenschaften umfassen:
responseConstraint-
Ein Objekt nach der Struktur, die von JSON Schema definiert ist, das das genaue Format beschreibt, in dem die Ausgabe des Modells geliefert werden soll. Wenn angegeben und
omitResponseConstraintInputfalseist, wird eine beliebig definierte Einschränkungs-Beschreibungsnachricht in das Maß einbezogen. omitResponseConstraintInput-
Ein Boolean; wenn
true, wird die automatische Einschränkungs-Beschreibungsnachricht aus dem Maß ausgeschlossen. signal-
Ein
AbortSignal, um die Operation abzubrechen.
Rückgabewert
Ein ReadableStream von String-Chunks. Jeder Chunk repräsentiert ein Stück der Modellantwort, während sie generiert wird. Der Stream schließt, wenn die Generierung abgeschlossen ist.
Ausnahmen
Fehler treten als Stream-Fehler auf, anstatt als abgelehnte Promises. Konsumierende sollten Fehler mit den standardmäßigen Fehlerbehandlungsmechanismen eines Streams behandeln.
AbortErrorDOMException-
Wird ausgelöst, wenn die Operation über die
signalOption abgebrochen wurde. NotAllowedErrorDOMException-
Wird ausgelöst, wenn die Nutzung der Methode durch eine
language-modelPermissions-Policyblockiert wird. NotSupportedErrorDOMException-
Wird ausgelöst, wenn:
- Der
roleeiner Nachrichtassistantist und ihrtypealles andere alstextist. - Der
typeeiner Nachrichttextist und dervaluekein String ist. - Der Eingabe- oder Ausgabetext in einer Sprache verfasst ist, die der Benutzeragent nicht zum Promten unterstützt.
- Der
typeeiner Nachrichtimageoderaudioist, aber der Typ nicht inexpectedInputsaufgeführt war, oder dervaluekein akzeptierter Datentyp ist.
- Der
OperationErrorDOMException-
Wird ausgelöst, wenn der Prompt aus irgendeinem anderen Grund fehlschlägt, der nicht in den anderen Ausnahmetypen aufgeführt ist.
QuotaExceededErrorDOMException-
Wird ausgelöst, wenn der Prompt dazu führen würde, dass die Nutzung des Sitzungs-Kontexts das
LanguageModel.contextWindowdes Modells überschreitet. SyntaxErrorDOMException-
Wird ausgelöst, wenn:
- Keine Nachrichten im Nachrichten-Array enthalten sind.
- Die
prefix-Eigenschaft einer Nachrichttruegesetzt ist und:- Der
roleder Nachricht nichtassistantist. - Die Nachricht nicht das letzte Element im Nachrichten-Array ist.
- Der
TypeError-
Wird ausgelöst, wenn:
omitResponseConstraintInputtrueist, aberresponseConstraintnicht bereitgestellt wurde.- Der
roleeiner Nachrichtsystemist, es aber nicht die erste Nachricht ist, 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 inkrementell als ReadableStream empfangen.
Um die Antwort als einen kompletten String zu erhalten, verwenden Sie stattdessen LanguageModel.prompt(). Um Inhalte dem 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 abzuzweigen, ohne die ursprüngliche Sitzung zu beeinträchtigen, rufen Sie LanguageModel.clone() auf.
Beispiele
>Eine Antwort auf die Seite streamen
Dieses Beispiel schreibt Chunks aus einem promptStreaming() Aufruf des ReadableStream während ihres Eintreffens aus.
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 Using the Prompt API > Complete streaming example.
Streamen 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 Chunks in einen einzelnen String sammeln
In diesem Beispiel werden Chunks 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> |