thread_id commun, afin que vous puissiez visualiser des sessions complètes et suivre des métriques au niveau de la conversation d’un tour à l’autre. Vous pouvez créer des threads par programmation et les visualiser dans l’interface utilisateur Weave.
Pour commencer avec les Threads, procédez comme suit :
- Familiarisez-vous avec les bases des Threads.
- Essayez les exemples de code, qui montrent 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 à plusieurs tours
- 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 associés qui partagent un même contexte conversationnel. Un Thread :- Dispose d’un
thread_idunique - Contient un ou plusieurs tours
- Maintient le contexte d’un Appel à l’autre
- Représente des sessions utilisateur complètes ou des flux d’interaction
Tour
Un tour est une opération de haut niveau au sein d’un Thread, affichée dans l’interface utilisateur sous forme de lignes distinctes dans une vue de thread. Chaque tour :- représente une étape logique dans une conversation ou un flux de travail
- est l’enfant direct d’un contexte de thread et peut inclure des appels imbriqués de niveau inférieur (non affichés 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 sont des opérations de premier niveau qui lancent de nouveaux tours.
- Les Appels imbriqués sont des opérations de niveau inférieur au sein d’un tour.
Trace
Une Trace capture la pile complète des Appels pour une seule opération. Les threads regroupent les traces qui font partie d’une même conversation logique ou session. En d’autres termes, un thread est composé de plusieurs tours, chacun représentant une partie de la conversation. Pour en savoir plus sur les Traces, voir l’Aperçu du Tracing.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
- Répertorie les threads récents de votre projet.
- Les colonnes incluent le nombre de tours, l’heure de début et la date de la dernière mise à jour.
- Cliquez sur une ligne pour ouvrir son volet de détails.

Volet de détails des threads
- Cliquez sur n’importe quelle ligne pour ouvrir le volet de détails correspondant.
- Affiche tous les tours au sein d’un thread.
- Les tours sont listés dans l’ordre de leur démarrage (selon leur heure de début, et non leur durée ou leur heure de fin).
- Inclut des métadonnées au niveau de l’appel (latence, entrées, sorties).
- Peut aussi afficher le contenu des messages ou des données structurées s’ils ont été enregistrés.
- Pour voir l’exécution complète d’un tour, vous pouvez l’ouvrir depuis le volet de détails du thread. Cela vous permet d’explorer toutes les opérations imbriquées survenues pendant ce tour.
- Si un tour inclut des messages extraits d’appels LLM, ils 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 répondre à certains critères pour s’afficher. Pour plus d’informations, voir Comportement de la vue de chat.
Comportement de la vue Chat
Le panneau de chat affiche des données de message structurées extraites des appels LLM effectués à chaque tour. Cette vue propose un rendu conversationnel de l’interaction.
Qu’est-ce qui est considéré comme un message
Weave extrait les messages des Appels d’un tour 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 imbriqués dans d’autres Appels apparaissent comme des messages. Cela évite de dupliquer des étapes intermédiaires ou une logique interne agrégée. En général, les SDK tiers patchés automatiquement émettent des messages, par exemple :openai.ChatCompletion.createanthropic.Anthropic.completion
Que se passe-t-il lorsqu’aucun message n’est présent
Si un tour n’émet aucun message, le panneau de chat affiche une section de messages vide pour ce tour. Le panneau de chat peut tout de même inclure des messages d’autres tours dans le même thread.Interactions entre les tours de conversation et le chat
- Cliquer sur un tour de conversation fait défiler le panneau de chat jusqu’à l’emplacement du message correspondant (comportement d’épinglage).
- Faire défiler le panneau de chat met en surbrillance le tour correspondant dans la liste des tours de conversation.
Accéder à la vue de trace et en revenir
Vous pouvez ouvrir la trace complète d’un tour en cliquant dessus. Un bouton Retour apparaît dans le coin supérieur gauche pour revenir à la vue détaillée du thread. Weave ne conserve pas l’état de l’interface utilisateur (par exemple, 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 de cette section présente une stratégie différente pour organiser les tours et les threads dans votre application. Dans la plupart des exemples, vous devez fournir votre propre appel à un LLM ou le comportement du système dans les fonctions squelette.- 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 ou Appels imbriqués. - Si vous passez 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 en génère automatiquement un unique.
weave.thread() est un objet ThreadContext doté d’une propriété thread_id, que vous pouvez consigner, 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 fin d’un contexte enfant n’interrompt ni n’écrase le contexte parent. Cela permet d’obtenir des structures de threads ramifiées ou une orchestration en couches des threads, selon la logique de votre application.
Création de thread de base
L’exemple de code suivant montre comment utiliserweave.thread() pour regrouper une ou plusieurs opérations sous un thread_id commun. C’est une manière 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 de la gestion de contexte weave.thread(). Chaque appel à process_user_message crée un nouveau tour dans le thread. Vous pouvez utiliser cette approche lorsque vous créez votre propre boucle d’agent et souhaitez garder un contrôle total sur la manière dont le contexte et l’imbrication sont gérés.
Utilisez l’ID de thread généré automatiquement pour les interactions de courte durée, ou fournissez un ID de session personnalisé (comme user_session_123) afin de conserver le contexte du thread d’une session à l’autre.
Agent manuel avec profondeur d’appel asymétrique
Cet exemple montre que les tours peuvent être définis à différentes profondeurs dans la pile d’appels, selon la façon dont le contexte de thread est appliqué. L’exemple utilise deux fournisseurs (OpenAI et Anthropic), chacun avec une profondeur d’appel différente avant d’atteindre la frontière du tour. Tous les tours partagent le mêmethread_id, mais la frontière du tour apparaît à différents niveaux de la pile selon la logique du fournisseur. C’est utile lorsque les appels doivent être tracés différemment selon les backends, tout en étant regroupés dans le même thread.
Reprendre une session précédente
Vous devez parfois reprendre une session déjà démarrée et continuer à ajouter des Appels au même thread. Dans d’autres cas, il peut être impossible de reprendre une session existante et vous devez alors démarrer un nouveau thread. Lors de l’implémentation de la reprise facultative des threads, ne laissez jamais le paramètrethread_id à None, car cela désactive le regroupement des threads. À la place, fournissez toujours un ID de thread valide. Pour créer un nouveau thread, générez un identifiant unique à l’aide d’une fonction comme 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 illustre 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 de bien séparer les responsabilités. Le thread parent de l’application coordonne ces couches en définissant des identifiants de thread à l’aide d’unThreadContext partagé. Utilisez ce modèle si vous souhaitez analyser ou surveiller différentes parties du système indépendamment, 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.Endpoint
Endpoint:POST /threads/query
Schéma de requête
Schéma de la réponse
Requête sur les threads récemment actifs
Cet exemple récupère les 50 threads les plus récemment mis à jour. Remplacezmy-project par l’ID réel de votre projet.
Interroger les threads par niveau d’activité
Cet exemple récupère les 20 threads les plus actifs, classés par nombre de tours.Interroger uniquement les threads récents
Cet exemple renvoie les threads lancés au cours des dernières 24 heures. Vous pouvez modifier la plage de temps en ajustant la valeur dedays dans timedelta.