Pipeline Complet : Explorer, Judge, Campaign, Dataset
Le workflow d’observabilité de bout en bout
Vous maîtrisez désormais chacun des quatre composants de l’observabilité Mistral. Cette leçon finale assemble les pièces dans un pipeline complet que vous pouvez reproduire et adapter à votre contexte de production.
Explorer -- Observer le trafic
Filtrez les 7 derniers jours, identifiez un pattern suspect (latence, erreurs, plaintes). Notez les critères de filtre.
Judge -- Définir les critères de qualité
Créez un Judge (classification ou régression) avec des instructions précises. Validez sur 10-20 exemples manuellement.
Campaign -- Annoter à grande échelle
Lancez la Campaign avec vos filtres et votre Judge. Attendez la complétion, analysez la répartition des annotations.
Explorer (filtré) -- Cibler les problèmes
Retournez dans l'Explorer, filtrez par annotation ("poor", score < 2). Inspectez les événements problématiques un par un.
Dataset -- Capitaliser et itérer
Exportez les événements annotés vers un Dataset. Utilisez-le pour le fine-tuning, les tests de régression, ou l'amélioration des prompts.
Implémentation Python complète
Voici le script qui orchestre le pipeline entier :
from mistralai import Mistral
from collections import Counter
import time
client = Mistral(api_key="votre-clé-api")
# ==============================
# ÉTAPE 1 : Explorer le trafic
# ==============================
print("=== Étape 1 : Exploration du trafic ===")
events = client.beta.observability.chat_completion_events.search(
search_params={
"filters": {
"AND": [
{"field": "timestamp", "op": "gte", "value": "2026-03-27T00:00:00Z"},
{"field": "model_name", "op": "eq", "value": "mistral-medium-2508"}
]
}
},
page_size=100
)
print(f"Événements trouvés : {len(events.data)}")
# ==============================
# ÉTAPE 2 : Créer un Judge
# ==============================
print("\n=== Étape 2 : Création du Judge ===")
judge = client.beta.observability.judges.create(
name="Qualité support - Semaine 14",
model_name="mistral-medium-latest",
instructions="""
Évaluez la réponse de l'assistant au support client.
Message utilisateur : {{ user_message }}
Réponse assistant : {{ assistant_message }}
Critères :
- Correcte et factuelle
- Répond à la question posée
- Ton professionnel et empathique
""",
output={
"type": "CLASSIFICATION",
"options": [
{"value": "excellent", "description": "Réponse exemplaire"},
{"value": "acceptable", "description": "Correcte mais perfectible"},
{"value": "poor", "description": "Incorrecte ou non professionnelle"}
]
}
)
print(f"Judge créé : {judge.id}")
# ==============================
# ÉTAPE 3 : Lancer la Campaign
# ==============================
print("\n=== Étape 3 : Lancement de la Campaign ===")
campaign = client.beta.observability.campaigns.create(
name="Revue qualité - Semaine 14",
judge_id=judge.id,
search_params={
"filters": {
"AND": [
{"field": "timestamp", "op": "gte", "value": "2026-03-27T00:00:00Z"},
{"field": "timestamp", "op": "lt", "value": "2026-04-03T00:00:00Z"},
{"field": "model_name", "op": "eq", "value": "mistral-medium-2508"}
]
}
},
max_nb_events=5000
)
# Attendre la complétion
while True:
status = client.beta.observability.campaigns.fetch_status(
campaign_id=campaign.id
)
pct = status.processed_events / max(status.total_events, 1) * 100
print(f" Progression : {pct:.0f}%")
if status.status in ("COMPLETED", "FAILED"):
break
time.sleep(30)
# ==============================
# ÉTAPE 4 : Analyser les résultats
# ==============================
print("\n=== Étape 4 : Analyse des résultats ===")
campaign_events = client.beta.observability.campaigns.list_events(
campaign_id=campaign.id,
page_size=200
)
categories = Counter()
for ev in campaign_events.data:
categories[ev.annotation_value] += 1
total = sum(categories.values())
for cat, count in categories.most_common():
print(f" {cat}: {count} ({count/total*100:.1f}%)")
# ==============================
# ÉTAPE 5 : Exporter vers Dataset
# ==============================
print("\n=== Étape 5 : Export vers Dataset ===")
dataset = client.beta.observability.datasets.create(
name="support_quality_week14_2026",
description="Événements annotés semaine 14 - revue qualité support"
)
# Importer les événements "poor" pour analyse approfondie
client.beta.observability.datasets.import_from_explorer(
dataset_id=dataset.id,
search_params={
"filters": {
"AND": [
{"field": "annotation.judge_name", "op": "eq", "value": judge.name},
{"field": "annotation.value", "op": "eq", "value": "poor"}
]
}
}
)
print(f"Dataset créé : {dataset.id}")
print("Pipeline terminé.")
Récapitulatif du cours
Ce cours vous a guidé à travers quatre domaines essentiels pour la production IA avec Mistral :
Batch Inference (Leçons 1-4)
Vous savez traiter des millions de requêtes à coût réduit, en utilisant le format JSONL, le file batching et l’inline batching.
Predicted Outputs (Leçons 5-7)
Vous savez réduire la latence de génération en fournissant une prédiction de la sortie, particulièrement pour l’édition de code et de texte.
Citations et Références (Leçons 8-10)
Vous savez ancrer les réponses de votre LLM dans des sources vérifiées, parser les citations, et construire des pipelines RAG fiables.
Observabilité (Leçons 11-16)
Vous savez observer votre trafic de production, automatiser l’évaluation de qualité, annoter à grande échelle, et construire des datasets pour itérer.
Prochaines étapes recommandées
- Déployez un pipeline batch sur un cas d’usage concret de votre organisation
- Intégrez les Predicted Outputs dans vos éditeurs de code et vos outils de modification de documents
- Implémentez les citations dans votre système RAG existant
- Configurez l’observabilité sur votre trafic de production dès que vous êtes en tier Enterprise
Points clés à retenir
- Le workflow complet suit la boucle : Explorer, Judge, Campaign, Explorer (filtré), Dataset
- Chaque composant alimente le suivant dans une boucle d’amélioration continue
- Automatisez le pipeline avec le SDK Python pour une exécution régulière (hebdomadaire recommandé)
- Les quatre domaines de ce cours (batch, predicted outputs, citations, observabilité) se complètent pour une IA de production robuste