Détails du point de terminaison
- Chemin :
/otel/v1/traces - Méthode :
POST - Content-Type :
application/x-protobuf - URL de base : l’URL de base du point de terminaison de trace OTel dépend de votre type de déploiement W&B :
- Cloud mutualisé :
https://trace.wandb.ai/otel/v1/traces. - Instances Cloud dédié et Autogéré :
https://<your-subdomain>.wandb.io/traces/otel/v1/traces.
<your-subdomain> par le domaine W&B unique de votre organisation, par exemple acme.wandb.io.
Authentification et acheminement
wandb-api-key pour authentifier les requêtes et les attributs de ressource définis dans votre TracerProvider pour acheminer les spans vers la bonne entité et le bon projet. Transmettez votre clé API W&B dans l’en-tête wandb-api-key, puis spécifiez les clés suivantes comme attributs de ressource OpenTelemetry dans votre classe TracerProvider :
wandb.entity: le nom de votre équipe W&B ou de votre utilisateur.wandb.project: le nom du projet auquel envoyer les traces.
Exemples
WANDB_API_KEY: vous pouvez l’obtenir dans les Paramètres utilisateur.- Entité : vous pouvez journaliser des traces dans le projet uniquement sous une équipe/entité à laquelle vous avez accès. Pour trouver le nom de votre entité, accédez à votre tableau de bord W&B et vérifiez le champ Teams dans la barre latérale gauche.
- Nom du projet : choisissez un nom.
OPENAI_API_KEY: vous pouvez l’obtenir dans le tableau de bord OpenAI.
Instrumentation OpenInference
- Python
- TypeScript
- Python
- TypeScript
Collez le code suivant dans un fichier Python, par exemple Exécutez le code :
openinference_example.py :Instrumentation OpenLLMetry
- Python
- TypeScript
- Python
- TypeScript
Collez le code suivant dans un fichier Python, par exemple Exécutez le code :
openllmetry_example.py. Il s’agit du même code que dans l’exemple précédent, sauf que OpenAIInstrumentor est importé depuis opentelemetry.instrumentation.openai au lieu de openinference.instrumentation.openai :Sans instrumentation
- Python
- TypeScript
- Python
- TypeScript
Collez le code suivant dans un fichier Python, par exemple Exécutez le code :
opentelemetry_example.py :gen_ai et openinference pour déterminer la convention à utiliser, le cas échéant, lors de l’interprétation de la trace. Si aucune de ces clés n’est détectée, tous les attributs de span sont alors visibles dans la vue de trace. Le span complet est disponible dans le panneau latéral lorsque vous sélectionnez une trace.
Utiliser un collecteur OpenTelemetry
Configurer un collecteur
- Configurer un fichier de configuration pour Docker qui déploie un serveur local (collecteur) à l’écoute des traces OTLP, les regroupe par lots et les achemine vers Weave.
- Exécuter localement le collecteur avec Docker.
- Envoyer une requête simple à OpenAI qui transfère les traces au collecteur exécuté dans le conteneur Docker.
collector-config.yaml qui configure le collecteur pour recevoir des traces OTLP et les exporter vers Weave :
collector-config.yaml
- Écoute les traces OTLP sur le port
4318(HTTP). - Exporte les traces vers le point de terminaison OTLP de Weave à l’aide de l’en-tête
wandb-api-key, en lisant l’URL du point de terminaison depuisWANDB_OTLP_ENDPOINTet la clé API depuisWANDB_API_KEY. - Définit
wandb.entityetwandb.projectcomme attributs de ressource à l’aide du processeurresource, en lisant les valeurs depuisDEFAULT_WANDB_ENTITYetDEFAULT_WANDB_PROJECT. L’actioninsertinjecte ces attributs uniquement si le code de votre application ne les définit pas déjà. - Active la
sending_queueintégrée de l’exportateur avec le traitement par lots afin de réduire la surcharge réseau.
OTEL_EXPORTER_OTLP_ENDPOINT. Le SDK OTel lit automatiquement cette variable, vous n’avez donc pas besoin de fournir le point de terminaison à l’exportateur.
Si vous définissez wandb.entity ou wandb.project comme attributs de ressource dans le TracerProvider de votre application, ils priment sur les valeurs par défaut définies dans la configuration du collecteur.
OpenAIInstrumentor intercepte les appels OpenAI, crée des traces et les exporte vers le collecteur. Le collecteur gère l’authentification et l’acheminement vers Weave.
Après avoir exécuté le script, vous pouvez consulter les traces dans l’interface Weave.
Pour envoyer des traces vers des backends supplémentaires, ajoutez d’autres exportateurs et incluez-les dans la liste service.pipelines.traces.exporters. Par exemple, vous pouvez exporter vers Weave et Jaeger depuis la même instance du Collector.
Organiser les traces OTel en threads
wandb.thread_id: regroupe les spans dans un thread donné.wandb.is_turn: marque un span comme un tour de conversation de conversation (il apparaît comme une ligne dans la vue thread).
wandb.thread_id pour regrouper les opérations associées et wandb.is_turn pour marquer les opérations de haut niveau qui apparaissent comme des lignes dans la vue thread.
Configuration initiale
Configuration initiale
Utilisez cette configuration pour exécuter ces exemples :
- Python
- TypeScript
Tracer un thread simple à un seul tour de conversation
Tracer un thread simple à un seul tour de conversation
- Python
- TypeScript
Tracer une conversation à plusieurs tours de conversation partageant un même ID de thread
Tracer une conversation à plusieurs tours de conversation partageant un même ID de thread
- Python
- TypeScript
Tracez des opérations profondément imbriquées et marquez uniquement le span le plus externe comme tour de conversation
Tracez des opérations profondément imbriquées et marquez uniquement le span le plus externe comme tour de conversation
- Python
- TypeScript
Tracer les opérations d’arrière-plan appartenant à un thread mais qui ne sont pas des tours de conversation
Tracer les opérations d’arrière-plan appartenant à un thread mais qui ne sont pas des tours de conversation
- Python
- TypeScript
thread_id, et chaque tour de conversation apparaît sur une ligne distincte.
Correspondance des attributs
Frameworks pris en charge
- OpenTelemetry GenAI: conventions sémantiques standard pour l’IA générative (
gen_ai.*). - OpenInference: bibliothèque d’instrumentation d’Arize AI (
input.value,output.value,llm.*,openinference.*). - Vercel AI SDK: attributs du SDK d’IA de Vercel (
ai.prompt,ai.response,ai.model.*,ai.usage.*). - MLflow: attributs de tracking de MLflow (
mlflow.spanInputs,mlflow.spanOutputs). - Traceloop: instrumentation OpenLLMetry (
traceloop.entity.*,traceloop.span.kind). - Google Vertex AI: attributs d’agent de Vertex AI (
gcp.vertex.agent.*). - OpenLit: attributs d’observabilité d’OpenLit (
gen_ai.content.completion). - Langfuse: attributs de tracing de Langfuse (
langfuse.startTime,langfuse.endTime).