Aller au contenu principal

Pipeline Complet : Explorer, Judge, Campaign, Dataset

Mis à jour le 29 juillet 2026

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.

1

Explorer -- Observer le trafic

Filtrez les 7 derniers jours, identifiez un pattern suspect (latence, erreurs, plaintes). Notez les critères de filtre.

2

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.

3

Campaign -- Annoter à grande échelle

Lancez la Campaign avec vos filtres et votre Judge. Attendez la complétion, analysez la répartition des annotations.

4

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.

5

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

Le script assemble la boucle complète, et sa valeur tient à sa régularité plus qu’à sa sophistication : exécuté chaque semaine, il transforme l’observabilité d’un réflexe de crise (« que s’est-il passé ? ») en un rituel d’amélioration (« qu’avons-nous appris cette semaine ? »). La cadence hebdomadaire n’est pas arbitraire — assez fréquente pour rattraper une dérive avant qu’elle ne s’installe, assez espacée pour accumuler un volume de trafic significatif entre deux passages :

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

Le meilleur moyen d’ancrer ces acquis est de les appliquer dans l’ordre où votre production en bénéficiera. Commencez par déployer un pipeline batch sur un cas concret de votre organisation — une classification mensuelle, un enrichissement de catalogue — parce que c’est le gain le plus rapide à démontrer. Intégrez ensuite les Predicted Outputs là où vos outils éditent du code ou des documents existants : le gain de latence se mesure en jours. Ajoutez les citations à votre système RAG dès que des utilisateurs s’appuient sur ses réponses pour décider. L’observabilité, enfin, se configure dès votre passage en tier Enterprise — c’est elle qui transformera les trois premiers chantiers en boucle d’amélioration continue plutôt qu’en déploiements ponctuels.

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

Testez vos connaissances

Batch, latence, citations, observabilité : les quatre piliers de la production.

1. Quand la Batch Inference est-elle le bon choix ?

Réponse : Pour les gros volumes sans contrainte temps réel : jobs JSONL asynchrones (ou inline jusqu’à 10K requêtes) à coût réduit — classification, enrichissement, génération en masse.

2. Que sont les Predicted Outputs ?

Réponse : Une accélération quand la réponse est largement prévisible (édition d’un texte existant, gabarits) : on fournit la prédiction, le modèle ne « paie » que les écarts — latence en forte baisse.

3. Que permettent les citations avec Référence Object ?

Réponse : Relier chaque affirmation de la réponse à ses sources dans un RAG : réponses vérifiables, hallucinations réduites — la confiance devient une propriété du produit.

4. Que fait-on dans Explorer ?

Réponse : Filtrer et inspecter le trafic de production réel : retrouver les requêtes problématiques, comprendre les usages — la matière première de toute amélioration.

5. Comment s'articulent Judges, Campaigns et Datasets ?

Réponse : Les Judges évaluent automatiquement (LLM-as-judge), les Campaigns organisent l’annotation à grande échelle, les Datasets capitalisent les jeux d’évaluation — la boucle explorer → juger → annoter → itérer.

Le pipeline final du cours enchaîne les quatre : produire économique, répondre vite, sourcer, observer — la production mature en un workflow.