EVALUATOR_ENDPOINT sur le serveur.
Remarque : Vous définissez vous-même les dimensions de notation. Votre évaluateur peut retourner les clés numériques de son choix ; Observability stocke, suit les tendances et affiche tout ce que vous renvoyez.
En bref
- Écrivez un évaluateur. Déployez un petit service HTTP qui lit la transcription d’une session et retourne des scores. Observability inclut une référence fonctionnelle que vous pouvez copier. Voir Écrire un évaluateur avec le SDK.
- Pointez Observability vers ce service. Définissez
EVALUATOR_ENDPOINT(et unEVALUATOR_TOKENpartagé) sur le processus serveur. - Regardez les scores arriver. Chaque session terminée est notée automatiquement ; les résultats apparaissent sur la page de détail de la session, la grille des sessions et les tableaux de bord sauvegardés.

Fonctionnement
Lorsque le SDK Observability émet un événementagent_end pour une session, le serveur
planifie une évaluation. Il envoie ensuite en POST la transcription complète des événements à votre
service d’évaluation, qui peut alors :
-
Retourner le résultat immédiatement avec
{"status":"done", "scores":{...}, "reasoning":{...}, "summary":"..."}. Le résultat est ajouté à la chronologie d’évaluation de la session.reasoningetsummarysont optionnels. -
Différer avec
{"status":"pending", "job_id":"abc-123"}. Observability appelle alorsGET {EVALUATOR_ENDPOINT}/evaluate/abc-123jusqu’à ce que votre évaluateur retourne{"status":"done", ...}ou{"status":"error", "error":"..."}. La cadence de polling est par tâche : une réponsependingpeut inclurenext_poll_secspour la surcharger ; sinon Observability utilise la valeurdefault_poll_interval_secsissue deGET /config; sinon le serveur se rabat surEVALUATOR_POLLING_INTERVAL_SECS(défaut : 10 s). Toutes les valeurs sont limitées à [1 s, 1 h].
agent_end (par exemple, un processus d’agent planté)
peuvent également être traitées : le GET /config de l’évaluateur peut retourner
{"inactivity_timeout_secs": 1800}, et Observability évaluera toute session
restée inactive pendant ce délai. Définissez le champ à null ou omettez-le pour
désactiver ce comportement de secours.
Le pipeline est entièrement sans effet lorsque EVALUATOR_ENDPOINT n’est pas défini.
Une session peut accumuler plusieurs évaluations terminales dans le temps : chaque
événement agent_end (et chaque réévaluation manuelle depuis le tableau de bord) ajoute
une nouvelle ligne d’évaluation. C’est la méthode recommandée pour évaluer une conversation
reprise : un utilisateur termine un agent, revient plus tard, envoie de nouveaux événements,
termine à nouveau l’agent, et une seconde évaluation s’exécute sur la transcription complète mise à jour.
Le tableau de bord affiche l’évaluation la plus récente comme titre principal et les évaluations
précédentes sous forme de chronologie rétractable. Pendant qu’une évaluation est en cours pour
une session, les événements agent_end supplémentaires pour cette session sont ignorés ; le
suivant, une fois l’évaluation en cours terminée, mettra en file d’attente une nouvelle évaluation
comme d’habitude.
Le mécanisme de secours par inactivité se réengage également sur les sessions reprises : si
de nouveaux événements arrivent après une évaluation terminale précédente et que la session
reste ensuite inactive au-delà de inactivity_timeout_secs, une nouvelle évaluation est mise
en file d’attente.
Les échecs transitoires (5xx, 429, délais d’expiration, erreurs réseau) font l’objet de nouvelles
tentatives avec backoff exponentiel jusqu’à EVALUATOR_MAX_ATTEMPTS ; les réponses 4xx sont
terminales. Observability fonctionne en toute sécurité avec plusieurs instances de serveur à
échelle horizontale ; le travail est partitionné de sorte qu’une même session ne soit jamais
traitée deux fois simultanément.
Contrat HTTP
Toutes les routes authentifiées utilisent l’authentification par jeton bearer. La même valeur doit être configurée des deux côtés :- Serveur Observability : variable d’environnement
EVALUATOR_TOKEN - Service d’évaluation : configuré de la même façon (le SDK
agenteye-evaluatorlitEVALUATOR_TOKENpar convention)
EVALUATOR_TOKEN n’est pas défini, le serveur n’envoie pas d’en-tête Authorization ; l’évaluateur
peut alors accepter des requêtes anonymes, ce qui convient à un réseau purement interne
mais est déconseillé sur l’internet public.
Routes que l’évaluateur doit exposer
Corps EvalRequest envoyé par le serveur
Formats de réponse
Synchrone (done) :reasoning (une map de justification par score) et summary (un récit global
en un paragraphe) sont tous deux optionnels. Les clés de reasoning doivent
correspondre aux clés de scores ; le tableau de bord affiche chaque entrée en ligne sous
sa barre de score. Les anciens évaluateurs qui ne retournent que scores continuent de
fonctionner sans modification ; reasoning et summary sont simplement lus comme null et
les affordances d’interface correspondantes sont omises.
Asynchrone (différé) :
next_poll_secs est optionnel ; s’il est omis, le serveur se rabat sur le
default_poll_interval_secs de l’évaluateur depuis /config, puis sur sa propre
variable d’environnement EVALUATOR_POLLING_INTERVAL_SECS.
Erreur terminale côté évaluateur :
error terminale pour la session.
Écrire un évaluateur avec le SDK
Vous n’avez pas à implémenter le contrat HTTP manuellement. Le package Pythonagenteye-evaluator vous fournit un wrapper FastAPI typé qui gère l’authentification,
le routage et les formats requête/réponse à votre place.
Failproof AI Observability inclut également un évaluateur de référence fonctionnel qui
note helpfulness, tool_efficiency et factuality à partir de la forme de la transcription.
Copiez-le comme point de départ et remplacez-y votre propre logique : un juge LLM, un moteur de règles,
ou tout ce qui correspond à vos critères de qualité.
Évaluateur minimal :
app s’exécute sous n’importe quel serveur ASGI, donc uvicorn module:app suffit à la démarrer.
Pour les évaluateurs qui ont besoin de différer un traitement coûteux, retournez JobPending
à la place et enregistrez un handler @app.job_lookup ; le serveur Observability interroge
GET /evaluate/{job_id} jusqu’à ce que vous retourniez un statut terminal ou que le plafond
EVALUATOR_MAX_POLL_DURATION_SECS (défaut : 1 h) soit atteint.
La référence complète de l’API, le pattern asynchrone et le schéma des événements sont documentés dans
le README du SDK agenteye-evaluator.
Exécuter votre évaluateur
L’évaluateur est votre service — Failproof AI Observability ne fournit pas d’évaluateur par défaut, vous devez donc le créer et l’exécuter là où vous déployez vos propres services. Il s’exécute sous n’importe quel serveur ASGI (par exempleuvicorn my_evaluator:app) ; exposez
les routes /health, /config et /evaluate du
contrat HTTP, puis pointez le serveur vers ce service (voir
Configurer le serveur).
Une fois l’évaluateur accessible, GET /health retourne {"status":"ok"}. Après
l’exécution complète d’un agent, GET /evaluations sur le serveur retourne une ligne avec
status: "done" et les scores produits par votre évaluateur.
Configurer le serveur
À définir sur le processus serveur :
Pour activer la notation automatique, définissez
EVALUATOR_ENDPOINT et
EVALUATOR_TOKEN sur le serveur, puis redémarrez-le pour prendre en compte les modifications. Avec
EVALUATOR_ENDPOINT non défini, le pipeline reste sans effet.
Les paramètres de réglage ci-dessus sont optionnels ; définissez les variables d’environnement
correspondantes sur le serveur uniquement si vous avez besoin de remplacer les valeurs par défaut.
Référence API
Filtrage par plage de score : score_filters
GET /evaluations accepte un paramètre optionnel score_filters qui
restreint les résultats par valeurs numériques dans l’objet scores. Le
paramètre est une liste séparée par des virgules d’entrées key:min..max ; chaque
borne peut être omise. Plusieurs entrées se combinent avec un ET logique. Les lignes
où la clé nommée est absente ou non numérique sont exclues. Une requête peut
contenir au maximum 20 entrées de filtre ; au-delà, HTTP 400 est retourné.
Exemples :
/evaluations possède ces champs :
Permissions
L’administrateur bootstrap (
ADMIN_KEY, ADMIN_EMAIL) reçoit automatiquement toutes ces permissions.
Consultation des résultats
/sessions/<id>: chronologie des événements + un rail droit affichant les scores de la session et toute erreur de la tentative de dispatch. Si votre clé possèdeevaluations:trigger, un bouton re-evaluate apparaît à côté du bouton d’export, utile pour les sessions qui n’ont jamais émisagent_end, ou pour actualiser les scores après le déploiement d’un nouvel évaluateur. Le tableau de bord interroge le nouveau résultat et met à jour le rail droit à son arrivée./sessions: grille de sessions filtrables ; la colonne de score montre le statut d’évaluation et les scores de chaque session en un coup d’œil./dashboards: vues de santé d’évaluation sauvegardées (voir Tableaux de bord ci-dessous).

Tableaux de bord
La page Tableaux de bord (/dashboards) vous permet de sauvegarder une combinaison de filtres
d’évaluation sous forme de vue nommée et réutilisable, et de surveiller la santé de cette tranche
d’évaluations en un coup d’œil. Les tableaux de bord sont partagés au sein de toute votre organisation ;
toute personne disposant de dashboards:read voit le même ensemble.
Chaque tableau de bord épingle :
- Des filtres : les mêmes contrôles que la page des sessions : environnement, statut,
agent, une fenêtre temporelle glissante et des filtres de plage de score (
key:min..max). - Une configuration d’affichage : quelles clés de score mettre en avant, les seuils de santé vert/orange/rouge, quels panneaux afficher et s’il faut réduire à la dernière évaluation par session.
GET /evaluations/aggregate), les chiffres sont donc
exacts plutôt qu’échantillonnés.

dashboards:read et evaluations:read ;
la création et la modification nécessitent dashboards:write ; la suppression nécessite dashboards:delete.
L’administrateur bootstrap reçoit toutes ces permissions automatiquement.
Résolution des problèmes
Des sessions existent mais aucune évaluation n’est créée. Vérifiez queEVALUATOR_ENDPOINT
est défini sur le processus serveur, que le serveur et l’évaluateur partagent la même valeur
EVALUATOR_TOKEN et que l’endpoint /health de l’évaluateur est accessible depuis le serveur.
Sans EVALUATOR_ENDPOINT défini, le pipeline est sans effet.
Les évaluations en cours s’accumulent. Interrogez GET /evaluation-jobs pour voir la file
en cours. Inspectez attempt_count, next_attempt_at et last_error sur chaque ligne.
Causes courantes : service d’évaluation inaccessible ou retournant des erreurs 5xx (réessayées avec backoff),
EVALUATOR_TOKEN incorrect (401 est terminal), ou un évaluateur asynchrone qui retourne pending
indéfiniment (voir ci-dessous).
Des sessions sont terminées mais sans évaluation terminale. Interrogez
GET /evaluation-jobs?status=polling ; le résultat est peut-être encore en cours.
Si une tâche est bloquée en pending, le serveur a du mal à joindre l’évaluateur ;
vérifiez que l’évaluateur est opérationnel et que EVALUATOR_TOKEN correspond.
HTTP 401 from evaluator: invalid bearer token. Le EVALUATOR_TOKEN
sur le serveur ne correspond pas à la valeur configurée sur le service d’évaluation.
Ils doivent être identiques.
L’évaluateur asynchrone retourne pending indéfiniment. Le serveur interroge
GET /evaluate/{job_id} jusqu’à ce que l’évaluateur retourne done ou error, ou
jusqu’à ce que le plafond EVALUATOR_MAX_POLL_DURATION_SECS (défaut : 1 h) soit atteint.
Passé ce délai, l’évaluation est enregistrée comme timeout et retirée de la file en cours.
Augmentez EVALUATOR_MAX_POLL_DURATION_SECS si votre évaluateur a légitimement besoin
de plus de temps que la valeur par défaut.
Prochaines étapes
- Compétence d’agent évaluateur : demandez à un agent de codage de concevoir vos dimensions à partir de sessions réelles et de créer ce service pour vous.
- SDK Python : émettez les événements
agent_endqui déclenchent la notation. - Clés API : les permissions
evaluations:readetevaluations:trigger. - Audits : l’autre fonctionnalité de contrôle qualité automatisé d’Observability, pour la revue basée sur des politiques.

