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.
Un badge de priorité expliquant pourquoi un élément a été signalé pour relecture
Configuration
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: prioritySi 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érateur | Signification |
|---|---|
equals | correspondance exacte (les chaînes sont insensibles à la casse) |
in | la valeur fait partie d'une liste |
contains | le champ de liste contient, ou correspondance de sous-chaîne |
lt / lte / gt / gte | comparaison numérique |
exists | le 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 :
triage:
enabled: true
signal_field: quality_score # used as the priority when no rule matches
invert_signal: true # lower score => higher priorityComment 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
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.ruleset 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
- Alignement juge ↔ humain — quantifier l'accord juge/humain
- Évaluation de traces à trois volets — lire rapidement les traces entrantes
- Annotation agentique — ingestion et affichage des traces
Pour les détails d'implémentation, consultez la documentation source.