ALLER AU CONTENU
AGENTS IA7 minAgents en production / Ép. 12 · Niveau 12-3

Coûts et audit d’agents : ce que couvre OpenTelemetry

Votre backend garde les spans 30 jours, et un auditeur vous interroge sur une décision d’agent de l’an dernier (cas fictif). Où cherchez-vous ?

XIN
Scène nocturne en pixel art : une table à cartes de navire sous une lampe. Des fils lumineux relient de petits robots posés sur la carte, et une punaise en laiton maintient la carte pendant que la mer bouge derrière la fenêtre.

EN 30 SECONDES

Les conventions GenAI sont solides sur le poste d’inférence du modèle de coûts d’un agent, et faibles sur son enregistrement d’audit. Les spans donnent aux autres postes une clé de jointure, et c’est l’enregistrement d’audit, pas la trace, qui reste la preuve.

À RETENIR · 3

  • Les conventions couvrent bien le poste d’inférence d’un modèle de coûts : tokens par modèle, lectures et écritures de cache. Elles comptent des tokens, jamais de l’argent.
  • La plupart des 14 champs de l’enregistrement d’audit n’ont pas de place dans gen_ai.*. Les spans servent d’index à l’enregistrement, pas d’enregistrement.
  • Décisions, relecture humaine, empreintes de preuves et conservation vont dans votre propre espace com.acme.* ou dans l’enregistrement lui-même.
Sur cette page

Ce que gen_ai.* couvre dans la facture d’un agent

EN BREF Les conventions couvrent bien le poste d’inférence d’un modèle de coûts, et donnent aux postes coûteux une clé de jointure, rien de plus.

LES MOTS À CONNAÎTRE

Span
Une étape de travail chronométrée, comme un appel de modèle ou d’outil, avec un nom et des paires clé-valeur appelées attributs.
Trace
L’ensemble des spans d’une exécution, reliés de parent à enfant, pour voir quelle étape en a lancé une autre.
Clé de jointure
Un identifiant stocké à deux endroits, pour qu’une donnée d’un système retrouve la donnée qui lui correspond dans un autre.
Enregistrement d’audit
La trace écrite de ce qu’un agent a décidé, sur quelles preuves, et de qui l’a relu, conservée pour un auditeur.

Dans l’article sur les coûts, j’ai découpé la facture mensuelle d’un agent en cinq postes. Mettez les conventions en face : la couverture est très inégale.

Inférence
Compteurs gen_ai.client.inference.usage.* par modèle et gen_ai.token.modality ; gen_ai.usage.* sur chaque span, lectures et écritures de cache comprises
Votre grille de prix. Les conventions comptent des tokens, jamais de l’argent
Plateforme
Rien de propre à la GenAI
Vos métriques d’infrastructure, jointes sur service.name
Maintenance des données
Les spans de recherche (gen_ai.data_source.id) montrent la source lue
Réindexation et connecteurs, depuis votre pipeline
Relecture humaine
Rien
Un indicateur de renvoi vers un humain sur le span d’agent, les minutes de relecture depuis la file
Maintenance d’ingénierie
Les histogrammes inference_calls et tool_calls montrent la dérive
Les heures, depuis les tickets

environ 5 %

du coût mensuel : le poste d’inférence que couvrent les conventions

Modèle illustratif de l’épisode 7, pas un chiffre mesuré.

Ne couvrir que ce poste n’est pas grave. Le poste d’inférence devient comparable d’un fournisseur à l’autre et d’un SDK à l’autre.

EN CLAIR

Les autres postes gagnent une Clé de jointure Un identifiant stocké à deux endroits, pour qu’une donnée d’un système retrouve la donnée qui lui correspond dans un autre. Voir le glossaire, un identifiant que le span partage avec vos autres données. Le coût d’une relecture se rattache au span qui a renvoyé le cas vers une personne.

Un piège : la #469 a retiré les champs de cache du span invoke_agent local, parce qu’ils mélangent plusieurs modèles. Prenez-les sur les spans d’inférence.

Les spans indexent l’audit, ils ne le remplacent pas

EN BREF La plupart des 14 champs d’audit n’ont pas de place dans gen_ai.* : les spans servent d’index, et l’enregistrement d’audit reste la référence.

L’Enregistrement d’audit La trace écrite de ce qu’un agent a décidé, sur quelles preuves, et de qui l’a relu, conservée pour un auditeur. Voir le glossaire de l’épisode 8 compte 14 champs. Le schéma montre où irait chacun.

OÙ VA CHAQUE CHAMP D’AUDIT
Diagramme en couches : 3 niveaux, de haut en basDiagramme en couches : 3 niveaux, de haut en bas. Niveau 1, DÉJÀ SUR LE SPAN : occurredAt, agentId (nom), modelId, promptVersion. Niveau 2, VOS PROPRES CLÉS COM.ACME.* : recordId, taskRef, decision, agentId (version). Niveau 3, SURTOUT DANS L’ENREGISTREMENT : actor, inputDigest, evidence (un span de recherche en couvre une partie), checks (résumé facultatif sur le span), humanReview, retentionClass, chain.DÉJÀ SUR LE SPANoccurredAtagentId (nom)modelIdpromptVersionVOS PROPRES CLÉS COM.ACME.*recordIdtaskRefdecisionagentId (version)SURTOUT DANS L’ENREGISTREMENTactorinputDigestevidence (un span derecherche en couvre unepartie)checks (résumé facultatifsur le span)humanReviewretentionClasschain
Les 14 champs de l’épisode 8, regroupés. com.acme remplace votre propre préfixe en nom de domaine inversé.
enregistrement d’audit → span
recordIdcom.acme.audit.record_id

La clé de jointure. Sur le span d’agent ; l’enregistrement garde l’identifiant de trace.

agentIdgen_ai.agent.name + com.acme.agent.version

La version n’est plus sur le span local.

promptVersiongen_ai.prompt.name + gen_ai.prompt.version

Tout schéma est permis : suivez votre outil de prompts si vous en avez un, sinon une empreinte du contenu convient.

evidencespan de recherche + enregistrement

gen_ai.retrieval.documents n’est pas activé par défaut et ne définit qu’un identifiant et un score facultatifs.

decisioncom.acme.decision

finish_reasons dit pourquoi le modèle s’est arrêté, pas ce que l’agent a décidé.

Une Trace L’ensemble des spans d’une exécution, reliés de parent à enfant, pour voir quelle étape en a lancé une autre. Voir le glossaire peut être échantillonnée, regroupée par lots, perdue ou réécrite en route. Puis le backend la supprime selon ses propres règles.

Le stockage des traces est bien pensé pour l’exploitation, et mal pensé pour la preuve.

LA QUESTION DE L’AUDITEUR

Diagramme de flux : 4 étapesDiagramme de flux : 4 étapes. Span d’agent, puis Enregistrement d’audit. Enregistrement d’audit, puis Backend de traces. Backend de traces, puis Réponse à l’auditeur.1Span d’agentPorte l’identifiantd’enregistrement2Enregistrement d’auditGarde l’identifiant de trace3Backend de tracesSupprime selon ses règles4Réponse à l’auditeurDepuis l’enregistrement

Étape 1. L’agent décide. Son span porte l’identifiant de l’enregistrement d’audit, sous com.acme.audit.record_id.

Choisissez une étape pour la voir bouger
  1. L’agent décide Son span porte l’identifiant de l’enregistrement d’audit, sous com.acme.audit.record_id.
  2. L’enregistrement garde l’identifiant de trace Décision, relecture et preuves vont dans l’enregistrement, qui pointe vers la trace.
  3. Jour 31 : la trace a disparu Le backend l’a supprimée comme prévu. Interroger les traces ne donne rien.
  4. L’enregistrement répond Un an plus tard, l’enregistrement répond à l’auditeur : le span n’était que l’index.
Cas fictif : un backend qui garde les traces 30 jours. Reliez les deux dans les deux sens : chacun retrouve l’autre.

Attention au préfixe. Pour vos propres noms, le guide de nommage d’OpenTelemetry recommande le domaine inversé de votre entreprise : com.acme pour acme.com. Il déconseille d’emprunter l’espace de noms d’une convention existante.

ADAM explique : Ma règle : n’inventez jamais de gen_ai.decision. Le jour où la spec en ajoute un avec un autre sens, vos données et les siennes entrent en collision.

OBJET OBTENU

Les spans sont l’index

Mettez l’identifiant d’enregistrement sur le span et celui de la trace dans l’enregistrement. C’est l’enregistrement, pas la trace, qui fait foi.

Sources, consultées le 7 octobre 2026 : métriques, spans d’agents, spans, nommage.

FAQ

Pas par défaut : selon les conventions, une instrumentation ne devrait pas capturer par défaut les instructions, les entrées ni les sorties (« SHOULD NOT »). Si le volume ou des données sensibles l’exigent, elles recommandent de stocker ce contenu ailleurs, avec une référence sur le span. La preuve d’audit reste ainsi chez vous.

NIVEAU TERMINÉ

Ce que vous savez maintenant

  • Quel poste de coût les conventions couvrent, et comment les autres postes se rattachent à un span.
  • Pourquoi c’est l’enregistrement d’audit, et non la trace, qui garde la preuve.

Vérifiez par vous-même

Touchez ou cliquez une question pour voir la réponse.

Vous devez noter qu’une personne a validé la décision d’un agent. Ajoutez-vous un attribut gen_ai.human_review ?

Non. N’inventez jamais de clé gen_ai.* : la spec pourrait en ajouter une avec un autre sens. Prenez votre propre espace com.acme.*, ou l’enregistrement d’audit vers lequel pointe le span.

Niveau suivant :Comment figer une version d’une spécification qui n’en a publié aucune ?7 min
Adam Boudjemaa
Adam Boudjemaa

Ingénieur web3 x IA, ancien CTO d’Integra. Auteur nommé (1 sur 5) d’ERC-3643, premier auteur d’ERC-6960, co-auteur d’ERC-7410 et co-auteur d’ERC-8203, encore à l’état de brouillon.

Un projet à livrer ou un poste à pourvoir ?

Parlons de votre besoin

Mon travail entre web3 et IAMes outils open source

Suivre les notes techniques

Recevez les nouveaux articles sur l’IA en production et les smart contracts par email.