"Guide de démarrage : exécuter votre première évaluation"

"Guide de démarrage : exécuter votre première évaluation"

Ce guide de démarrage évalue un prompt qui détecte la langue d'une phrase. Vous l'exécutez sur un ensemble de données de trois phrases, attribuez un score à chaque réponse et lisez les résultats dans votre terminal et dans Studio.

Une évaluation comporte quatre parties : un ensemble de données de cas de test, une tâche qui produit une sortie pour chaque cas, des évaluateurs qui attribuent un score à chaque sortie, et les résultats.

Vous avez besoin de Python 3.12 ou version ultérieure, de uv et d'une clé API Mistral. Les évaluations hors ligne sont réservées aux organisations disposant d'un plan Enterprise. Pour les autres organisations, la section Évaluer n'apparaît pas dans Studio et l'API d'évaluations renvoie une erreur 403.

Installer le SDK

Installer le SDK

Créez un projet et ajoutez le SDK d'évaluation :

uv init first-evaluation && cd first-evaluation
uv add mistralai-evaluations
export MISTRAL_API_KEY="your-api-key"

Écrire l'évaluation

Écrire l'évaluation

Créez eval.py :

import asyncio
import os

from mistralai.evaluations import (
    Evaluation, Evaluator, Goal, Mistral, Project, ScorerContext, System, TaskContext,
)

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

# 1. The dataset: each record is a test case with its expected answer.
dataset = [
    {"sentence": "Hello, how are you?", "groundtruth": "English"},
    {"sentence": "Bonjour, comment ça va?", "groundtruth": "French"},
    {"sentence": "Hola, ¿cómo estás?", "groundtruth": "Spanish"},
]

# 2. The task: the code you evaluate. It reads the model and the prompt from the system params.
async def task(ctx: TaskContext) -> str:
    response = await client.chat.complete_async(
        model=str(ctx.system.params["model"]),
        messages=[
            {"role": "system", "content": str(ctx.system.params["system_prompt"])},
            {"role": "user", "content": ctx.input_record["sentence"]},
        ],
    )
    return str(response.choices[0].message.content)

# 3. The scorer: 1 if the answer matches the expected language, 0 otherwise.
def scorer(ctx: ScorerContext) -> int:
    return 1 if ctx.input_record["groundtruth"].lower() == str(ctx.output).lower() else 0

# 4. The run: ties the dataset, task, and evaluator together and uploads the results to Studio.
async def main():
    run = await client.evaluation.run(
        project=Project(name="Language Detection"),
        evaluation=Evaluation(name="Accuracy Eval"),
        system=System(name="mistral-small", params={
            "model": "mistral-small-latest",
            "system_prompt": "What language is this sentence in? Reply with ONLY the language name.",
        }),
        dataset=dataset,
        task=task,
        evaluators=[
            Evaluator(
                name="accuracy",
                description="1 if the detected language matches the groundtruth, 0 otherwise.",
                scorer=scorer,
                goal=Goal.gte(0.8),
            ),
        ],
    )
    run.show(level="records")

asyncio.run(main())

Le System isole le modèle et le prompt du code de la tâche. Pour comparer deux prompts ou deux modèles, exécutez à nouveau la même évaluation avec un System différent : Studio affiche les exécutions côte à côte. Goal.gte(0.8) marque l'évaluateur comme réussi quand le score atteint au moins 0,8.

Exécutez-le

Exécutez-le

uv run eval.py

Vous devriez voir

Vous devriez voir

Le terminal affiche d'abord le résumé de l'exécution : les statistiques accuracy (moyenne, min, max, écart type et nombre) et indique si l'objectif Goal.gte(0.8) est atteint. Il affiche ensuite un bloc par phrase avec son entrée, son score accuracy et un verdict PASS ou FAIL par rapport à l'objectif. À la fin, il affiche un lien vers l'exécution dans Studio. Pour voir la réponse du modèle à chaque phrase, utilisez level="generations".

Dans Studio, ouvrez Évaluer > Évaluations > Hors ligne. L'exécution apparaît dans le projet Language Detection et dans l'évaluation Accuracy Eval, avec ses scores, ses statistiques et les paramètres système que vous avez utilisés. Chaque nouvelle exécution du script s'ajoute à la même évaluation, ce qui vous permet de suivre l'évolution du score au fil du temps.

Pour itérer sans rien télécharger sur Studio, passez local=True à client.evaluation.run(). Voir Itérer en local.

Aller plus loin

Aller plus loin