Aller au contenu principal

Quick Checks

Quick Checks regroupe des micro-Scorers composables sans LLM destinés aux assertions courantes. Ils s'intègrent au tableau scorers: [...] existant partout où des Scorers sont utilisés : dans runEvals, le scoring en direct, les expériences et Studio.

En interne, il s'agit d'instances standard de createScorer() ; elles bénéficient donc de la même observabilité, du même stockage et de la même intégration au pipeline que tout autre Scorer.

Exemple d'utilisation
Lien direct vers Exemple d'utilisation

src/evals/weather-checks.ts
import { checks } from '@mastra/evals/checks'
import { runEvals } from '@mastra/core/evals'
import { myAgent } from '../agents'

const result = await runEvals({
data: [{ input: 'What is the weather in Brooklyn?' }],
target: myAgent,
scorers: [
checks.includes('sunny'),
checks.calledTool('get_weather'),
checks.toolOrder(['get_weather', 'summarize']),
checks.noToolErrors(),
],
})

console.log(result.scores)

Vérifications de texte
Lien direct vers Vérifications de texte

checks.includes(expected, options?)
Lien direct vers checksincludesexpected-options

Attribue un score de 1 si le texte de sortie de l'agent contient la sous-chaîne attendue, et de 0 dans le cas contraire.

checks.includes('sunny')
checks.includes('Sunny', { ignoreCase: false })

expected:

string
Sous-chaîne à rechercher dans la sortie.

options.ignoreCase?:

boolean
= true
Correspondance insensible à la casse.

Renvoie : 1 si la sous-chaîne est trouvée, 0 dans le cas contraire.

checks.excludes(unwanted, options?)
Lien direct vers checksexcludesunwanted-options

Attribue un score de 1 si le texte de sortie de l'agent ne contient pas la sous-chaîne, et de 0 dans le cas contraire.

checks.excludes('error')
checks.excludes('Error', { ignoreCase: false })

unwanted:

string
Sous-chaîne qui ne doit pas apparaître dans la sortie.

options.ignoreCase?:

boolean
= true
Correspondance insensible à la casse.

Renvoie : 1 si la sous-chaîne est absente, 0 dans le cas contraire.

checks.equals(expected, options?)
Lien direct vers checksequalsexpected-options

Attribue un score de 1 si le texte de sortie correspond exactement à la chaîne attendue après une éventuelle normalisation.

checks.equals('Hello, world!')
checks.equals('Hello', { ignoreCase: false })

expected:

string
Chaîne exacte à laquelle la sortie doit correspondre.

options.ignoreCase?:

boolean
= true
Correspondance insensible à la casse.

Renvoie : 1 si les chaînes sont égales, 0 dans le cas contraire.

checks.matches(pattern, options?)
Lien direct vers checksmatchespattern-options

Attribue un score de 1 si la sortie correspond à l'expression régulière.

checks.matches(/\d+°[FC]/)
checks.matches(/^hello$/, { exact: true })

pattern:

RegExp
Expression régulière à tester par rapport à la sortie.

options.exact?:

boolean
= false
Ancre le modèle afin qu’il corresponde à l’intégralité de la sortie (ajoute ^ et $).

Renvoie : 1 en cas de correspondance, 0 dans le cas contraire.

checks.similarity(expected, options?)
Lien direct vers checkssimilarityexpected-options

Renvoie le score de similarité des chaînes (0-1) entre la sortie et une chaîne attendue en utilisant le coefficient de Dice. Lorsqu'un threshold est défini, renvoie à la place une valeur binaire 1/0.

checks.similarity('Sunny, 72°F')
checks.similarity('Sunny, 72°F', { threshold: 0.7 })

expected:

string
Chaîne de référence à utiliser pour la comparaison.

options.threshold?:

number
Score de similarité minimal (0-1) pour renvoyer 1. S’il est omis, renvoie le score de similarité brut.

options.ignoreCase?:

boolean
= true
Comparaison insensible à la casse.

Renvoie : le score de similarité brut (0-1), ou la valeur binaire 1/0 lorsque threshold est défini.

Vérifications des appels de Tools
Lien direct vers Vérifications des appels de Tools

checks.calledTool(toolName, options?)
Lien direct vers checkscalledtooltoolname-options

Attribue un score de 1 si l'agent a appelé le Tool indiqué au moins le nombre de fois requis.

checks.calledTool('get_weather')
checks.calledTool('search', { times: 2 })

toolName:

string
Nom du Tool à rechercher.

options.times?:

number
= 1
Nombre minimal de fois où le Tool doit être appelé.

Renvoie : 1 si le Tool a été appelé au moins times fois, 0 dans le cas contraire.

checks.didNotCall(toolName)
Lien direct vers checksdidnotcalltoolname

Attribue un score de 1 si l'agent n'a pas appelé le Tool indiqué.

checks.didNotCall('delete_user')

toolName:

string
Nom du Tool qui ne doit pas apparaître.

Renvoie : 1 si le Tool n'a pas été appelé, 0 dans le cas contraire.

checks.toolOrder(expectedOrder)
Lien direct vers checkstoolorderexpectedorder

Attribue un score de 1 si les Tools ont été appelés dans l'ordre indiqué. Utilise une correspondance souple : d'autres appels de Tools sont autorisés entre les Tools attendus.

checks.toolOrder(['search', 'summarize', 'respond'])

expectedOrder:

string[]
Noms des Tools dans la séquence d’appel attendue. Ils doivent apparaître comme une sous-séquence des appels de Tools réels.

Renvoie : 1 si l'ordre attendu est respecté, 0 dans le cas contraire.

checks.maxToolCalls(max)
Lien direct vers checksmaxtoolcallsmax

Attribue un score de 1 si l'agent n'a pas effectué plus de max appels de Tools.

checks.maxToolCalls(5)

max:

number
Nombre maximal d’appels de Tools autorisé.

Renvoie : 1 si la limite est respectée, 0 dans le cas contraire.

checks.usedNoTools()
Lien direct vers checksusednotools

Attribue un score de 1 si l'agent n'a effectué aucun appel de Tool.

checks.usedNoTools()

Renvoie : 1 si aucun Tool n'a été appelé, 0 dans le cas contraire.

checks.noToolErrors()
Lien direct vers checksnotoolerrors

Attribue un score de 1 si aucun appel de Tool n'a produit d'état d'erreur. Détecte aussi bien les résultats en erreur (result.error présent) que les appels de Tools incomplets (state === 'call').

checks.noToolErrors()

Renvoie : 1 si tous les appels de Tools ont réussi, 0 dans le cas contraire.

Combiner les vérifications avec d'autres Scorers
Lien direct vers Combiner les vérifications avec d'autres Scorers

Les vérifications se combinent avec des Scorers fondés sur un LLM ou sur du code dans le même tableau scorers :

src/evals/combined-eval.ts
import { checks } from '@mastra/evals/checks'
import { createAnswerRelevancyScorer } from '@mastra/evals/scorers/prebuilt'
import { runEvals } from '@mastra/core/evals'
import { myAgent } from '../agents'

const result = await runEvals({
data: [{ input: 'What is the weather in Brooklyn?' }],
target: myAgent,
scorers: [
// Zero-LLM checks
checks.includes('Brooklyn'),
checks.calledTool('get_weather'),
checks.noToolErrors(),
// LLM-based scorer
createAnswerRelevancyScorer({ model: 'openai/gpt-5-mini' }),
],
})