Messages en Streaming
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).
Streaming avec les SDKs
Nos SDKs Python et TypeScript offrent plusieurs façons de faire du streaming. Le SDK Python permet les flux synchrones et asynchrones. Consultez la documentation de chaque SDK pour plus de détails.
Types d’événements
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 suit le déroulement d’événements suivant :
message_start
: contient un objetMessage
avec uncontent
vide.- Une série de blocs de contenu, chacun ayant un événement
content_block_start
, un ou plusieurs événementscontent_block_delta
, et un événementcontent_block_stop
. Chaque bloc de contenu aura unindex
qui correspond à son index dans le tableau finalcontent
du Message. - Un ou plusieurs événements
message_delta
, indiquant les changements de haut niveau dans l’objetMessage
final. - Un événement final
message_stop
.
Événements Ping
Les flux d’événements peuvent également inclure un nombre quelconque d’événements ping
.
Événements d’erreur
Nous pouvons occasionnellement envoyer des erreurs dans le flux d’événements. Par exemple, pendant les périodes de forte utilisation, vous pouvez recevoir une erreur overloaded_error
, qui correspondrait normalement à un HTTP 529 dans un contexte non-streaming :
Autres événements
Conformément à notre politique de versionnement, nous pouvons ajouter de nouveaux types d’événements, et votre code doit gérer gracieusement les types d’événements inconnus.
Types de delta
Chaque événement content_block_delta
contient un delta
d’un type qui met à jour le bloc content
à un index
donné.
Delta de texte
Un delta de bloc de contenu text
ressemble à :
Delta JSON d’entrée
Les deltas pour les blocs de contenu tool_use
correspondent aux mises à jour du champ input
du bloc. Pour supporter 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înes et analyser le JSON une fois que vous recevez un événement content_block_stop
, en utilisant une bibliothèque comme Pydantic pour faire l’analyse JSON partielle, ou en utilisant nos SDKs, qui fournissent des assistants pour accéder aux valeurs incrémentielles analysées.
Un delta de bloc de contenu tool_use
ressemble à :
Note : Nos modèles actuels ne prennent en charge que l’émission d’une propriété clé et valeur complète de input
à la fois. 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 du json partiel fragmenté afin que le format puisse automatiquement prendre en charge une granularité plus fine dans les futurs modèles.
Réponse HTTP brute en streaming
Nous recommandons fortement d’utiliser nos SDKs client lors de l’utilisation du mode streaming. Cependant, si vous construisez une intégration API directe, vous devrez gérer ces événements vous-même.
Une réponse en streaming est composée de :
- Un événement
message_start
- Potentiellement plusieurs blocs de contenu, chacun contenant :
a. Un événement
content_block_start
b. Potentiellement plusieurs événementscontent_block_delta
c. Un événementcontent_block_stop
- Un événement
message_delta
- Un événement
message_stop
Il peut 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.
Requête de streaming basique
Requête de streaming avec utilisation d’outil
Dans cette requête, nous demandons à Claude d’utiliser un outil pour nous dire la météo.