Lors de la création d’un Message, vous pouvez définir "stream": true pour diffuser la réponse de manière incrémentielle en utilisant les événements envoyés par le serveur (SSE).
Nos SDK Python et TypeScript offrent plusieurs façons de gérer le streaming. Le SDK Python permet des flux synchrones et asynchrones. Consultez la documentation de chaque SDK pour plus de détails.
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)
Chaque événement envoyé par le serveur inclut un type d’événement nommé et des données JSON associées. Chaque événement utilisera un nom d’événement SSE (par exemple event: message_stop), et inclura le type d’événement correspondant dans ses données.
Chaque flux utilise le déroulement d’événements suivant :
message_start : contient un objet Message avec un content vide.
Une série de blocs de contenu, chacun ayant un événement content_block_start, un ou plusieurs événements content_block_delta, et un événement content_block_stop. Chaque bloc de contenu aura un index qui correspond à son index dans le tableau final content du Message.
Un ou plusieurs événements message_delta, indiquant des changements de haut niveau dans l’objet Message final.
Un événement final message_stop.
Les comptages de tokens affichés dans le champ usage de l’événement message_delta sont cumulatifs.
Nous pouvons occasionnellement envoyer des erreurs dans le flux d’événements. Par exemple, pendant les périodes de forte utilisation, vous pourriez recevoir une erreur overloaded_error, qui correspondrait normalement à un HTTP 529 dans un contexte sans streaming :
Conformément à notre politique de versionnement, nous pouvons ajouter de nouveaux types d’événements, et votre code devrait gérer gracieusement les types d’événements inconnus.
Les deltas pour les blocs de contenu tool_use correspondent aux mises à jour du champ input du bloc. Pour prendre en charge une granularité maximale, les deltas sont des chaînes JSON partielles, alors que l’input final de tool_use est toujours un objet.
Vous pouvez accumuler les deltas de chaîne et analyser le JSON une fois que vous recevez un événement content_block_stop, en utilisant une bibliothèque comme Pydantic pour effectuer une analyse JSON partielle, ou en utilisant nos SDK, qui fournissent des assistants pour accéder aux valeurs incrémentielles analysées.
Un delta de bloc de contenu tool_use ressemble à :
Remarque : Nos modèles actuels ne prennent en charge que l’émission d’une propriété complète de clé et de valeur à la fois à partir de input. Ainsi, lors de l’utilisation d’outils, il peut y avoir des délais entre les événements de streaming pendant que le modèle travaille. Une fois qu’une clé et une valeur input sont accumulées, nous les émettons sous forme de plusieurs événements content_block_delta avec des json partiels fragmentés afin que le format puisse automatiquement prendre en charge une granularité plus fine dans les futurs modèles.
Lorsque vous utilisez la réflexion étendue avec le streaming activé, vous recevrez du contenu de réflexion via des événements thinking_delta. Ces deltas correspondent au champ thinking des blocs de contenu thinking.
Pour le contenu de réflexion, un événement spécial signature_delta est envoyé juste avant l’événement content_block_stop. Cette signature est utilisée pour vérifier l’intégrité du bloc de réflexion.
Un delta de réflexion typique ressemble à :
Delta de réflexion
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"}}
Nous recommandons fortement d’utiliser nos SDK clients lorsque vous utilisez le mode streaming. Cependant, si vous construisez une intégration API directe, vous devrez gérer ces événements vous-même.
Une réponse de flux est composée de :
Un événement message_start
Potentiellement plusieurs blocs de contenu, chacun contenant :
Un événement content_block_start
Potentiellement plusieurs événements content_block_delta
Un événement content_block_stop
Un événement message_delta
Un événement message_stop
Il peut également y avoir des événements ping dispersés tout au long de la réponse. Voir Types d’événements pour plus de détails sur le format.
Dans cette requête, nous demandons à Claude d’utiliser un outil pour nous indiquer la météo.
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}'
Requête de streaming avec utilisation de l’outil de recherche web
Réponse
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"}