Conventions sémantiques de génération d'Aï OpenTelemetry
Type: Learn + Build
Languages: Python (stdlib)
Prerequisites: Phase 14 · 13 (LangGraph), Phase 14 · 24 (Observability Platforms)
Time: ~60 minutes
Objectifs d'apprentissage
- Nommer les catégories de génération d'intervalle: modèle/client, agent, outil.
- Distinguer
invoke_agentLes écarts de client versus internes et lorsque chacun s'applique. - Liste des attributs de GenAI de premier niveau: nom du fournisseur, modèle de demande, identifiant de la source de données.
- Expliquer le contrat de capture de contenu: opt-in,
OTEL_SEMCONV_STABILITY_OPT_IN, recommandation de référence externe.
Le problème
Chaque fournisseur invente ses propres noms de champs. Les équipes d'opérations finissent par construire des tableaux de bord par cadre.
Le concept
Catégories de champs
- Model / client spans.Couvrir les appels LLM bruts. émis par les SDK du fournisseur (Anthropic, OpenAI, Bedrock) et les adaptateurs de modèles de cadre.
- Agent spans.
create_agent(lorsque l'agent est construit) etinvoke_agent(lorsqu'il fonctionne). - Tool spans.Un par invocation d'outil; connecté à l'espace d'agent par relation parent-enfant.
Nom de l'agent
- Nom de l'espagnol:
invoke_agent {gen_ai.agent.name}si nommé; retour àinvoke_agent- Je suis désolé . - Une espèce de spande:
- CLIENT pour les services d'agents à distance (API OpenAI Assistants, Agents Bedrock).
- INTERNAL pour les cadres d'agents en cours de processus (LangChain, CrewAI, local ReAct).
Attributs clés
gen_ai.provider.nameanthropic- Je suis là .openai- Je suis là .aws.bedrock- Je suis là .google.vertex- Je suis désolé .gen_ai.request.modelle modèle d'identification.gen_ai.response.modelle modèle résolu (peut différer de la demande en raison du routage).gen_ai.agent.nameIdentifiant de l'agent.gen_ai.operation.namechat- Je suis là .completion- Je suis là .invoke_agent- Je suis là .tool_call- Je suis désolé .gen_ai.data_source.idpour les RAG: quel corpus ou magasin a été consulté.
Des conventions spécifiques à la technologie existent pour Anthropic, Azure AI Inference, AWS Bedrock, OpenAI.
Capture de contenu
La règle par défaut: les instruments ne DEVENT PAS capturer les entrées/sorties par défaut.
gen_ai.system_instructionsgen_ai.input.messagesgen_ai.output.messages
Le modèle de production recommandé: stocker le contenu à l'extérieur (S3, votre magasin de journaux), enregistrer les références sur les intervalles (identifiants de pointeur, pas de prose).
Stabilité
La plupart des conventions sont expérimentales à partir de mars 2026.
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimentalLes cartes Datadog v1.37+ génAI attribue nativement dans son schéma d'observabilité LLM. D'autres backends (Grafana, Honeycomb, Jaeger) prennent en charge les attributs bruts.
Où ce modèle va mal
- Capturing full prompts in spans.Les informations personnelles, les secrets, les données des clients dans des traces que les opérations peuvent lire.
- No
gen_ai.provider.name.Les tableaux de bord multi-fournisseurs se cassent lorsque l'attribution est manquante. - Spans without parent links.Les outils orphelins s'étendent, ils propagent toujours le contexte.
- Not setting stability opt-in.Vos attributs peuvent être renommés lors de la mise à niveau.
Faites-le
code/main.pymet en œuvre un émetteur stdlib d'épanouissement correspondant aux conventions de GenAI:
Spanavec le schéma d'attribut GenAI.Traceravecstart_span, des contextes enlisés.- Un agent scripté qui émet:
create_agent- Je suis là .invoke_agent(INTERNAL), par outil,chatles cours de droit. - Un mode de capture de contenu qui stocke les invites à l'extérieur et enregistre les identifiants sur les intervalles.
- Je vais le faire.
python3 code/main.pySortie: un arbre de débit avec tous les attributs GenAI requis, et un "marché externe" montrant les références de contenu opt-in.
Utilisez-le
- Datadog LLM Observability(v1.37+) des attributs de cartes natifs.
- Langfuse / Phoenix / Opik(Létion 24) auto-instrument de l'écosystème.
- Jaeger / Honeycomb / Grafana Tempo traces OTel brutes; construire des tableaux de bord à partir des attributs GenAI.
- Self-hosted exécuter le Collecteur OTel avec un processeur GenAI.
La faire partir
outputs/skill-otel-genai.mdLes fils OTel GenAI s'étendent sur un agent existant avec des défauts de capture de contenu et de stockage de référence externe.
Exercices
- Instruisez votre leçon 01 ReAct loop avec
invoke_agent(INTERNAL) + spans par outil. Envoyez à une instance Jaeger. - Ajouter la capture de contenu en mode "références seulement": les requêtes à SQLite, les attributs de durée ne comportent que des identifiants de rangée.
- Lisez la spécification pour
gen_ai.data_source.id- Envoyez-le dans votre recherche de leçon 9. - Réglage
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimentalet vérifier que vos attributs ne sont pas renommés par le collectionneur. - Construire un tableau de bord: "quelles erreurs d'outil corrélataient avec quels modèles" à partir des attributs GenAI seulement.
Les termes clés
| Term | What people say | What it actually means |
|---|---|---|
| GenAI SIG | "OpenTelemetry GenAI group" | OTel working group defining the schema |
| invoke_agent | "Agent span" | Name of the span representing an agent run |
| CLIENT span | "Remote call" | Span for a call to a remote agent service |
| INTERNAL span | "In-process" | Span for an in-process agent run |
| gen_ai.provider.name | "Provider" | anthropic / openai / aws.bedrock / google.vertex |
| gen_ai.data_source.id | "RAG source" | Which corpus/store a retrieval hit |
| Content capture | "Prompt logging" | Opt-in capture of messages; store externally in prod |
| Stability opt-in | "Preview mode" | Env var to pin experimental conventions |
Pour en savoir plus
- OpenTelemetry GenAI semantic conventions la spécification
- OpenAI Agents SDK Généraux par défaut
- AutoGen v0.4 (Microsoft Research) Des espaces OTel intégrés
- Claude Agent SDK Propagation du contexte de trace W3C
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.