Aller au contenu principal

Scorer à grille d’évaluation

Ajouté dans : @mastra/evals@1.3.0

La fonction createRubricScorer() crée un scorer utilisant un LLM comme juge, qui note la sortie d’un Agent selon une grille d’évaluation, c’est-à-dire une liste de critères. Elle renvoie un score binaire : 1 uniquement lorsque tous les critères obligatoires sont satisfaits, sinon 0. Le champ reason répertorie le verdict de chaque critère afin que l’Agent sache exactement ce qu’il doit corriger.

Ce scorer est conçu pour être intégré à isTaskComplete. Comme isTaskComplete interprète score === 1 comme une tâche terminée et réinjecte reason dans la conversation en guise de retour, l’Agent continue d’itérer jusqu’à ce que la grille d’évaluation soit satisfaite ou que maxSteps soit atteint.

Paramètres
Lien direct vers Paramètres

model:

MastraModelConfig
Modèle de langage utilisé pour noter la sortie selon la grille d’évaluation. Un modèle plus petit et moins coûteux suffit généralement pour cette notation.

criteria:

RubricCriterion[] | string
Grille d’évaluation à utiliser pour la notation. Une chaîne est interprétée comme une liste délimitée par des sauts de ligne (chaque ligne devient un critère obligatoire). Si elle est omise, la grille est lue au moment de l’exécution depuis une valeur rubric du contexte de requête ou du contexte supplémentaire ; si aucune valeur n’est résolue, le scorer n’effectue aucune opération et renvoie 1.

options:

RubricScorerOptions
Options de configuration du scorer

Valeur renvoyée par .run()
Lien direct vers run-returns

score:

number
1 lorsque tous les critères obligatoires sont satisfaits, sinon 0 (multiplié par scale).

reason:

string
Explication pour chaque critère indiquant ceux qui sont satisfaits ou non, ainsi que la raison. Il s’agit du texte que isTaskComplete réinjecte dans la conversation en guise de retour.

Utilisation avec isTaskComplete
Lien direct vers Utilisation avec isTaskComplete

Définissez la grille d’évaluation une seule fois et associez le scorer à isTaskComplete : l’Agent se corrige alors lui-même jusqu’à ce que la grille soit satisfaite.

import { Agent } from '@mastra/core/agent'
import { createRubricScorer } from '@mastra/evals/scorers/prebuilt'

const supervisor = new Agent({
id: 'supervisor',
instructions: `You coordinate research and writing using specialized agents. Delegate to research-agent for facts, then writing-agent for content.`,
model: 'openai/gpt-5.6-sol',
agents: { researchAgent, writingAgent },
})

const rubricScorer = createRubricScorer({
model: 'openai/gpt-5-mini',
criteria: [
{ description: 'The response includes an analysis section' },
{ description: 'The response includes concrete recommendations' },
],
})

const stream = await supervisor.stream('Research AI in education', {
maxSteps: 10,
isTaskComplete: {
scorers: [rubricScorer],
strategy: 'all',
},
})

Grille d’évaluation sous forme de chaîne
Lien direct vers Grille d’évaluation sous forme de chaîne

Une chaîne délimitée par des sauts de ligne est analysée en critères, après suppression des marqueurs de liste courants (-, *, 1.). Chaque ligne devient un critère obligatoire :

const rubricScorer = createRubricScorer({
model: 'openai/gpt-5-mini',
criteria: `- All tests pass in the test suite
- The function is named find_duplicates and accepts a single list argument`,
})

Critères facultatifs
Lien direct vers Critères facultatifs

Déclarez un critère comme facultatif afin qu’il soit noté et signalé sans conditionner l’achèvement :

const rubricScorer = createRubricScorer({
model: 'openai/gpt-5-mini',
criteria: [
{ description: 'Includes an analysis section', required: true },
{ description: 'Includes citations', required: false },
],
})

Grille dynamique pour chaque exécution
Lien direct vers Grille dynamique pour chaque exécution

Lorsqu’aucun criteria n’est transmis à la fabrique, le scorer résout une valeur rubric à partir du contexte de requête, du contexte supplémentaire ou de l’entrée de l’exécution. Une même instance du scorer peut ainsi noter différentes grilles selon l’exécution, sans qu’il soit nécessaire de la recréer :

const rubricScorer = createRubricScorer({
model: 'openai/gpt-5-mini',
})

await supervisor.stream('Write find_duplicates', {
isTaskComplete: { scorers: [rubricScorer] },
requestContext: {
rubric: '- All tests pass\n- The function is named find_duplicates',
},
})

Si aucune grille d’évaluation n’est résolue, le scorer renvoie 1 et ne conditionne pas la boucle.

Détails de la notation
Lien direct vers Détails de la notation

Le scorer s’exécute en deux phases :

  1. Évaluation : le modèle juge évalue chaque critère indépendamment et renvoie un verdict pour chacun (satisfied ou non), accompagné d’un raisonnement.
  2. Score : le résultat vaut 1 uniquement lorsque tous les critères obligatoires sont satisfied, sinon 0. Si aucun critère n’est marqué comme obligatoire, ils sont tous traités comme tels.

Le champ reason résume le résultat et répertorie chaque critère avec son verdict. Une évaluation négative fournit ainsi à l’Agent un retour ciblé et utile plutôt qu’un simple message générique lui demandant de réessayer.