Chaîne de réflexion en direct dans un chatbot : comment diffuser réellement les appels de l'outil (pas seulement le texte)

DEV - 28/05
La plupart des chatbots LLM « en streaming » diffusent uniquement le texte. Le modèle dit "Je vais chercher ça..." et puis...

La plupart des chatbots LLM « en streaming » diffusent uniquement le texte. Le modèle dit "Je vais chercher ça…" et ensuite vous attendez 6 secondes pendant que les jetons arrivent. La recherche réelle ? Caché. Les 3 éraflures qu'il a faites pour vérifier les faits ? Caché. Vous regardez un indicateur de frappe qui ne vous dit rien sur ce qui prend réellement du temps.

Je viens de créer un chatbot où chaque appel d'outil apparaît comme une étape en temps réel -🔍 moteur_de recherche,📄 scrape_as_markdown,📄 scrape_as_markdown- tandis que la réponse diffuse ensuite jeton par jeton. L'utilisateur voit la chaîne de pensée de l'agent telle qu'elle se produit, et non comme une autopsie.

L’astuce est que vous devez diffuser trois éléments différents et que chaque couche doit savoir quoi faire avec chaque type d’événement. Voici l'architecture.

La forme du ruisseau

L'agent coureur (dans mon cas,fi-coureurencapsulant le SDK Claude Agent) émet des événements de trois types au fur et à mesure qu'ils se produisent :

async pour l'événement dans runner.run_stream(user_message, session_id=sid) : # event["type"] est l'un des : # "tool_call" → event["tool"] est un ToolCall (nom, serveur, is_error, ...) # "text" → event["text"] est un delta (quelques jetons de la réponse) # "result" → event["result"] est le TurnResult final (post-gardes)
Entrer en mode plein écran Quitter le mode plein écran

Trois types car ils signifient visuellement trois choses différentes :

  • appel_outilatterrit AVANT le texte. Le modèle décide d'utiliser un outil et vous souhaitez montrer immédiatement quel outil, quel serveur. C'est "l'étape de la réflexion".
  • texteatterrit pendant que la réponse se génère. Deltas de jetons, effet machine à écrire.
  • résultatatterrit en DERNIER et constitue le texte final faisant autorité — il peut différer du texte concaténétextedeltas car les gardes après virage (anti-dérive, rédaction PHI) peuvent avoir réécrit la réponse.

Ce dernier point est une...
[Courte citation de 8% de l'article original]

Loading...