Aller au contenu
Cercle IA Tech · API Un site du réseau Cercle IA Tech

Guide

Streaming d'une API d'IA : afficher la réponse en direct

Activer le streaming (SSE) sur l'API Claude, lire les événements dans l'ordre, gérer les erreurs en cours de flux : ce que dit la documentation officielle.

Mis à jour le

Le streaming consiste à recevoir la réponse du modèle morceau par morceau, au fur et à mesure qu'il l'écrit, au lieu d'attendre la réponse complète. Sur l'API Claude, il s'active avec "stream": true dans la requête ; la réponse arrive alors sous forme d'événements SSE (Server-Sent Events, un format standard du web pour envoyer des événements d'un serveur vers un client). Deux bénéfices : l'utilisateur voit le texte s'afficher sans attendre, et les longues réponses ne risquent plus d'être coupées par une connexion restée muette. Ce qui suit vient de la documentation d'Anthropic lue le 15/11/2026.

Pourquoi activer le streaming

  • Le confort de lecture : dans une interface de discussion, afficher les premiers mots tout de suite change la perception de la vitesse.
  • La robustesse : la documentation d'Anthropic recommande le streaming, ou le traitement par lots, pour les requêtes longues, surtout au-delà de 10 minutes. Certains réseaux coupent les connexions inactives ; un flux d'événements les garde actives. La bibliothèque officielle vérifie d'ailleurs qu'un appel classique (sans streaming) ne risque pas de dépasser 10 minutes.

Côté facture, rien ne change : les pages tarifs relevées le 15/11/2026 ne prévoient aucun prix propre au streaming, vous payez les mêmes jetons d'entrée et de sortie.

Le déroulé d'un flux

Chaque événement porte un nom (par exemple event: message_stop) et des données JSON. L'ordre est toujours le même :

  1. message_start : un message vide, qui annonce la réponse ;
  2. pour chaque bloc de contenu : content_block_start, puis une série de content_block_delta, puis content_block_stop ;
  3. un ou plusieurs message_delta : les changements au niveau du message, dont la consommation (usage) ;
  4. message_stop : la fin.

Des événements ping peuvent s'intercaler à tout moment ; ignorez-les. Le texte arrive dans les content_block_delta de type text_delta :

event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "Hello"}}

Attention à un détail qui fausse les tableaux de bord : les compteurs de jetons du champ usage dans message_delta sont cumulés, pas incrémentaux.

En Python, sans gérer les événements à la main

La bibliothèque officielle fournit un assistant qui assemble le flux :

import anthropic

client = anthropic.Anthropic()

with client.messages.stream(
    model="claude-opus-5-5",
    messages=[{"role": "user", "content": "Hello"}],
    max_tokens=256,
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

Si vous voulez seulement éviter les coupures sur une longue réponse, sans afficher au fil de l'eau, stream.get_final_message() rend l'objet message complet, identique à celui d'un appel classique.

Les erreurs en cours de flux

Une réponse en streaming peut commencer par un statut HTTP 200 puis contenir une erreur plus loin. La documentation donne l'exemple d'une surcharge :

event: error
data: {"type": "error", "error": {"type": "overloaded_error", "message": "Overloaded"}}

Hors streaming, cette situation correspondrait à une erreur HTTP 529. Votre code doit donc écouter l'événement error et prévoir une reprise, sans considérer le statut 200 comme une garantie.

Côté interface : le relais par votre serveur

Le navigateur ne doit jamais appeler l'API directement avec votre clé (voir protéger sa clé API). Le schéma courant : votre serveur ouvre le flux vers l'API, puis le relaie au navigateur, par exemple lui aussi en SSE. Prévoyez :

  • un délai maximal côté serveur, pour ne pas garder une connexion ouverte indéfiniment ;
  • l'arrêt de l'appel à l'API quand l'utilisateur ferme la page, pour ne pas payer une réponse que personne ne lira ;
  • l'enregistrement de la consommation finale (dernier message_delta) pour le suivi des coûts.

Et chez les autres éditeurs ?

Les couches compatibles OpenAI d'Anthropic et de Google prennent en charge le streaming : la documentation d'Anthropic indique stream et stream_options comme « entièrement pris en charge », celle de Google liste le streaming parmi les fonctions disponibles. Voir API compatible OpenAI.

Le streaming n'est pas accepté dans un traitement par lots : les résultats d'un lot reviennent dans un fichier, pas dans un flux.

Questions fréquentes

Le streaming coûte-t-il plus cher ?

Les pages tarifs relevées le 15/11/2026 ne prévoient pas de prix spécifique au streaming : vous payez les mêmes jetons d'entrée et de sortie. Le streaming n'est en revanche pas accepté dans un traitement par lots chez Claude.

Une erreur peut-elle arriver après une réponse 200 ?

Oui. En streaming, l'API peut envoyer un événement error en cours de flux, par exemple overloaded_error, alors que la réponse HTTP a commencé par un statut 200. Votre code doit le traiter.

Sources

Pages consultées pour écrire cet article :

  1. https://platform.claude.com/docs/en/build-with-claude/streaming
  2. https://platform.claude.com/docs/en/api/errors
  3. https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk
  4. https://aistudio.google.com/docs/openai

À lire aussi