thread_id commun : vous pouvez ainsi visualiser des sessions complètes et suivre des métriques au niveau de la conversation sur l’ensemble des tours de conversation. Vous pouvez créer des threads par programmation et les visualiser dans l’interface utilisateur de Weights & Biases.
Pour commencer à utiliser les Threads, procédez comme suit :
- Familiarisez-vous avec les notions de base des Threads.
- Essayez les exemples de code, qui illustrent des modèles d’utilisation courants et des cas d’utilisation concrets.
Cas d’utilisation
Les threads sont utiles lorsque vous souhaitez organiser et analyser :- Des conversations sur plusieurs tours de conversation
- Des flux de travail basés sur des sessions
- Toute séquence d’opérations liées
Définitions
Thread
Un Thread est un regroupement logique d’Appels liés qui partagent un même contexte conversationnel. Un Thread :- Possède un
thread_idunique - Contient un ou plusieurs tours de conversation
- Conserve le contexte d’un Appel à l’autre
- Représente des sessions utilisateur complètes ou des flux d’interaction
Tour de conversation
Un tour de conversation (Turn) est une opération de haut niveau au sein d’un Thread, affichée dans l’interface utilisateur sous forme de ligne distincte dans une vue de thread. Chaque tour de conversation :- Représente une étape logique d’une conversation ou d’un flux de travail
- Est un enfant direct d’un contexte de thread et peut contenir des appels imbriqués de plus bas niveau (non pris en compte dans les statistiques au niveau du thread)
Appel
Un Appel désigne toute exécution d’une fonction décorée avec@weave.op dans votre application.
- Les Appels de tour de conversation sont des opérations de premier niveau qui lancent de nouveaux tours de conversation.
- Les Appels imbriqués sont des opérations de niveau inférieur au sein d’un tour de conversation.
Trace
Une Trace capture la pile d’appels complète d’une seule opération. Les threads regroupent les traces appartenant à une même conversation ou session logique. Autrement dit, un thread se compose de plusieurs tours de conversation, chacun représentant une étape de la conversation. Pour en savoir plus sur les Traces, consultez l’aperçu du traçage.Aperçu de l’interface
Dans la barre latérale du projet Weave, sélectionnez Threads pour accéder à la vue en liste des Threads.
Vue en liste des Threads
- Affiche les threads récents de votre projet.
- Les colonnes indiquent notamment le nombre de tours de conversation, l’heure de début et la date de dernière mise à jour.
- Cliquez sur une ligne pour ouvrir son volet latéral de détails.

Volet latéral de détails des Threads
- Cliquez sur une ligne pour ouvrir son volet latéral de détails.
- Affiche tous les tours de conversation d’un thread.
- Les tours de conversation sont listés dans l’ordre de leur démarrage (selon leur heure de début, et non selon leur durée ou leur heure de fin).
- Inclut les métadonnées au niveau de l’appel (latence, entrées, sorties).
- Peut afficher le contenu des messages ou des données structurées, s’ils ont été journalisés.
- Pour afficher l’exécution complète d’un tour de conversation, ouvrez-le depuis le volet latéral de détails du thread. Vous pouvez ainsi explorer toutes les opérations imbriquées survenues pendant ce tour de conversation.
- Si un tour de conversation comprend des messages extraits d’appels LLM, ceux-ci apparaissent dans le panneau de chat. Ces messages proviennent généralement d’appels effectués par des intégrations prises en charge (par exemple,
openai.ChatCompletion.create) et doivent remplir certains critères pour s’afficher. Pour plus d’informations, voir Comportement de la vue chat.
Comportement de la vue chat
Le panneau de chat affiche les données de messages structurées extraites des appels LLM effectués à chaque tour de conversation. Cette vue offre un rendu de l’interaction sous forme de conversation.
Ce qui constitue un message
Weave extrait les messages des Appels d’un tour de conversation qui correspondent à des interactions directes avec des fournisseurs de LLM (par exemple, l’envoi d’un prompt et la réception d’une réponse). Seuls les Appels qui ne sont pas eux-mêmes imbriqués dans d’autres Appels apparaissent comme des messages. Cela évite de dupliquer les étapes intermédiaires ou la logique interne agrégée. En règle générale, ce sont les SDK tiers auxquels un patch est appliqué automatiquement qui émettent des messages, par exemple :openai.ChatCompletion.createanthropic.Anthropic.completion
Que se passe-t-il en l’absence de messages ?
Si un tour de conversation n’émet aucun message, le panneau de chat affiche une section de messages vide pour ce tour de conversation. Le panneau de chat peut toutefois contenir des messages provenant d’autres tours de conversation du même thread.Interactions entre les tours de conversation et le chat
- Un clic sur un tour de conversation fait défiler le panneau de chat jusqu’à l’emplacement du message correspondant (comportement d’épinglage).
- Le défilement du panneau de chat met en surbrillance le tour de conversation correspondant dans la liste des tours de conversation.
Naviguer vers la vue de trace et en revenir
Pour ouvrir la trace complète d’un tour de conversation, cliquez dessus. Un bouton de retour situé dans le coin supérieur gauche permet de revenir à la vue détaillée du thread. Weave ne conserve pas l’état de l’interface (comme la position de défilement) lors de cette transition.
Utilisation du SDK
Les sections suivantes décrivent comment créer et gérer des threads par programmation à l’aide du SDK Weave. Chaque exemple illustre une stratégie différente pour organiser les tours de conversation et les threads dans votre application. Dans la plupart des exemples, vous devez fournir votre propre appel LLM ou le comportement de votre système dans les fonctions de substitution.- Pour suivre une session ou une conversation, utilisez le gestionnaire de contexte
weave.thread(). - Décorez les opérations logiques avec
@weave.oppour les suivre en tant que tours de conversation ou appels imbriqués. - Si vous transmettez un
thread_id, Weave l’utilise pour regrouper toutes les opérations de ce bloc dans le même thread. Si vous omettez lethread_id, Weave génère automatiquement un identifiant unique à votre place.
weave.thread() est un objet ThreadContext doté d’une propriété thread_id, que vous pouvez journaliser, réutiliser ou transmettre à d’autres systèmes.
Les contextes weave.thread() imbriqués démarrent toujours un nouveau thread, sauf si vous réutilisez le même thread_id. La fermeture d’un contexte enfant n’interrompt ni n’écrase le contexte parent. Vous pouvez ainsi créer des structures de threads ramifiées ou orchestrer des threads sur plusieurs niveaux, selon la logique de votre application.
Création de base d’un thread
L’exemple de code suivant montre comment utiliserweave.thread() pour regrouper une ou plusieurs opérations sous un thread_id commun. C’est un moyen simple de commencer à utiliser les Threads dans votre application.
Implémentation manuelle d’une boucle d’agent
Cet exemple montre comment définir manuellement un agent conversationnel à l’aide des décorateurs@weave.op et du gestionnaire de contexte weave.thread(). Chaque appel à process_user_message crée un nouveau tour de conversation dans le thread. Utilisez ce modèle si vous créez votre propre boucle d’agent et souhaitez garder un contrôle complet sur la gestion du contexte et de l’imbrication.
Utilisez l’ID de thread généré automatiquement pour les interactions de courte durée, ou transmettez un ID de session personnalisé (par exemple user_session_123) pour conserver le contexte de thread d’une session à l’autre.
Agent manuel avec une profondeur d’appels déséquilibrée
Cet exemple montre que les tours de conversation peuvent être définis à différentes profondeurs de la pile d’appels, selon la manière dont le contexte de thread est appliqué. Il utilise deux fournisseurs (OpenAI et Anthropic), chacun avec une profondeur d’appels différente avant d’atteindre la limite du tour de conversation. Tous les tours de conversation partagent le mêmethread_id, mais la limite du tour de conversation se situe à des niveaux différents de la pile selon la logique propre à chaque fournisseur. Cette approche est utile lorsque les appels doivent être tracés différemment d’un backend à l’autre, tout en restant regroupés dans le même thread.
Reprendre une session précédente
Il arrive que vous deviez reprendre une session déjà commencée et continuer à ajouter des appels au même thread. Dans d’autres cas, il vous sera impossible de reprendre une session existante et vous devrez démarrer un nouveau thread. Lorsque vous implémentez une reprise facultative de thread, ne laissez jamais le paramètrethread_id à None, car cela désactive le regroupement par thread. Fournissez toujours un ID de thread valide. Pour créer un nouveau thread, générez un identifiant unique à l’aide d’une fonction telle que generate_id().
Lorsqu’aucun thread_id n’est spécifié, l’implémentation interne de Weave génère automatiquement un UUID v7 aléatoire. Vous pouvez reproduire ce comportement dans votre propre fonction generate_id() ou utiliser n’importe quelle chaîne unique de votre choix.
Threads imbriqués
Cet exemple montre comment structurer des applications complexes à l’aide de plusieurs threads coordonnés. Chaque couche s’exécute dans son propre contexte de thread, ce qui permet une séparation nette des responsabilités. Le thread de l’application parente coordonne ces couches en définissant les ID de thread au moyen d’unThreadContext partagé. Utilisez ce modèle lorsque vous souhaitez analyser ou surveiller séparément différentes parties du système, tout en les rattachant à une session commune.
Spécification de l’API
Les sections suivantes décrivent le point de terminaison de requête des Threads, ses schémas de requête et de réponse, ainsi que les modèles de requête courants que vous pouvez utiliser pour récupérer les données des threads par programmation.Point de terminaison
Point de terminaison :POST /threads/query
Schéma de la requête
Schéma de réponse
Interroger les threads actifs récents
Cet exemple récupère les 50 derniers threads mis à jour. Remplacezmy-project par l’ID de votre projet.
Interroger les threads par niveau d’activité
Cet exemple récupère les 20 threads les plus actifs, triés par nombre de tours de conversation.Interroger uniquement les threads récents
Cet exemple renvoie les threads démarrés au cours des dernières 24 heures. Vous pouvez modifier la fenêtre temporelle en ajustant la valeur dedays dans timedelta.