- Streaming d’Exécution d’Outil : Pour surveiller les tâches d’outils de longue durée.
- Streaming de Session d’Agent : Pour recevoir des réponses de chat en temps réel des agents.
Streaming d’Exécution d’Outil
Ce guide montre comment se connecter au flux d’événements d’un outil en utilisant les Server-Sent Events (SSE). Il suppose que vous avez déjà lancé une exécution d’outil comme indiqué dans le guide Exécuter Votre Premier Outil.Exécuter un Outil et Obtenir l'URL de Streaming
Tout d’abord, exécutez un outil comme vous le feriez normalement. La réponse initiale Copiez la
202 Accepted contiendra une stream_url. C’est l’endpoint que nous utiliserons pour recevoir les événements en direct.Réponse
stream_url pour l’étape suivante.Se Connecter au Flux d'Événements
Maintenant, vous pouvez vous connecter à la
stream_url en utilisant n’importe quel client compatible SSE. La connexion restera ouverte, et le serveur enverra les événements au fur et à mesure qu’ils se produisent.Dans l’exemple JavaScript
EventSource, nous passons la clé API comme paramètre de requête. Notre serveur est configuré pour accepter la clé API soit via l’en-tête X-API-KEY, soit via un paramètre de requête nommé api_key pour les connexions SSE, car EventSource ne prend pas en charge les en-têtes personnalisés.Comprendre les Événements
Au fur et à mesure que l’outil s’exécute, vous recevrez une série d’objets JSON. Chaque objet contient un
Utilisé pour les mises à jour générales de progression ou les changements de données structurées.
Utilisé pour le contenu en streaming (par exemple, génération de texte, téléchargements partiels d’images).
Envoyé lorsqu’un outil interactif met en pause l’exécution pour attendre une entrée de l’utilisateur.
L’événement final d’une exécution réussie. Les données contiennent les sorties directes de l’outil.
Indique qu’une erreur est survenue pendant l’exécution.Logique de réassemblage (Côté Client) :
event_type et une charge utile data. Voici les types d’événements détaillés et leurs structures :tool_update
Utilisé pour les mises à jour générales de progression ou les changements de données structurées.tool_partial_update
Utilisé pour le contenu en streaming (par exemple, génération de texte, téléchargements partiels d’images).tool_input_required
Envoyé lorsqu’un outil interactif met en pause l’exécution pour attendre une entrée de l’utilisateur.tool_end
L’événement final d’une exécution réussie. Les données contiennent les sorties directes de l’outil.Pour des raisons de compatibilité ou selon la méthode d’exécution, cet événement peut parfois apparaître sous le nom
final_result. Il doit être traité de la même manière que tool_end.error
Indique qu’une erreur est survenue pendant l’exécution.Gestion des Événements Larges (Chunking)
Pour les événements qui dépassent la limite de taille (par exemple, de grandes images encodées en base64 ou de longs textes), l’API utilise un mécanisme de “chunking”. Ces événements sont divisés en plusieurs parties avec le suffixe_delta_sse ajouté au nom de l’événement d’origine.Par exemple, si un événement tool_update est trop volumineux, vous recevrez une série d’événements tool_update_delta_sse.Structure d’un événement chunké :- Détectez si le nom de l’événement se termine par
_delta_sse. - Stockez les
chunk_datadans un buffer, ordonnés parchunk_index. - Lorsque
is_last_chunkesttrue, concaténez tous les fragments dechunk_data. - Analysez la chaîne concaténée comme du JSON.
- Traitez l’objet résultant comme s’il s’agissait de l’événement
original_event_type.
Exemple de Flux d’Événements
Intégrer les Événements d’Outils dans l’Interface de Chat
Lorsque vous construisez une interface de chat personnalisée, vous devez souvent combiner l’historique permanent de la conversation (texte) avec les mises à jour transitoires en temps réel (événements). Cela garantit que votre interface utilisateur est à la fois réactive pendant l’exécution et précise lors du rechargement de l’historique.La Stratégie à Double Flux
- Flux de Texte (
response_chunk) : Contient la “source de vérité” de la conversation. Il inclut des délimiteurs qui marquent où un outil a été appelé et quel a été le résultat final. - Flux d’Événements (
tool_update,tool_partial_update) : Contient les mises à jour de statut en temps réel, les journaux et les indicateurs de progression qui doivent être affichés pendant l’exécution de l’outil.
Logique d’Implémentation
Pour construire une interface utilisateur riche comme celle d’Ubik, suivez ce modèle :- Détecter le Début : Lorsque vous analysez
<<TOOL_STEP_START/nom_outil:id_exec>>dans le flux de texte, créez un Conteneur d’Outil dans votre interface. Marquez-le comme “Chargement” ou “En cours”. - Mises à jour en Direct : Écoutez les événements SSE. Si vous recevez un
tool_updateoutool_partial_updateoùtool_execution_idcorrespond àid_exec, mettez à jour le contenu de votre Conteneur d’Outil (par exemple, affichez “Recherche sur le web…”, mettez à jour une barre de progression ou diffusez des journaux). - Détecter la Fin : Lorsque vous analysez
<<TOOL_STEP_RESULT_START>>…<<TOOL_STEP_RESULT_END>>dans le flux de texte, vous avez la sortie finale et permanente. Vous pouvez maintenant remplacer l’état “Chargement” dans votre Conteneur d’Outil par le résultat statique final.
Flux d’Événements Spécifiques aux Outils
Chaque outil peut émettre des structures de données différentes dans ses événementstool_update et tool_partial_update en fonction de sa fonction (par exemple, un outil de recherche web peut diffuser des mises à jour “Recherche d’URL…”, tandis qu’un outil d’exécution de code diffuse des journaux de console).
Pour construire une interface utilisateur robuste, vous devrez analyser le flux d’événements spécifique pour les outils que vous avez l’intention de prendre en charge.
Note : Des guides détaillés documentant les structures d’événements spécifiques pour chaque outil natif seront disponibles à l’avenir. Pour l’instant, nous vous recommandons d’inspecter les événements renvoyés par les outils pendant le développement.Pour une liste des outils disponibles et de leurs capacités, veuillez consulter le guide Outils Natifs.
Streaming de Session d’Agent
Les Sessions d’Agent fournissent un ensemble différent d’événements adaptés aux interfaces conversationnelles. Lorsque vous envoyez un message avec"stream": true, le serveur diffuse le processus de réflexion de l’agent et les morceaux de réponse.
Événements de Session d’Agent
Contrairement aux exécutions d’outils, les événements de session d’agent sont souvent utilisés pour afficher une interface de chat en temps réel. Pour une liste complète des types d’événements et leur structure, veuillez consulter le Guide des Événements de Session d’Agent.Endpoint de Stream Dédié
Bien quePOST /agent-sessions/{id}/messages prenne en charge le streaming direct, UBIK fournit également un endpoint dédié pour s’abonner aux événements de session. Ceci est utile pour :
- Reconnexion : Reprendre un flux si la connexion est interrompue (les événements passés sont rejoués).
- Compatibilité Navigateur : Utiliser
EventSourcequi nécessite une requête GET et une authentification basée sur l’URL.
GET /agent-sessions/{session_id}/stream
Authentification avec JWT
Comme l’APIEventSource standard des navigateurs ne peut pas envoyer d’en-têtes personnalisés (comme X-API-KEY), cet endpoint accepte un paramètre de requête token. Vous devez générer un JWT à courte durée de vie en utilisant /auth/token et le passer ici.
Pour plus de détails sur la génération de jetons, voir le Guide Authentification & Sécurité.

