Skip to main content
Failproof AI Observability peut noter automatiquement chaque exécution d’agent terminée pour en évaluer la qualité : vous fournissez un petit service de notation, et Observability s’occupe du reste. Utilisez-le pour suivre les dimensions qui vous importent (utilité, efficacité des outils, factualité, sécurité — vous choisissez), détecter les régressions tôt et comparer des agents ou des environnements en un coup d’œil. La notation est optionnelle : le pipeline ne fait rien tant que vous n’avez pas défini 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

  1. É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.
  2. Pointez Observability vers ce service. Définissez EVALUATOR_ENDPOINT (et un EVALUATOR_TOKEN partagé) sur le processus serveur.
  3. 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.
Vue de détail d'une session avec le résumé de l'évaluation, les barres de score par dimension et le texte de justification dans le rail droit Une fois un évaluateur configuré, chaque exécution terminée est notée et les résultats apparaissent dans le rail droit de la session : le résumé en haut, puis les barres de score par dimension avec leur justification.

Fonctionnement

Lorsque le SDK Observability émet un événement agent_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. reasoning et summary sont optionnels.
  • Différer avec {"status":"pending", "job_id":"abc-123"}. Observability appelle alors GET {EVALUATOR_ENDPOINT}/evaluate/abc-123 jusqu’à ce que votre évaluateur retourne {"status":"done", ...} ou {"status":"error", "error":"..."}. La cadence de polling est par tâche : une réponse pending peut inclure next_poll_secs pour la surcharger ; sinon Observability utilise la valeur default_poll_interval_secs issue de GET /config ; sinon le serveur se rabat sur EVALUATOR_POLLING_INTERVAL_SECS (défaut : 10 s). Toutes les valeurs sont limitées à [1 s, 1 h].
Les sessions qui n’émettent jamais 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-evaluator lit EVALUATOR_TOKEN par convention)
Si 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 :
Le serveur traite tout autre corps 2xx comme une erreur de protocole et enregistre une error terminale pour la session.

Écrire un évaluateur avec le SDK

Vous n’avez pas à implémenter le contrat HTTP manuellement. Le package Python agenteye-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 :
L’instance 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 exemple uvicorn 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 :
Chaque objet de réponse /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ède evaluations:trigger, un bouton re-evaluate apparaît à côté du bouton d’export, utile pour les sessions qui n’ont jamais émis agent_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).
La grille Sessions avec des pastilles de statut d'évaluation par session et des badges de score colorés (helpfulness, factuality, tool_efficiency, safety, coherence) La grille des sessions affiche le statut d’évaluation et les scores de chaque exécution en un coup d’œil ; les badges rouge/orange/vert font ressortir les scores faibles.

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.
Chaque carte affiche le nombre de sessions correspondantes, une répartition done/error/timeout, la moyenne de chaque score mis en avant et une petite sparkline de tendance. Ouvrir un tableau de bord affiche les panneaux en plein écran ; « ouvrir dans les sessions » vous conduit vers la page des sessions pré-filtrée sur exactement cette tranche. Les métriques sont calculées côté serveur sur l’ensemble correspondant (via GET /evaluations/aggregate), les chiffres sont donc exacts plutôt qu’échantillonnés. Un tableau de bord de santé d'évaluation avec des barres de score moyen par dimension d'évaluateur, une répartition outil ok/erreur, les meilleurs outils et une tendance d'événements par heure Permissions : la consultation nécessite à la fois 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 que EVALUATOR_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_end qui déclenchent la notation.
  • Clés API : les permissions evaluations:read et evaluations:trigger.
  • Audits : l’autre fonctionnalité de contrôle qualité automatisé d’Observability, pour la revue basée sur des politiques.