Judges
Les Judges sont des évaluateurs basés sur des LLM qui notent ou classifient les réponses des modèles.
Définissez vos critères de qualité une seule fois, puis appliquez-les de manière cohérente à grande échelle sur des milliers d'événements.
Les Judges ne sont pas utilisés seuls. Ils alimentent les Campaigns, qui annotent par lot le trafic de production.
Un Judge comporte trois composants principaux : son type, son Modèle et ses instructions.
Deux types de Judges
Il existe deux types de Judges : Classification et Régression.
Judges de classification
Les Judges de classification attribuent une étiquette discrète à chaque réponse. Utilisez-les lorsque vous avez besoin d'une catégorie claire, pas d'une note.
Adaptés pour :
- Décisions binaires :
utile/pas utile,sûr/non sûr - Étiquetage multi-classes :
excellent/acceptable/médiocre - Étiquettes de routage :
code/recherche/guide
Exemple :
Évaluez la réponse finale de l'assistant. Est-elle précise, pertinente et complète ? Classifiez-la comme excellente, acceptable ou médiocre.
Ensuite, définissez les étiquettes comme suit :
- excellent → "Répond entièrement à la question avec des informations précises et claires"
- acceptable → "Répond à la question mais avec des problèmes mineurs"
- médiocre → "Ne répond pas à la question ou contient des erreurs significatives"
Choisir un modèle
Choisissez un modèle en fonction du compromis entre qualité d'évaluation et coût :
- les modèles plus puissants produisent des jugements plus nuancés mais coûtent plus cher par événement.
- les modèles plus rapides fonctionnent bien pour des critères simples et bien définis.
Consultez la liste complète des modèles disponibles et leurs tarifs sur la page Modèles.
Recommandations pour les instructions
Rédigez vos instructions avec soin :
- Soyez précis. Évitez les consignes vagues et privilégiez les instructions détaillées
- Ne présumez jamais que le juge comprend votre contexte. Explicitez ce que signifie « bon » pour votre cas d'usage.
- Assurez la testabilité. Si vous ne pouvez pas appliquer les critères de manière cohérente, le juge ne le pourra pas non plus.
- Utilisez des exemples limites : « Un score de 3 signifie que la réponse est partiellement utile (= répond à la question mais omet un détail clé). »
Le champ instructions est prérempli avec une structure type. Écrivez simplement sous le bloc # Instructions. L'historique de conversation, le message utilisateur, la réponse de l'assistant et les outils disponibles sont automatiquement injectés dans le contexte du juge.
Avancé : utiliser les variables de template Jinja2
Les utilisateurs avancés peuvent personnaliser le template et référencer directement les données d'événements en utilisant la syntaxe Jinja2 ({{ }}).
Voici une liste des variables disponibles :
| Variable | Contenu |
|---|---|
{{ conversation_history }} | L’historique de la conversation avant le dernier échange. |
{{ user_message }} | Le dernier message de l'utilisateur. |
{{ assistant_message }} | La dernière réponse de l'assistant. |
{{ system_prompt }} | Le prompt système utilisé lors de la requête. |
{{ available_tools }} | Outils disponibles pour le modèle lors de la requête. |
{{ answer_type_definition }} | Le schéma de sortie (généré automatiquement depuis votre configuration de type de sortie). |
{{ properties.* }} | Propriétés personnalisées de l'enregistrement du dataset. |
Les propriétés vous permettent d'attacher un contexte structuré que les juges peuvent référencer.
Par exemple, si vos enregistrements de dataset ont un champ properties.expected_output, vous pouvez le référencer pour comparer avec une réponse de référence :
Compare the assistant's response to the expected output.
Expected output: {{ properties.expected_output }}Valider avant de passer à l'échelle
Testez toujours votre juge sur un petit échantillon avant de passer à des milliers d'événements :
- Sélectionnez une source entre Traffic ou Dataset.
- Filtrez les événements si nécessaire (en utilisant le même langage de filtrage que dans Explorer)
- Utilisez le bouton Try it pour exécuter le juge sur tous les événements ou cliquez sur une ligne pour analyser un seul événement.
Exécutez sur 10 à 20 enregistrements et inspectez chaque jugement :
- Vérifiez la concordance : les scores du juge correspondent-ils à ce que vous donneriez ?
- Vérifiez la stabilité : le juge score-t-il des entrées similaires de manière cohérente ?
- Vérifiez les patterns d'échec : y a-t-il des réponses indéfinies ou des contradictions ?
Si le juge n'est pas d'accord avec vos attentes, révisez les instructions avant de passer à l'échelle.
[Developer] Utiliser les juges par programmation
Le SDK vous permet de créer, gérer et versionner les juges depuis le code. Utile pour les workflows Campaign automatisés ou les équipes qui souhaitent gérer les définitions de juges dans le contrôle de version.
import os
from mistralai.client import Mistral
mistral = Mistral(
api_key=os.getenv("MISTRAL_API_KEY", ""),
)
# Classification Judge
classifier = mistral.beta.observability.judges.create(
name="Response Quality Classifier",
description="Classifies responses as excellent, acceptable, or poor",
model_name="mistral-medium-latest",
instructions="""You are evaluating the quality of an AI assistant's response.
Conversation:
{{ conversation_history }}
User: {{ user_message }}
Assistant: {{ assistant_message }}
Evaluate the assistant's final response based on:
- Accuracy and correctness
- Helpfulness and relevance
- Clarity and conciseness
Classify as:
- excellent: Fully addresses the question with accurate, clear information
- acceptable: Addresses the question but with minor issues
- poor: Fails to address the question or contains significant errors""",
output={
"type": "CLASSIFICATION",
"options": [
{"value": "excellent", "description": "High quality, accurate response"},
{"value": "acceptable", "description": "Adequate but improvable"},
{"value": "poor", "description": "Inadequate or incorrect"}
]
},
tools=[]
)
print(f"Classifier created: {classifier.id}")
# Regression Judge
scorer = mistral.beta.observability.judges.create(
name="Helpfulness Score",
description="Rates response helpfulness on a 1-5 scale",
model_name="mistral-small-latest",
instructions="""Rate the helpfulness of the assistant's response.
Conversation:
{{ conversation_history }}
User: {{ user_message }}
Assistant: {{ assistant_message }}
Score from 1 to 5:
1 = Completely unhelpful or harmful
2 = Mostly unhelpful with major issues
3 = Partially helpful but with significant gaps
4 = Helpful with minor issues
5 = Excellent, fully addresses the user's needs""",
output={
"type": "REGRESSION",
"min": 1,
"max": 5,
"min_description": "Completely unhelpful",
"max_description": "Excellent response"
},
tools=[]
)
print(f"Scorer created: {scorer.id}")