Skip to content

File de triage basée sur un signal

Priorisez la file d'annotation selon un signal de qualité par élément afin que les relecteurs voient d'abord les traces les pires ou les plus suspectes, au lieu d'annoter par ordre d'arrivée. Routez par erreurs de l'agent, votes négatifs en production, scores faibles ou tout champ personnalisé.

La file de triage priorise l'annotation selon un signal de qualité par élément, afin que les relecteurs voient d'abord les éléments les pires ou les plus suspects au lieu de travailler par ordre d'arrivée (FIFO). Le signal peut être une erreur de l'agent, un vote négatif en production, un score automatique faible ou tout champ personnalisé. Il est lu à la fois pour les données chargées statiquement et pour les traces ingérées à l'exécution, et il apparaît à deux endroits : une bannière pendant l'annotation et la page de classement /admin/triage-queue.

Lorsque le temps de relecture humaine est rare, l'ordre dans lequel les éléments parviennent aux annotateurs compte. Router en premier les éléments les plus informatifs constitue la moitié triage d'une boucle d'évaluation active, et cela se combine naturellement avec l'alignement du juge pour envoyer d'abord les désaccords et les erreurs aux humains.

Badge de triage pendant l'annotationUn badge de priorité expliquant pourquoi un élément a été signalé pour relecture

Configuration

yaml
triage:
  enabled: true
  order: desc            # high priority first (default); 'asc' = low first
  default_priority: 0    # items matching no rule
  show_badge: true       # banner during annotation explaining the priority
  rules:                 # evaluated in order; highest matching priority wins
    - name: "Agent errored"
      badge: "Agent errored"     # banner text (defaults to name)
      priority: 100
      when:
        field: status            # dotted paths allowed, e.g. metadata.tags
        equals: error
    - name: "Negative feedback"
      priority: 80
      when:
        field: feedback
        in: [thumbs_down, negative]
    - name: "Low quality score"
      priority: 60
      when:
        field: score
        lt: 0.5
 
# Serve the highest-priority items first. If you enable triage without setting
# assignment_strategy, Potato defaults to `priority` automatically.
assignment_strategy: priority

Si vous omettez rules (et signal_field), Potato utilise un ensemble par défaut clé en main : statut d'erreur (100), retour négatif (80) et score inférieur à 0.5 (60).

Opérateurs de condition

OpérateurSignification
equalscorrespondance exacte (les chaînes sont insensibles à la casse)
inla valeur fait partie d'une liste
containsle champ de liste contient, ou correspondance de sous-chaîne
lt / lte / gt / gtecomparaison numérique
existsle champ est présent ou absent (true/false)

Lire un signal numérique directement

À la place des règles, ou en complément, vous pouvez lire un nombre directement depuis un champ :

yaml
triage:
  enabled: true
  signal_field: quality_score   # used as the priority when no rule matches
  invert_signal: true           # lower score => higher priority

Comment la priorité pilote l'affectation

Définissez assignment_strategy: priority. Lorsqu'un utilisateur a besoin d'éléments, la file est triée selon le triage_priority stocké de chaque élément (décroissant par défaut ; order: asc l'inverse), les égalités étant départagées par l'ordre de chargement d'origine pour garantir le déterminisme, et les éléments en tête sont affectés. Le signal est calculé une seule fois au moment du chargement ou de l'ingestion et stocké sur l'élément, de sorte que l'affectation reste peu coûteuse.

Le badge (show_badge: true) est indépendant de la stratégie. Il explique pourquoi un élément a été signalé même si vous conservez une stratégie d'affectation différente.

La page de file d'administration

text
GET /admin/triage-queue              # JSON
GET /admin/triage-queue?format=html  # rendered page

Envoyez l'en-tête X-API-Key. La page affiche tous les éléments restants (incomplets) classés par priorité, avec la règle qui les a signalés, le nombre d'annotations actuel et s'ils sont déjà affectés.

Ingestion à l'exécution

Comme le scoreur s'exécute au fur et à mesure de l'ajout des éléments, les traces ingérées à l'exécution via l'ingestion de traces (le point de terminaison webhook ou un sondeur Langfuse) sont notées dès leur arrivée et s'insèrent automatiquement dans la file de priorité. Une trace à faible score ou en erreur poussée en milieu de session passe devant les traces propres qui attendent encore.

Remarques et limites

  • La priorité est calculée au moment de l'insertion. Modifier triage.rules et redémarrer recalcule tout au prochain chargement.
  • Une règle mal formée consigne un avertissement et est ignorée ; elle ne bloque jamais le chargement des données.
  • Le triage ordonne quels éléments sont servis. Il ne modifie pas les plafonds d'annotation par élément.

Voir aussi

Pour les détails d'implémentation, consultez la documentation source.