Streaming SSE
Mis à jour le 30 juillet 2026
Recevoir les réponses en temps réel
Par défaut, l’API attend que la réponse complète soit générée avant de la retourner. Avec le streaming, vous recevez les tokens au fur et à mesure de leur génération. Cette technique réduit le temps perçu par l’utilisateur et permet d’afficher les réponses progressivement, exactement comme le fait l’interface Grok.
Comment fonctionne le streaming
Le streaming utilise le protocole Server-Sent Events (SSE). Au lieu d’une seule réponse HTTP, le serveur envoie un flux continu d’événements. Chaque événement contient un fragment de la réponse. Le client les assemble pour reconstituer le texte complet.
Le paramètre stream: true active ce mode sur n’importe quel endpoint de génération.
Streaming en Python avec le SDK OpenAI
from openai import OpenAI
import os
client = OpenAI(
api_key=os.getenv("XAI_API_KEY"),
base_url="https://api.x.ai/v1"
)
stream = client.chat.completions.create(
model="grok-4.5",
messages=[
{"role": "user", "content": "Expliquez les principes SOLID en programmation."}
],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
print() # Saut de ligne final
Explication du code
stream=Trueactive le streaming- La réponse est un itérateur de
chunk(fragments) - Chaque chunk contient un
deltaavec le nouveau contenu end=""empêche les sauts de ligne entre chaque fragmentflush=Trueforce l’affichage immédiat
Streaming avec l’endpoint /v1/responses
stream = client.responses.create(
model="grok-4.5",
input="Décrivez les étapes pour déployer une application web.",
stream=True
)
for event in stream:
if hasattr(event, 'type') and event.type == 'response.output_text.delta':
print(event.delta, end="", flush=True)
print()
L’endpoint /v1/responses utilise des événements typés. Le type response.output_text.delta contient les fragments de texte.
Streaming avec cURL
cURL supporte nativement le streaming SSE. Ajoutez "stream": true au corps de la requête :
curl -N https://api.x.ai/v1/chat/completions \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-4.5",
"messages": [{"role": "user", "content": "Bonjour"}],
"stream": true
}'
L’option -N désactive le buffering de cURL pour afficher les événements dès leur réception.
Chaque ligne du flux SSE commence par data: suivi d’un objet JSON. Le dernier événement est data: [DONE] qui signale la fin de la génération.
Quand utiliser le streaming
Le critère de décision tient en une question : un humain regarde-t-il la réponse arriver ? Si oui — chatbot, assistant, outil de rédaction — le streaming est quasi obligatoire : l’utilisateur voit le texte apparaître mot par mot au lieu de fixer un écran figé, et sur une réponse longue, la différence entre « premier mot en 300 ms » et « tout le texte après 8 secondes » fait toute l’expérience perçue.
Si personne ne regarde, le streaming n’apporte rien et complique le code. Un traitement batch qui remplit une base de données, un pipeline automatisé qui doit parser la réponse complète avant d’agir, ou un appel qui ne retourne que quelques mots : dans tous ces cas, l’appel classique — une requête, une réponse entière — reste plus simple à écrire, à tester et à déboguer.
Gestion d’erreurs en streaming
En mode streaming, les erreurs peuvent survenir au milieu du flux. Votre code doit gérer ces interruptions :
try:
stream = client.chat.completions.create(
model="grok-4.5",
messages=[{"role": "user", "content": "Test"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
except Exception as e:
print(f"\nErreur pendant le streaming : {e}")
Points clés à retenir
- Ajoutez
stream=Truepour recevoir les tokens au fur et à mesure - Le protocole utilisé est SSE (Server-Sent Events)
- En Python, itérez sur les chunks et affichez
delta.content - Avec cURL, utilisez
-Npour désactiver le buffering - Réservez le streaming aux cas où l’affichage progressif apporte de la valeur