Aller au contenu principal

Streaming

Quand vous construisez des interfaces de chat, les utilisateurs s’attendent a voir les reponses apparaitre immediatement plutot qu’attendre 10 a 30 secondes pour une reponse complete. La fonction converse_stream resout ce probleme en envoyant le texte au fur et a mesure de sa generation.

Comment fonctionne le streaming

Au lieu d’attendre la generation complete de la reponse, le streaming renvoie des morceaux de texte des qu’ils sont disponibles. Quand vous appelez converse_stream, vous recevez immediatement un objet de flux (stream) qui produit des evenements a mesure que le modele genere du texte.

Implementation de base

messages = []
add_user_message(messages, "Ecrivez une phrase decrivant une base de donnees fictive")
response = client.converse_stream(messages=messages, modelId=model_id)

for event in response["stream"]:
    print(event)

Ce code affiche tous les evenements au fur et a mesure de leur arrivee.

Types d’evenements du flux

Le flux produit plusieurs types d’evenements dans un ordre previsible :

  1. messageStart : debut du message
  2. Plusieurs contentBlockDelta : les morceaux de texte genere
  3. contentBlockStop : fin du bloc de contenu
  4. messageStop : fin du message
  5. metadata : informations sur la generation

Pour la generation de texte basique, seuls les evenements contentBlockDelta vous interessent : ils contiennent les morceaux de texte a afficher.

Extraire le texte

Pour recuperer uniquement le texte genere :

text = ""
for event in response["stream"]:
    if "contentBlockDelta" in event:
        chunk = event["contentBlockDelta"]["delta"]["text"]
        print(chunk, end="")
        text += chunk

print("\n\nMessage complet :\n" + text)

Le parametre end="" supprime le saut de ligne automatique de print, ce qui fait apparaitre le texte de facon fluide.

Applications pratiques

Dans une vraie application, au lieu d’afficher chaque morceau, vous :

  • Envoyez chaque chunk au frontend via WebSockets ou Server-Sent Events
  • Mettez a jour l’interface en temps reel
  • Stockez le message complet une fois le streaming termine
  • Gerez les erreurs potentielles pendant le streaming

Le streaming transforme l’experience utilisateur : au lieu de “soumettre et attendre”, c’est “soumettre et voir la reponse apparaitre progressivement”.