Combiner des évaluateurs

Vous pouvez empiler autant d’évaluateurs que nécessaire en une seule exécution. Le SDK calcule automatiquement les statistiques (moyenne, min, max, écart-type) pour chaque évaluateur.

Exemple : plusieurs notateurs basés sur des règles

Exemple : plusieurs notateurs basés sur des règles

import asyncio
import os

from mistralai.observability import Evaluation, Evaluator, Mistral, ScorerContext, System, TaskContext

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

def contains_expected(ctx: ScorerContext) -> int:
    return 1 if ctx.input_record["expected"] in str(ctx.output).lower() else 0

def is_short(ctx: ScorerContext) -> int:
    return 1 if len(str(ctx.output)) < 80 else 0

def starts_capitalized(ctx: ScorerContext) -> int:
    text = str(ctx.output).strip()
    return 1 if text and text[0].isupper() else 0

async def task(ctx: TaskContext) -> str:
    response = await client.chat.complete_async(
        model="mistral-small-latest",
        messages=[{"role": "user", "content": ctx.input_record["prompt"]}],
    )
    return str(response.choices[0].message.content)

async def main():
    run = await client.evaluation.run(
        evaluation=Evaluation(name="Multi-metric eval"),
        dataset=dataset,
        task=task,
        evaluators=[
            Evaluator(name="contains_expected", description="1 if expected substring is in the output.", scorer=contains_expected),
            Evaluator(name="is_short", description="1 if the output is under 80 characters.", scorer=is_short),
            Evaluator(name="starts_capitalized", description="1 if the output starts with an uppercase letter.", scorer=starts_capitalized),
        ],
    )
    run.show(level="run")

asyncio.run(main())
Combiner des évaluateurs basés sur des règles et des juges LLM

Combiner des évaluateurs basés sur des règles et des juges LLM

Vous pouvez combiner librement des notateurs basés sur des règles et des notateurs basés sur des LLM dans la même exécution :

evaluators=[
    Evaluator(name="exact_match", description="1 if output matches expected exactly.", scorer=exact_match_scorer),
    Evaluator(name="llm_quality", description="LLM judge quality score (0 to 5).", scorer=llm_judge, num_scores=3),
    Evaluator(name="response_length", description="Character count of the output.", scorer=length_scorer),
]

Chaque évaluateur produit des statistiques indépendantes. Dans Studio, vous pouvez filtrer et comparer toutes les métriques.

Objectifs indépendants par évaluateur

Objectifs indépendants par évaluateur

Définissez des critères de réussite/échec différents pour chaque évaluateur :

from mistralai.observability import Goal

evaluators=[
    Evaluator(name="exact_match", description="1 if output matches expected exactly.", scorer=exact_match_scorer, goal=Goal.gte(0.8)),
    Evaluator(name="llm_quality", description="LLM judge quality score (0 to 5).", scorer=llm_judge, goal=Goal.gte(3.5)),
    Evaluator(name="response_length", description="Character count of the output.", scorer=length_scorer, goal=Goal.lte(500)),
]

Consultez les objectifs pour le guide complet.

Statistiques calculées par évaluateur

Statistiques calculées par évaluateur

StatistiqueDescription
avgNote moyenne sur tous les enregistrements
minNote minimale
maxNote maximale
stdÉcart-type
countNombre d’enregistrements notés

Pour les notes non numériques (valeurs catégorielles), le SDK calcule les distributions de fréquences et le mode à la place.