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é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, 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 dures — sexual, 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