Passer au contenu principal
Par défaut, le SDK Agent produit des objets AssistantMessage complets après que Claude ait terminé de générer chaque réponse. Pour recevoir des mises à jour incrémentielles à mesure que le texte et les appels d’outils sont générés, activez la diffusion de messages partiels en définissant include_partial_messages (Python) ou includePartialMessages (TypeScript) sur true dans vos options.
Cette page couvre la diffusion de sortie (réception des jetons en temps réel). Pour les modes d’entrée (comment vous envoyez les messages), consultez Envoyer des messages aux agents. Vous pouvez également diffuser les réponses en utilisant le SDK Agent via la CLI.

Activer la diffusion de sortie

Pour activer la diffusion, définissez include_partial_messages (Python) ou includePartialMessages (TypeScript) sur true dans vos options. Cela fait que le SDK produit des messages StreamEvent contenant les événements API bruts à mesure qu’ils arrivent, en plus des AssistantMessage et ResultMessage habituels. Votre code doit alors :
  1. Vérifier le type de chaque message pour distinguer StreamEvent des autres types de messages
  2. Pour StreamEvent, extraire le champ event et vérifier son type
  3. Rechercher les événements content_block_deltadelta.type est text_delta, qui contiennent les fragments de texte réels
L’exemple ci-dessous active la diffusion et affiche les fragments de texte à mesure qu’ils arrivent. Remarquez les vérifications de type imbriquées : d’abord pour StreamEvent, puis pour content_block_delta, puis pour text_delta :

Référence StreamEvent

Lorsque les messages partiels sont activés, vous recevez les événements de diffusion bruts de l’API Claude enveloppés dans un objet. Le type a des noms différents dans chaque SDK :
  • Python : StreamEvent (importer depuis claude_agent_sdk.types)
  • TypeScript : SDKPartialAssistantMessage avec type: 'stream_event'
Les deux contiennent les événements bruts de l’API Claude, pas le texte accumulé. Vous devez extraire et accumuler les deltas de texte vous-même. Voici la structure de chaque type :
Le champ parent_tool_use_id est toujours None en Python et null en TypeScript. Les événements de diffusion sont émis pour la session principale uniquement ; les deltas au niveau des tokens des sous-agents ne sont pas transmis. Pour attribuer la sortie à un sous-agent, utilisez les messages complets, qui portent parent_tool_use_id. Voir Détecter l’invocation de sous-agent. Le champ event contient l’événement de diffusion brut de l’API Claude. Les types d’événements courants incluent :

Flux de messages

Avec les messages partiels activés, vous recevez les messages dans cet ordre :
Sans les messages partiels activés (include_partial_messages en Python, includePartialMessages en TypeScript), vous recevez tous les types de messages sauf StreamEvent. Les types courants incluent SystemMessage (initialisation de session), AssistantMessage (réponses complètes), ResultMessage (résultat final), et un message de limite compact indiquant quand l’historique de conversation a été compacté (SDKCompactBoundaryMessage en TypeScript ; SystemMessage avec le sous-type "compact_boundary" en Python).

Diffuser les réponses texte

Pour afficher le texte à mesure qu’il est généré, recherchez les événements content_block_deltadelta.type est text_delta. Ceux-ci contiennent les fragments de texte incrémentiels. L’exemple ci-dessous affiche chaque fragment à mesure qu’il arrive :

Diffuser les appels d’outils

Les appels d’outils sont également diffusés de manière incrémentielles. Vous pouvez suivre quand les outils commencent, recevoir leur entrée à mesure qu’elle est générée, et voir quand ils se terminent. L’exemple ci-dessous suit l’outil actuellement appelé et accumule l’entrée JSON à mesure qu’elle est diffusée. Il utilise trois types d’événements :
  • content_block_start : l’outil commence
  • content_block_delta avec input_json_delta : les fragments d’entrée arrivent
  • content_block_stop : l’appel d’outil est complet

Construire une interface utilisateur de diffusion

Cet exemple combine la diffusion de texte et d’outils dans une interface utilisateur cohésive. Il suit si l’agent exécute actuellement un outil (en utilisant un drapeau in_tool) pour afficher des indicateurs de statut comme [Using Read...] pendant que les outils s’exécutent. Le texte se diffuse normalement quand il n’y a pas d’outil, et la fin de l’outil déclenche un message « done ». Ce modèle est utile pour les interfaces de chat qui doivent afficher la progression pendant les tâches d’agent multi-étapes.

Limitations connues

  • Sortie structurée : le résultat JSON n’apparaît que dans le ResultMessage.structured_output final, pas comme des deltas de diffusion. Consultez les sorties structurées pour plus de détails.

Étapes suivantes

Maintenant que vous pouvez diffuser le texte et les appels d’outils en temps réel, explorez ces sujets connexes :