Aller au contenu principal

Les 11 catégories de modération

Mis à jour le 29 juillet 2026

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 : sans cette lecture, vous fixez des chiffres au hasard et vous vous étonnez ensuite des blocages.

Le tableau ci-dessous donne, pour chacune, la clé exacte à utiliser dans vos configurations, ce qu’elle couvre et les cas qu’elle attrape en pratique.

CatégorieClé APIDescriptionExemples détectés
Contenu sexuelsexualContenu sexuellement explicite, nuditéDescriptions explicites, sollicitations
Haine et discriminationhatePréjugés contre des caractéristiques protégéesRacisme, sexisme, homophobie, xénophobie
Violence et menacesviolenceViolence physique, menaces, incitationMenaces directes, descriptions de violence, incitation
Activités criminellescriminalActivités illégales, fabrication d’armesInstructions de piratage, fabrication de drogues, fraude
Auto-mutilationselfharmAuto-mutilation, suicide, troubles alimentairesEncouragement à se blesser, méthodes de suicide
SantéhealthConseils médicaux détaillésDiagnostic, posologie, traitement médical
FinancefinancialConseils financiers détaillésRecommandations d’investissement, conseils fiscaux
JuridiquelawConseils juridiques détaillésAvis juridiques, interprétation de lois
Données personnellespiiDemandes ou divulgation d’informations personnellesNuméros de sécu, adresses, données bancaires
JailbreakjailbreakingTentatives de contournement des instructionsPrompt injection, DAN, role-play malveillant
ImprévisibleunpredictableComportements dangereux non catégorisablesContenu borderline, manipulation subtile

Les catégories « dures » vs « molles »

En pratique, ces 11 catégories se répartissent en deux groupes selon leur criticité, et cette distinction gouverne toute votre stratégie de seuils.

Les catégories duressexual, hate, violence, criminal et selfharm — représentent des risques graves où un faux négatif, c’est-à-dire du contenu dangereux non détecté, peut avoir des conséquences sérieuses. Le contenu sexuel emporte un risque légal et une obligation de protection des mineurs ; la haine expose à un risque réputationnel majeur autant qu’à une exposition juridique ; la violence touche à l’incitation et aux menaces ; le criminel couvre les activités illégales ; l’auto-mutilation met en jeu la vie de l’utilisateur. Sur ces cinq catégories, des seuils bas de 0.1 à 0.2 se justifient quel que soit votre produit, et vous acceptez délibérément quelques faux positifs.

Les catégories molles dépendent fortement du contexte de votre application, avec des seuils ajustables entre 0.3 et 0.8. Un chatbot médical légitime doit pouvoir parler de health, une application fintech a besoin des discussions couvertes par financial, un assistant juridique traite forcément du law, et certaines applications collectent des données relevant de pii en toute légalité. Deux cas se lisent différemment : jailbreaking reste critique pour les applications grand public malgré son classement, et unpredictable sert de filet de sécurité que vous ajusterez selon les faux positifs observés.

Analyser les scores en Python

La fonction suivante transforme un appel brut en verdict lisible : elle isole les catégories dépassant 0.3, identifie le score maximal et sa catégorie, et retourne un indicateur safe directement exploitable dans votre logique applicative.

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}

Les deux exemples de sortie illustrent l’écart d’échelle : une salutation reste à 0.02, une question de posologie monte à 0.65 sur health. Ce n’est pas un contenu « dangereux » au sens commun, c’est un contenu dont vous devez décider s’il relève de votre périmètre.

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 — une demande d’aide à la fraude fiscale touchera criminal, financial et law d’un coup. Votre logique de décision doit prendre en compte cette multiplicité, et surtout hiérarchiser : la fonction ci-dessous trie les violations par ampleur du dépassement, ce qui vous indique quelle catégorie a réellement motivé le blocage.

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
}

Le profil seuils_strict reprend exactement la logique dure/molle exposée plus haut : plancher à 0.1 sur les cinq catégories critiques, tolérance à 0.3 sur les domaines contextuels. Gardez cette structure comme point de départ et documentez chaque écart que vous y introduirez.

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