NIA One · Docs
Plateforme

Exploiter les metadata

Vous attachez des labels et des annotations (données JSON libres) côté SDK (voir Labels & annotations). Cette page explique comment les exploiter dans la plateforme : colonnes Explore, filtres, recherche, onglet Metadata d'une session, sélection des juges et triage. C'est la question la plus fréquente une fois l'instrumentation en place : « j'envoie des metadata, maintenant j'en fais quoi ? ».

SDK
payload(step, "input", data, content,
  annotations={
    "user.email": "ana@acme.io",
    "request.intent": "refund",
  })
ingestion
Explore
ana@acme.io intent = refund
trace
statut
user.email
a1b2…
success
ana@acme.io
c3d4…
success
ana@acme.io

colonne custom · filtre · recherche plein-texte

Une annotation envoyée par le SDK devient une colonne exploitable dans Explore.

Rappel : deux mécanismes, deux usages

RôleExploitation
LabelsSélectionner (clés courtes, stables, custom préfixées x.)Filtres, regroupement, ciblage des juges, indexation
AnnotationsDécrire (JSON libre : contexte métier, config)Colonnes custom, recherche plein-texte, contexte de triage

La règle d'or

Une valeur sur laquelle vous voulez filtrer ou router → un label (x.). Une valeur que vous voulez lire, chercher ou afficher → une annotation. Dans le doute, mettez-la en annotation : c'est réversible, une annotation ne coûte rien au moteur de sélection.

De l'annotation à la colonne Explore

Toute annotation peut devenir une colonne personnalisée dans Explore (affichable, triable et filtrable) en pointant son chemin JSON.

  1. 1

    Ouvrir le sélecteur de colonnes

    Dans Explore, ouvrez Colonnes (le sélecteur en haut de la table). Trois familles y cohabitent : colonnes standard, métriques découvertes, et champs custom.

  2. 2

    Choisir un champ custom

    Parcourez les chemins d'annotation découverts sur vos events (regroupés par racine, ex. flow › branch › group) ou saisissez le chemin directement, par exemple annotations.user.email.

  3. 3

    Exploiter la colonne

    La colonne apparaît dans la table, avec un libellé humanisé (user_email → « User Email »). Elle devient triable, alimente les filtres et la recherche. Réordonnez par glisser-déposer ; retirez-la d'un clic.

Limites du sélecteur

Le sélecteur borne le nombre de colonnes actives (par défaut une vingtaine au total, réparties entre champs custom, métriques et juges) pour garder la table lisible et les requêtes rapides. Gardez les colonnes qui portent une décision, pas toutes vos annotations.

Filtrer, trier, chercher

Le panneau Filtres (à côté de la recherche) adapte son contrôle au type de la colonne :

Type de colonneContrôle de filtre
NumériqueCurseur de plage min–max (bornes déduites des données)
Texte / catégorieMulti-sélection des valeurs distinctes
Liste (array)Opérateur « contient » — sélection parmi les valeurs présentes
Date / heurePlage de dates, bornée par la fenêtre de la page
MétriqueSeuil sur une métrique agrégée (somme, moyenne, p95…)
JugeFiltrer par verdict ou score d'un juge
  • Recherche plein-texte : par id, contenu, ou valeur d'annotation (indexée par Typesense). Tapez refund pour retrouver toutes les traces dont une annotation vaut « refund ».
  • Les filtres suivent vos colonnes : seules les colonnes actives sont filtrables. Ajoutez la colonne d'abord, puis filtrez dessus.

L'onglet Metadata d'une session

Ouvrez une session (Explore → Sessions), puis l'onglet Metadata. Il répond à « quelle est la metadata de cette conversation, et qu'est-ce qui change d'un tour à l'autre ? ».

ZoneContenu
Contexte commun (gauche)Ce qui est constant sur toute la session, affiché une seule fois : Annotations, Context, Labels.
Variations par tour (droite)Uniquement ce qui diffère du contexte commun, tour par tour, avec statut, phase et trace_id.
  • Les trois ensembles, Annotations, Context et Labels, reflètent exactement ce que votre SDK a envoyé, après propagation flow → step → event.
  • Chaque carte de tour est cliquable : le bouton « aller au tour » bascule sur l'onglet Conversation et met le tour en surbrillance. Inversement, depuis la Conversation, un tour renvoie vers sa metadata (saut conversation → metadata).
  • L'onglet Models voisin fait la même lecture pour les modèles appelés par tour (fournisseur, tokens, coût, latence, paramètres d'échantillonnage).

Contexte commun vs variations

Posez le contexte stable (utilisateur, segment, locale) au niveau du flow : il remonte dans le contexte commun, sans bruit. Ne mettez au niveau event que ce qui varie réellement d'un tour à l'autre : c'est ce que la colonne « variations » met en avant.

Router la sélection par label

Les labels ne servent pas qu'à filtrer l'affichage : ils pilotent la sélection système.

  • Ciblage des juges : une liaison de juge se scope à un SIA, un asset et un déclencheur, et peut cibler des labels (ex. n'évaluer que les events x.crm.segment = vip). Voir Juges.
  • Regroupement & indexation : les labels réservés (env, team, flow.phase, asset.role…) structurent l'agrégation des KPIs et l'indexation ; vos labels x. s'y ajoutent.

Label, pas annotation, pour router

Le routage (juges, regroupement) se fait sur des labels. Une annotation décrit, elle ne sélectionne pas. Si vous vous surprenez à vouloir filtrer un juge sur une annotation, c'est probablement un label déguisé : promouvez-la en label x..

Metadata au moment du triage

Les alertes se déclenchent sur des métriques et des verdicts de juge, pas sur des annotations arbitraires. Mais quand une alerte ou un score faible vous amène sur une trace, ce sont vos annotations et votre contexte qui donnent le sens métier : quel utilisateur, quel segment, quelle intention. C'est ce qui transforme « une latence a dépassé le seuil » en « le parcours refund des clients vip ralentit ». Enrichissez pour trier vite. Voir Alerting.

Patterns courants

Cas d'usageCléExploitation
Segmentation clientLabelx.crm.segmentFiltre Explore + ciblage de juge sur les VIP
Feature flag / varianteLabelx.feature.variantComparer deux variantes dans Explore
A/B & expérimentationLabelx.experiment.armRegrouper les KPIs par bras d'expérience
Suivi utilisateurAnnotationuser.emailColonne custom + recherche plein-texte
Intention métierAnnotationrequest.intentColonne + filtre « toutes les demandes refund »

Dépannage

SymptômeCause probable & correctif
Ma colonne custom reste videLe chemin JSON ne correspond pas, ou l'annotation n'a pas été émise sur ces events. Vérifiez le chemin exact dans l'onglet Metadata ; l'indexation peut prendre un court instant.
Mon label custom est ignoréPréfixe x. obligatoire, en minuscules. Sans x., une clé custom est rejetée.
La recherche ne trouve pas ma valeurSeules les annotations sont indexées (pas les gros blobs de payload). Mettez la valeur en annotation, pas en contenu brut.
Trop de valeurs / cardinalitéNe mettez jamais d'IDs ni de gros JSON en label (trace_id, prompt complet) — utilisez une annotation pour ça.

On this page