Aller au contenu principal

Schéma de suite d'évaluation

Une suite d'évaluation est un fichier TOML que vous écrivez à la main. Elle nomme un ensemble de tâches ; chaque tâche porte un prompt, un nombre d'exécutions, un agent cible optionnel, et une liste d'assertions typées qui décident du succès ou de l'échec. apollia-os eval run la lit, l'exécute, et se termine avec un code de sortie non nul si une assertion échoue sur une exécution.

Pour le guide opérateur, avec les étapes de l'interface et comment lire un rapport, voir Mesurer un agent avec eval.

Les tableaux ci-dessous sont générés à partir des types Rust qui analysent le fichier ; ils ne peuvent donc pas diverger de ce que l'analyseur accepte. Un champ absent de ces tableaux est un champ que l'analyseur rejette.

La suite​

CléTypeObligatoireSignification
nameStringobligatoireNom de la suite lisible par un humain, affiché dans les rapports.
tasksVec<EvalTask>optionnelTâches à évaluer. Vide par défaut quand le tableau tasks est absent.

Une tâche​

CléTypeObligatoireSignification
idStringobligatoireIdentifiant stable de la tâche, utilisé comme clé de ligne dans le rapport.
promptStringobligatoireL'instruction soumise à l'agent.
runsu32optionnelNombre de fois où la tâche est exécutée. Vaut 3 par défaut.
agentOption<String>optionnelIdentifiant de l'agent cible. None laisse le choix à l'appelant.
assertionsVec<Assertion>optionnelAssertions typées de succès/échec évaluées à chaque exécution.

Assertions​

Chaque entrée sous [[tasks.assertions]] porte une clé type qui sélectionne la forme. Les champs listés sont ceux que cette forme accepte, et aucun autre.

typeSes champsCe qu'elle vérifie
exit_codeequalsRéussit quand le code de sortie de l'exécution est égal à equals.
file_existspathRéussit quand un fichier existe à path après l'exécution.
regexon, patternRéussit quand pattern correspond au canal de sortie sélectionné.
llm_judgerubricRéussit quand un juge LLM évalue la sortie par rapport à rubric comme un succès.

on, le canal contre lequel une assertion regex effectue sa comparaison​

ValeurSignification
stdoutLa sortie standard (stdout) diffusée en flux de l'exécution.
resultLe texte du résultat final de l'exécution.

Un exemple complet​

name = "my-validation-suite"

[[tasks]]
id = "summarize-text"
prompt = "Summarize this text in three sentences: [...]"
runs = 3

[[tasks.assertions]]
type = "exit_code"
equals = 0

[[tasks.assertions]]
type = "file_exists"
path = "output/summary.txt"

[[tasks.assertions]]
type = "regex"
pattern = "\\b(summary|synthesis)\\b"
on = "stdout"

[[tasks.assertions]]
type = "llm_judge"
rubric = "The answer must be a coherent three-sentence summary of the source text."

Ce que l'analyseur refuse​

Se tromper dans le nom d'un champ fait échouer le chargement plutôt que d'ignorer silencieusement la vérification, ce qui est le comportement attendu d'un harnais de test. Si apollia-os eval run signale une suite invalide, comparez d'abord vos clés d'assertion aux tableaux ci-dessus avant de chercher ailleurs.

llm_judge prend un rubric et rien d'autre. Il n'y a aucune valeur attendue à fournir : le rubric est le critère entier, et le juge répond en fonction de lui.

apollia-os eval run construit son exécuteur sans juge, si bien que toute assertion llm_judge échoue aujourd'hui, avec la raison « llm judge not evaluated: this runner has no judge router ». C'est délibéré du côté du harnais, une assertion que rien n'a vérifiée n'est jamais comptée comme réussie, et ce n'est pas un problème de backend : en configurer un n'y change rien. Tant que la commande ne câble pas de juge, écrivez vos suites sur exit_code, file_exists et regex.