gen_ai.agent.name et gen_ai.conversation.id.
Avant de commencer
Pour commencer, installez le SDK Agent Lens et initialisez votre projet. Cette étape enregistre votre entity et votre projet auprès d’Agent Lens afin que le SDK achemine les spans vers le bon emplacement dans l’interface utilisateur. Le SDK lit votre clé API dans la variable d’environnementWANDB_API_KEY.
- Python
- TypeScript
[YOUR-TEAM] par le nom de votre entity Forge et [YOUR-PROJECT] par le nom de votre projet. L’entity est requis.tracing.init() avant tout appel à start_conversation(), start_turn(), start_llm(), start_tool() ou start_subagent(). Avant l’exécution de init(), ou après shutdown(), les fonctions de traçage n’ont silencieusement aucun effet. Vous pouvez donc laisser l’instrumentation dans le code de production et la piloter par la configuration. Appelez tracing.shutdown() à la fin de votre processus pour procéder au vidage des spans encore en mémoire tampon. Cette fonction est également enregistrée auprès d’atexit.Le modèle de données des agents
Agent Lens modélise le comportement des agents sous la forme d’une hiérarchie de relations un-à-plusieurs. Chaque agent peut avoir plusieurs conversations, chaque conversation peut comporter plusieurs tours de conversation, chaque tour de conversation peut comporter plusieurs appels LLM, et chaque appel LLM peut déclencher plusieurs appels d’outil.
Le diagramme suivant montre comment un agent englobe plusieurs conversations, une conversation plusieurs tours de conversation, et ainsi de suite.
Une conversation regroupe les tours de conversation au moyen d’un attribut
conversation_id partagé, et non d’un span parent : chaque tour de conversation démarre donc sa propre trace OTel. Cette conception prend en charge le traçage distribué et l’exécution parallèle. Le client envoie les spans directement au collecteur OTel, sans aucune agrégation côté serveur.
API de traçage d’agents
Les sections suivantes décrivent chaque fonction de traçage de premier niveau ainsi que les arguments qu’elle accepte. Utilisez ces fonctions pour instrumenter les couches conversation, tour de conversation, appel LLM et appel d’outil du modèle de données présenté dans la section précédente. Agent Lens expose les fonctions de premier niveau suivantes. Chaque fonction renvoie un objet qui peut s’utiliser comme gestionnaire de contexte (avecwith en Python, ou try/finally en TypeScript) ou que vous pouvez fermer manuellement en appelant .end().
Démarrer une conversation
start_conversation() (Python) ou startConversation() (TypeScript) ajoute un attribut conversation_id à chaque span enfant afin que les tours de conversation soient regroupés dans l’onglet Conversations. Si vous transmettez un conversation_id / conversationId, celui-ci doit rester stable pendant toute la durée de vie de la conversation. Réutilisez le même ID pour ajouter de nouveaux tours de conversation à une conversation existante. Si vous l’omettez, le SDK génère automatiquement un UUID.
La conversation active est stockée dans le contexte (un ContextVar Python ou un AsyncLocalStorage Node.js). Tout code s’exécutant dans le même contexte asynchrone peut donc la récupérer avec tracing.get_current_conversation() / tracing.getCurrentConversation() sans avoir à transmettre explicitement l’objet conversation.
- Python
- TypeScript
Démarrer un tour de conversation
start_turn() (Python) et startTurn() (TypeScript) créent un nouveau span invoke_agent qui devient la racine d’une nouvelle trace OTel. Agent Lens utilise ce span pour représenter un échange complet entre l’utilisateur et l’agent dans la vue chronologique.
- Python
- TypeScript
- En tant que fonction de premier niveau (
tracing.start_turn(...)/tracing.startTurn(...)), comme dans les exemples ci-dessous. Elle récupère la conversation active à partir du contexte et hérite de son ID de conversation. Si aucune conversation n’est active, le tour de conversation est créé sansconversation_idet n’est regroupé avec aucun autre tour de conversation. - En tant que méthode d’instance d’une conversation dont vous détenez une référence (
conversation.start_turn(...)/conversation.startTurn(...)). Cette forme est pratique lorsqu’un objet conversation explicite est disponible dans la portée courante, par exemple à l’intérieur d’un bloc de gestionnaire de contexte. L’exemple « Gestionnaire de contexte ou schéma try-finally », présenté plus loin dans ce guide, utilise cette forme. Consultez le tableau du modèle de données présenté plus haut pour accéder directement aux pages de référenceConversation,Turn,LLM,TooletSubAgentdes deux SDK.
Démarrer un appel LLM
start_llm() / startLLM() crée un span chat imbriqué dans le tour de conversation en cours. Agent Lens utilise ce span pour afficher dans l’interface utilisateur l’utilisation des jetons, le nom du modèle, les messages d’entrée et de sortie, ainsi que le raisonnement.
- Python
- TypeScript
llm avant sa fermeture :
- Python
- TypeScript
provider_name / providerName. Agent Lens ne le déduit pas de la chaîne du modèle.
Démarrer un appel d’outil
start_tool() / startTool() crée un span execute_tool. Ce span devient l’enfant du span OTel actif dans le contexte (généralement le span chat de l’appel LLM qui a généré l’appel d’outil).
- Python
- TypeScript
- Python
- TypeScript
Modèles d’utilisation pour le traçage d’agents
Les sections suivantes décrivent comment combiner ces fonctions selon la structure de votre code d’agent. Les exemples suivants utilisent deux types du SDK Agent Lens :Message(Python · TypeScript) représente une entrée individuelle d’une conversation : une entrée utilisateur, une réponse de l’assistant, un prompt système ou le résultat d’un outil. Attribuez une liste de messages àllm.input_messages/llm.inputMessagespour enregistrer ce que le modèle a reçu, et àllm.output_messages/llm.outputMessagespour enregistrer ce qu’il a produit.Usage(Python · TypeScript) capture le nombre de jetons indiqué dans la réponse du LLM et s’attribue àllm.usage.
Gestionnaire de contexte ou schéma try-finally
Pour la plupart des agents, utilisez un gestionnaire de contexte en Python ou un schéma try-finally en TypeScript. Le span est fermé et envoyé à la fin du bloc, même si une exception se produit. Agent Lens stocke dans le contexte la conversation, le tour de conversation et l’appel LLM actifs. Ainsi, toute fonction appelée dans un bloc peut appelerstart_llm() / startLLM() ou start_tool() / startTool() sans avoir à conserver de référence explicite au parent. Ce mécanisme fonctionne d’un module à l’autre, tant que le code s’exécute dans le même contexte asynchrone. Pour récupérer les objets actifs depuis n’importe quel niveau de la pile d’appels, utilisez tracing.get_current_conversation() / tracing.getCurrentConversation(), tracing.get_current_turn() / tracing.getCurrentTurn() et tracing.get_current_llm() / tracing.getCurrentLLM().
- Python
- TypeScript
Modèle de démarrage et de fin manuels
Appelez.end() explicitement lorsque vous ne pouvez pas utiliser de blocs with ni try/finally, par exemple lorsque vous ouvrez et fermez des spans dans des appels de fonction distincts, ou lorsque vous gérez un cycle de vie asynchrone en dehors d’une coroutine. Il vous incombe d’appeler .end() sur chaque objet que vous créez, afin que les spans soient fermés et transmis au collecteur. En TypeScript, terminer un tour de conversation ou une conversation ferme également tous ses descendants encore ouverts.
- Python
- TypeScript
Conventions sémantiques
Le SDK Agent Lens émet des spans OTel conformes aux conventions sémantiques GenAI et aux conventions de spans d’agent GenAI. Agent Lens accepte n’importe quel span OTel, stocke tous ses attributs et permet de les interroger. Vous pouvez ajouter des attributs personnalisés aux spans avecset_attributes() / setAttributes() sur n’importe quel objet de traçage Agent Lens. Voir Définir des attributs sur les spans d’agent.
Le SDK dispose de son propre fournisseur de traceurs OpenTelemetry privé. Il exporte uniquement les spans créés via Agent Lens: il ne remplace pas le fournisseur global de votre application et n’exporte pas les spans issus d’une instrumentation tierce.
Affichage des données dans l’interface Agent Lens
Une fois votre agent instrumenté à l’aide des modèles précédents, puis exécuté, vos traces apparaissent dans l’onglet Conversations de votre projet Agent Lens à l’adressehttps://.
- L’onglet Conversations affiche toutes les conversations, accompagnées d’une mini-carte de l’activité des tours de conversation.
- La vue détaillée d’une conversation s’ouvre lorsque vous cliquez sur une conversation. Elle affiche tous ses tours de conversation, ses appels LLM, ses exécutions d’outils, le nombre de jetons ainsi que tout feedback joint.