Unsere Python und TypeScript SDKs bieten mehrere Möglichkeiten zum Streaming. Das Python SDK ermöglicht sowohl synchrone als auch asynchrone Streams. Weitere Details finden Sie in der Dokumentation der jeweiligen SDKs.
import anthropicclient = anthropic.Anthropic()with client.messages.stream( max_tokens=1024, messages=[{"role":"user","content":"Hello"}], model="claude-opus-4-20250514",)as stream:for text in stream.text_stream:print(text, end="", flush=True)
Jedes Server-Sent Event enthält einen benannten Event-Typ und zugehörige JSON-Daten. Jedes Event verwendet einen SSE-Event-Namen (z.B. event: message_stop) und enthält den passenden Event-type in seinen Daten.
Jeder Stream verwendet den folgenden Event-Ablauf:
message_start: enthält ein Message-Objekt mit leerem content.
Eine Reihe von Inhaltsblöcken, von denen jeder ein content_block_start, ein oder mehrere content_block_delta-Events und ein content_block_stop-Event hat. Jeder Inhaltsblock hat einen index, der seinem Index im endgültigen Message content-Array entspricht.
Ein oder mehrere message_delta-Events, die Änderungen auf oberster Ebene am endgültigen Message-Objekt anzeigen.
Ein abschließendes message_stop-Event.
Die in den usage-Feldern des message_delta-Events angezeigten Token-Zählungen sind kumulativ.
Gelegentlich können wir Fehler im Event-Stream senden. Zum Beispiel können Sie während Zeiten hoher Auslastung einen overloaded_error erhalten, der normalerweise einem HTTP 529 in einem Nicht-Streaming-Kontext entsprechen würde:
Gemäß unserer Versionierungsrichtlinie können wir neue Event-Typen hinzufügen, und Ihr Code sollte unbekannte Event-Typen problemlos verarbeiten können.
Die Deltas für tool_use-Content-Blöcke entsprechen Aktualisierungen für das input-Feld des Blocks. Um maximale Granularität zu unterstützen, sind die Deltas partielle JSON-Strings, während das endgültige tool_use.input immer ein Objekt ist.
Sie können die String-Deltas akkumulieren und das JSON parsen, sobald Sie ein content_block_stop-Event erhalten, indem Sie eine Bibliothek wie Pydantic für partielles JSON-Parsing verwenden oder unsere SDKs, die Hilfsfunktionen für den Zugriff auf geparste inkrementelle Werte bieten.
Ein tool_use-Content-Block-Delta sieht wie folgt aus:
Hinweis: Unsere aktuellen Modelle unterstützen nur die Ausgabe einer vollständigen Schlüssel- und Werteigenschaft von input auf einmal. Daher kann es bei der Verwendung von Tools zu Verzögerungen zwischen Streaming-Events kommen, während das Modell arbeitet. Sobald ein input-Schlüssel und -Wert akkumuliert sind, geben wir sie als mehrere content_block_delta-Events mit gestückeltem Partial-JSON aus, sodass das Format automatisch eine feinere Granularität in zukünftigen Modellen unterstützen kann.
Bei Verwendung von erweitertem Denken mit aktiviertem Streaming erhalten Sie Denkinhalte über thinking_delta-Events. Diese Deltas entsprechen dem thinking-Feld der thinking-Content-Blöcke.
Für Denkinhalte wird ein spezielles signature_delta-Event kurz vor dem content_block_stop-Event gesendet. Diese Signatur wird verwendet, um die Integrität des Denkblocks zu überprüfen.
Ein typisches Thinking-Delta sieht wie folgt aus:
Thinking-Delta
event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"Let me solve this step by step:\n\n1. First break down 27 * 453"}}
Wir empfehlen dringend, unsere Client-SDKs zu verwenden, wenn Sie den Streaming-Modus nutzen. Wenn Sie jedoch eine direkte API-Integration erstellen, müssen Sie diese Events selbst verarbeiten.
Eine Stream-Antwort besteht aus:
Einem message_start-Event
Möglicherweise mehreren Inhaltsblöcken, von denen jeder enthält:
Ein content_block_start-Event
Möglicherweise mehrere content_block_delta-Events
Ein content_block_stop-Event
Einem message_delta-Event
Einem message_stop-Event
Es können auch ping-Events über die gesamte Antwort verteilt sein. Weitere Details zum Format finden Sie unter Event-Typen.
In dieser Anfrage bitten wir Claude, ein Tool zu verwenden, um uns das Wetter mitzuteilen.
Shell
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-20250514","max_tokens":1024,"tools":[{"name":"get_weather","description":"Get the current weather in a given location","input_schema":{"type":"object","properties":{"location":{"type":"string","description":"The city and state, e.g. San Francisco, CA"}},"required":["location"]}}],"tool_choice":{"type":"any"},"messages":[{"role":"user","content":"What is the weather like in San Francisco?"}],"stream":true}'
event: message_startdata:{"type":"message_start","message":{"id":"msg_01G...","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":2679,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":3}}}event: content_block_startdata:{"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I'll check"}}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" the current weather in New York City for you"}}event: pingdata:{"type":"ping"}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"."}}event: content_block_stopdata:{"type":"content_block_stop","index":0}event: content_block_startdata:{"type":"content_block_start","index":1,"content_block":{"type":"server_tool_use","id":"srvtoolu_014hJH82Qum7Td6UV8gDXThB","name":"web_search","input":{}}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"query"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"\":"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":" \"weather"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":" NY"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"C to"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"day\"}"}}event: content_block_stopdata:{"type":"content_block_stop","index":1}event: content_block_startdata:{"type":"content_block_start","index":2,"content_block":{"type":"web_search_tool_result","tool_use_id":"srvtoolu_014hJH82Qum7Td6UV8gDXThB","content":[{"type":"web_search_result","title":"Weather in New York City in May 2025 (New York) - detailed Weather Forecast for a month","url":"https://world-weather.info/forecast/usa/new_york/may-2025/","encrypted_content":"Ev0DCioIAxgCIiQ3NmU4ZmI4OC1k...","page_age":null},...]}}event: content_block_stopdata:{"type":"content_block_stop","index":2}event: content_block_startdata:{"type":"content_block_start","index":3,"content_block":{"type":"text","text":""}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":"Here's the current weather information for New York"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":" City:\n\n# Weather"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":" in New York City"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":"\n\n"}}...event: content_block_stopdata:{"type":"content_block_stop","index":17}event: message_deltadata:{"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":10682,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":510,"server_tool_use":{"web_search_requests":1}}}event: message_stopdata:{"type":"message_stop"}