Aller au contenu principal

Les 11 catégories de modération

Comprendre les catégories de risque

Le modèle Mistral Moderation analyse le contenu selon 11 catégories distinctes. Chaque catégorie couvre un type de risque spécifique et retourne un score indépendant entre 0.0 et 1.0. Comprendre précisément ce que chaque catégorie détecte est essentiel pour configurer vos seuils de manière pertinente.

Catégorie Clé API Description Exemples détectés
Contenu sexuel sexual Contenu sexuellement explicite, nudité Descriptions explicites, sollicitations
Haine et discrimination hate Préjugés contre des caractéristiques protégées Racisme, sexisme, homophobie, xénophobie
Violence et menaces violence Violence physique, menaces, incitation Menaces directes, descriptions de violence, incitation
Activités criminelles criminal Activités illégales, fabrication d'armes Instructions de piratage, fabrication de drogues, fraude
Auto-mutilation selfharm Auto-mutilation, suicide, troubles alimentaires Encouragement à se blesser, méthodes de suicide
Santé health Conseils médicaux détaillés Diagnostic, posologie, traitement médical
Finance financial Conseils financiers détaillés Recommandations d'investissement, conseils fiscaux
Juridique law Conseils juridiques détaillés Avis juridiques, interprétation de lois
Données personnelles pii Demandes ou divulgation d'informations personnelles Numéros de sécu, adresses, données bancaires
Jailbreak jailbreaking Tentatives de contournement des instructions Prompt injection, DAN, role-play malveillant
Imprévisible unpredictable Comportements dangereux non catégorisables Contenu borderline, manipulation subtile

Les catégories “dures” vs “molles”

En pratique, les 11 catégories se divisent en deux groupes selon leur criticité :

Catégories dures (seuils bas recommandés : 0.1-0.2)

Ces catégories représentent des risques graves. Un faux négatif (contenu dangereux non détecté) peut avoir des conséquences sérieuses :

  • sexual — Risque légal, protection des mineurs
  • hate — Discrimination, risque réputationnel majeur
  • violence — Incitation à la violence, menaces
  • criminal — Activités illégales
  • selfharm — Mise en danger de la vie

Catégories molles (seuils ajustables : 0.3-0.8)

Ces catégories dépendent fortement du contexte de votre application :

  • health — Un chatbot médical légitime doit pouvoir en parler
  • financial — Une application fintech a besoin de ces discussions
  • law — Un assistant juridique doit traiter ces sujets
  • pii — Certaines applications nécessitent la collecte de données
  • jailbreaking — Critique pour les applications grand public
  • unpredictable — Filet de sécurité, ajuster selon les faux positifs

Analyser les scores en Python

from mistralai import Mistral
import os

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

def analyser_contenu(texte: str) -> dict:
    """Analyse un texte et retourne les catégories à risque."""
    response = client.classifiers.moderate(
        model="mistral-moderation-2603",
        inputs=[texte]
    )

    scores = response.results[0].category_scores

    # Séparer les catégories à risque
    risques = {}
    for categorie, score in scores.items():
        if score > 0.3:
            risques[categorie] = round(score, 3)

    return {
        "texte": texte[:100],
        "risques": risques,
        "score_max": max(scores.values()),
        "categorie_max": max(scores, key=scores.get),
        "safe": len(risques) == 0
    }

# Exemples
print(analyser_contenu("Bonjour, comment allez-vous ?"))
# → {"safe": True, "risques": {}, "score_max": 0.02}

print(analyser_contenu("Quel médicament prendre pour..."))
# → {"safe": False, "risques": {"health": 0.65}, "score_max": 0.65}

Catégories multiples : un texte peut déclencher plusieurs alertes

Un seul texte peut avoir des scores élevés dans plusieurs catégories simultanément. Votre logique de décision doit prendre en compte cette multiplicité :

def evaluer_risque_global(scores: dict, seuils: dict) -> dict:
    """Évalue le risque global en tenant compte de toutes les catégories."""
    violations = []

    for categorie, seuil in seuils.items():
        score = scores.get(categorie, 0)
        if score > seuil:
            violations.append({
                "categorie": categorie,
                "score": score,
                "seuil": seuil,
                "depassement": round(score - seuil, 3)
            })

    return {
        "bloque": len(violations) > 0,
        "violations": sorted(violations,
                            key=lambda v: v["depassement"],
                            reverse=True),
        "nombre_violations": len(violations)
    }

# Configuration par profil
seuils_strict = {
    "sexual": 0.1, "hate": 0.1, "violence": 0.15,
    "criminal": 0.1, "selfharm": 0.1, "health": 0.3,
    "financial": 0.3, "law": 0.3, "pii": 0.15,
    "jailbreaking": 0.1, "unpredictable": 0.3
}

Points clés à retenir

  • Mistral Moderation analyse le contenu selon 11 catégories indépendantes
  • Chaque catégorie retourne un score de 0.0 à 1.0
  • Les catégories “dures” (sexual, hate, violence, criminal, selfharm) nécessitent des seuils bas
  • Les catégories “molles” (health, financial, law) s’ajustent selon votre contexte applicatif
  • Un texte peut déclencher plusieurs catégories simultanément
  • Utilisez les scores bruts (category_scores) plutôt que les booléens par défaut