Streaming & Konversationen über mehrere Runden
- Antworten Token für Token streamen, damit Nutzer die Ausgabe sofort sehen
- Verstehen, warum die API zustandslos ist und wie du den Konversationsverlauf selbst mitführst
- Eine Konversation über mehrere Runden fortsetzen, indem du den vollständigen vorherigen Austausch erneut sendest
- Verhindern, dass lange Konversationen das Kontextfenster und die Kosten sprengen
Chat-ähnliche Erlebnisse auf der API zu bauen, läuft auf zwei praktische Realitäten hinaus: streame, damit Nutzer die Ausgabe sofort sehen, und verwalte den Verlauf selbst, weil die API zustandslos ist. Beherrsche beides, und deine Chat-UX fühlt sich schnell an und merkt sich alles.
Streaming
Ohne Streaming wartet der Nutzer auf die gesamte Antwort. Mit Streaming treffen die Token ein, sobald sie generiert werden — eine weitaus bessere wahrgenommene Geschwindigkeit.
- Nutze den Streaming-Helfer des SDK, anstatt rohe Events von Hand zu parsen — er verwaltet den Event-Lebenszyklus für dich.
- Python
- TypeScript
with client.messages.stream(
model="claude-sonnet-5", max_tokens=1024,
messages=[{"role": "user", "content": "Explain RAG in two sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
const stream = client.messages.stream({
model: "claude-sonnet-5", max_tokens: 1024,
messages: [{ role: "user", content: "Explain RAG in two sentences." }],
});
for await (const event of stream) {
if (event.type === "content_block_delta") process.stdout.write(event.delta.text ?? "");
}
Mehrere Runden: du führst den Verlauf
Die API hat kein Gedächtnis zwischen Aufrufen (warum). Um eine Konversation fortzusetzen, sende jedes Mal den gesamten vorherigen Austausch zurück.
Guided walkthrough1 of 4
- Sende die erste Nutzernachricht in der messages-Liste.
- Lies den Antworttext des Assistenten aus dem Ergebnis aus.
- Füge die Assistentenantwort und die nächste Nutzernachricht derselben messages-Liste hinzu.
- Sende die komplette messages-Liste erneut — so 'erinnert' sich Claude an den Austausch.
messages = [{"role": "user", "content": "Hi, I'm planning a trip."}]
# ... get assistant reply, then append both turns:
messages.append({"role": "assistant", "content": assistant_text})
messages.append({"role": "user", "content": "Make it 3 days."})
# send the full `messages` list again
Lange Konversationen füllen das Fenster
Während der Verlauf wächst, frisst er das Kontextfenster und die Kosten steigen. Strategien, um das im Griff zu behalten:
- Fasse zusammen/komprimiere ältere Runden zu einer kurzen Rekapitulation, die du mitführst.
- Kürze irrelevante frühere Runden.
- Kombiniere mit Prompt-Caching, um nicht erneut für einen stabilen Präfix zu zahlen.
- Jeder Aufruf sendet den gesamten Verlauf erneut — lange Konversationen kosten mehr und können das Kontextfenster irgendwann überschreiten, wenn du nie komprimierst oder kürzt.
- Streame Token für schnelle wahrgenommene Geschwindigkeit; der SDK-Helfer kümmert sich um den Event-Lebenszyklus.
- Die API ist zustandslos — sie hat kein Gedächtnis zwischen Aufrufen.
- Setze eine Konversation fort, indem du jede Runde anhängst und die vollständige messages-Liste erneut sendest.
- Komprimiere, kürze und cache, um Kosten und Größe langer Konversationen zu steuern.