Ce que vous allez apprendre
À la fin de ce démarrage rapide, vous disposerez d’un agent fonctionnel sur plusieurs tours de conversation qui émet des spans OTel compatibles avec Agent Lens. Vous comprendrez également comment Agent Lens fait correspondre les conversations, les tours de conversation, les appels LLM et les appels d’outil au code de votre agent, afin d’appliquer le même modèle à vos propres agents personnalisés. Le code de ce guide met en place un petit agent de recherche en Python ou en TypeScript capable de consulter Wikipédia. Il pose trois questions (trois tours de conversation) et laisse le LLM choisir quand effectuer une recherche sur Wikipédia pour trouver une réponse. Agent Lens enregistre chaque étape (la conversation, chaque question, chaque réponse de l’IA et chaque recherche sur Wikipédia) afin que vous puissiez voir ce qui s’est passé dans l’onglet Conversations d’Agent Lens. Ce guide vous montre comment :- Initialiser Agent Lens pour le traçage d’agents avec
tracing.init(). - Ouvrir une conversation et un tour de conversation avec
start_conversation/startConversationetstart_turn/startTurn. - Encapsuler les appels LLM avec
start_llm/startLLMet enregistrer l’utilisation. - Encapsuler les exécutions d’outils avec
start_tool/startToolet enregistrer les résultats. - Enregistrer l’utilisation complète des jetons et un modèle tarifable afin que le nombre de jetons et le coût s’affichent.
- Afficher la conversation, les tours de conversation et les appels d’outil qui en résultent dans l’onglet Conversations.
Fonctionnement du SDK Agent Lens avec les agents
Le SDK Agent Lens intègre un système générique d’ingestion OTel pour les agents : Agent Lens peut donc capturer les informations de n’importe quel span OTel dans le code de votre agent. Toutefois, Agent Lens nécessite une gestion particulière des spans suivants pour effectuer le rendu des traces de votre agent dans l’onglet Conversations de l’interface Agent Lens.
En Python, les quatre fonctions s’utilisent comme gestionnaires de contexte (
with tracing.start_*(...) as obj:). À la sortie, elles terminent le span et vident les attributs, y compris en cas d’exception. En TypeScript, appelez .end() sur chaque objet renvoyé. Utilisez try { ... } finally { obj.end(); } pour garantir le nettoyage en cas d’exception, et encapsulez chaque run de l’agent dans tracing.runIsolated() afin que des runs simultanés ne partagent pas la même conversation.
D’autres attributs des conventions sémantiques GenAI, tels que gen_ai.usage.* et gen_ai.agent.name, enrichissent le rendu, mais ils sont facultatifs.
Prérequis
- Un compte CoreWeave Forge et une clé API.
- Une clé API OpenAI.
- Python 3.9 ou version ultérieure (pour les exemples Python).
- Node.js 18 ou version ultérieure et un exécuteur TypeScript tel que
tsx(les exemples TypeScript nécessitent la fonctionfetchintégrée et ne sont pas du JavaScript pur).
Installer les packages
Installez les packages suivants dans votre environnement de développement :.mts, puis exécutez-les avec npx tsx [FILENAME].mts.
Initialiser Agent Lens
tracing.init() s’authentifie à l’aide de votre clé API et configure l’exporteur OTel qui envoie les spans d’agent à Agent Lens. Le nom du projet doit inclure votre équipe. Le SDK lit la clé API dans la variable d’environnement WANDB_API_KEY, mais vous pouvez aussi la transmettre avec l’argument api_key / apiKey.
Définir un outil
Le code suivant définit l’outil de recherche Wikipédia de l’agent, ainsi qu’un schéma d’outil OpenAI qui indique quand et comment l’utiliser.Exécuter un agent tracé sur plusieurs tours de conversation
Une fois l’outil et l’initialisation d’Agent Lens en place, l’étape suivante consiste à les réunir dans une boucle d’agent complète. Cette boucle montre comment les conversations, les tours de conversation, les appels LLM et les appels d’outil s’imbriquent. L’exemple suivant exécute trois tours de conversation au sein d’une même conversation. À chaque tour, l’agent :- Ouvre un span
chatet laisse le LLM décider s’il doit appeler l’outil. - Si le LLM demande un outil, ouvre un span
execute_toolautour de l’appel et renvoie le résultat au LLM. - Ouvre un second span
chatpour produire la réponse finale.
Le SDK Agent Lens trace automatiquement les appels effectués avec les bibliothèques clientes OpenAI, Anthropic et Google Gen AI. Ce démarrage rapide enregistre manuellement chaque appel LLM avec
start_llm() afin de montrer comment les spans s’articulent entre eux ; il transmet donc autopatch_integrations=False à init(). Sans cet argument, chaque appel serait enregistré deux fois : une fois par votre span start_llm() et une fois par l’intégration automatique. Transmettez cet argument dès votre premier appel à init(), car un appel ultérieur avec autopatch_integrations=False ne supprime pas les patchs appliqués par un appel précédent. Dans votre propre code, laissez le patching automatique enregistrer vos appels LLM, ou bien désactivez-le et enregistrez-les vous-même.Enregistrer l’utilisation des jetons et le coût
Chaque spanchat contient l’utilisation des jetons et un ID du modèle. Agent Lens affiche le nombre de jetons à partir de l’utilisation et calcule le coût à partir de l’utilisation et de l’ID du modèle. Une valeur incomplète ou impossible à tarifer affiche donc 0 in / 0 out jetons ou Cost -, même si le reste de la trace semble correct. record(...) définit ces champs (ainsi que output_messages, response_id, reasoning, etc.) en un seul appel. Seuls les champs que vous transmettez sont appliqués.
Deux conditions doivent être remplies pour que le coût s’affiche :
- Une utilisation complète.
input_tokenscorrespond à l’entrée totale, jetons mis en cache compris. Agent Lens facture les lectures et les écritures de cache à leurs propres tarifs et les soustrait du total d’entrée :cache_read_input_tokensetcache_creation_input_tokensdoivent donc être indiqués en plus d’un totalinput_tokensqui les inclut. Chez les fournisseurs proposant la mise en cache des prompts (par exemple, Anthropic), les jetons mis en cache représentent souvent l’essentiel de l’entrée : si vous les omettez, l’utilisation et le coût affichés seront quasi nuls. - Un ID du modèle tarifable. Transmettez l’ID précis renvoyé par la réponse (
resp.model) en tant queresponse_model. Le coût est déterminé à partir du modèle. Agent Lens privilégieresponse_model(le modèle exact servi par le fournisseur) et, à défaut, utilise lemodelque vous avez transmis àstart_llm. Un alias tel queopusousonnetn’est pas tarifable et afficheCost -.
prompt_tokens : l’exemple ci-dessus s’applique donc tel quel. Anthropic indique les jetons mis en cache séparément de input_tokens ; réintégrez-les donc dans le total sur lequel Agent Lens calcule le prix :
Afficher les traces de votre agent dans l’onglet Conversations
Ouvrez votre projet dans Agent Lens et sélectionnez Conversations. Vous y trouverez :- Une conversation pour
research-botcomportant trois tours de conversation. - Pour chaque tour de conversation (
invoke_agent), deux spanschatet un spanexecute_toolimbriqués. - Pour chaque
chat, le nombre de jetons, la latence, le modèle et l’échange de messages complet.
Créer un lien vers une conversation depuis votre application
Pour créer un lien profond (deep link) depuis votre propre interface vers une conversation dans Agent Lens, vous avez besoin de l’ID de la conversation.start_conversation / startConversation l’expose via conversation_id / conversationId. Vous pouvez ainsi le journaliser ou le stocker avec votre propre ID de requête, puis ouvrir la conversation plus tard depuis l’onglet Conversations.
Étapes suivantes
- Découvrez comment tracer des agents avec Agent Lens, ainsi que les fonctionnalités et options disponibles dans le SDK Agent Lens.
- Consultez Choisir une intégration d’agent pour découvrir d’autres façons d’intégrer Agent Lens à vos agents.