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 Weave. Vous comprendrez également comment Weave 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 capable de consulter Wikipédia. Il pose trois questions (trois tours de conversation) et s’appuie sur le LLM pour choisir à quel moment lancer une recherche sur Wikipédia afin de trouver une réponse. Weave enregistre chaque étape (la conversation, chaque question, chaque réponse de l’IA et chaque consultation de Wikipédia) pour que vous puissiez retracer le déroulement dans la vue Weave Agents. Ce guide vous montre comment :- Initialiser Weave pour le traçage d’agents avec
weave.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 d’afficher le nombre de jetons et le coût.
- Afficher la conversation, les tours de conversation et les appels d’outil obtenus dans la vue Agents.
Fonctionnement du SDK Weave avec les agents
Le SDK Weave comprend un système générique d’ingestion OTel pour les agents : Weave peut ainsi capturer des informations à partir de n’importe quel span OTel du code de votre agent. Toutefois, pour effectuer le rendu des traces de votre agent dans la vue Agents de l’interface utilisateur de Weights & Biases, Weave nécessite une gestion particulière des spans suivants.
En Python, les quatre fonctions s’utilisent comme gestionnaires de contexte (
with weave.start_*(...) as obj:). À la sortie, elles terminent le span et effectuent le vidage des 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.
D’autres attributs des conventions sémantiques GenAI, tels que gen_ai.usage.* et gen_ai.agent.name, permettent un rendu plus complet, mais ils sont facultatifs.
Prérequis
- Un compte CoreWeave Forge et une clé API.
- Une clé API OpenAI.
- Python 3.10 ou version ultérieure (pour les exemples Python).
- Node.js 18 ou version ultérieure (les exemples TypeScript nécessitent la fonction native
fetch).
Installer les packages
Installez les packages suivants dans votre environnement de développement :Initialiser Weave
weave.init() s’authentifie auprès de W&B et configure l’exportateur OTel qui envoie les spans d’agent vers la vue Agents. Si le projet n’existe pas encore dans votre équipe, Weave le crée lors de la première écriture.
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 utiliser cet outil.Exécuter un agent tracé sur plusieurs tours de conversation
Une fois l’outil et l’initialisation de Weave 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 les uns dans les autres. L’exemple suivant exécute trois tours de conversation au sein d’une même conversation. À chaque tour :- Un span
chatest ouvert, et le LLM choisit s’il doit appeler l’outil. - Si le LLM demande un outil, un span
execute_toolest ouvert autour de l’appel, et le résultat est renvoyé au LLM. - Un second span
chatest ouvert pour produire la réponse finale.
Enregistrer l’utilisation des jetons et le coût
Chaque spanchat contient l’utilisation des jetons et un ID de modèle. Weave 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 lorsque 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 au nombre total de jetons d’entrée, y compris les jetons mis en cache. Weave facture les lectures et les écritures en 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 de modèle tarifable. Le coût est déterminé à partir du modèle. Weave privilégie
response_model(le modèle exact servi par le fournisseur) et, à défaut, utilise lemodeltransmis àstart_llm. Un alias tel queopusousonnetn’est pas tarifable et afficheCost -: transmettez donc commeresponse_modell’ID concret renvoyé par la réponse (resp.model).
prompt_tokens, si bien que l’exemple ci-dessus s’applique 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 Weave calcule le coût :
Voir vos traces d’agent dans la vue Agents
Lorsqueweave.init() s’exécute, il affiche un lien vers votre projet, où vous pouvez voir :
- Une ligne pour
research-botdans l’onglet Agents. - Une conversation contenant trois tours de conversation.
- Chaque tour de conversation (
invoke_agent), dans lequel sont imbriqués deux spanschatet un spanexecute_tool. - Le nombre de jetons, la latence, le modèle et l’échange complet de messages pour chaque
chat.
Créer un lien vers une conversation depuis votre application
Pour créer un lien profond depuis votre propre interface vers une conversation dans la vue Weave Agents, construisez l’URL à partir de votre entity, de votre projet et de l’identifiant de la conversation.weave.init() renvoie un client qui contient entity et project, et start_conversation expose conversation_id.
Étapes suivantes
- Découvrez comment tracer des agents avec Weave, ainsi que les fonctionnalités et options disponibles dans le SDK Weave.
- Consultez Choisir une intégration d’agent pour découvrir d’autres façons d’intégrer Weave à vos agents.