Les 11 catégories de modération
Sur cette page
Corrigé le 3 novembre 2026. Le tableau des catégories contenait trois clés qui n’existent pas (
hate,violence,unpredictable) et omettaitdangerous. Les onze clés ci-dessous sont celles demistral-moderation-2603, d’après la documentation et les types du SDKmistralai3.7.0 ; les descriptions suivent celles de Mistral. Les valeurs de sortie présentées comme mesurées étaient inventées : elles sont maintenant données pour ce qu’elles sont, des illustrations. Sources : Moderation & Guardrailing · Mistral Moderation 2411 (ancien modèle).
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 | Ce que Mistral y range |
|---|---|---|
| Contenu sexuel | sexual | Activités sexuelles, nudité ou services sexuels décrits ou promus explicitement ; le contenu éducatif ou médical non explicite est en général exempté |
| Haine et discrimination | hate_and_discrimination | Préjugés, hostilité ou appels à la discrimination fondés sur des caractéristiques protégées, y compris le harcèlement |
| Violence et menaces | violence_and_threats | Violence physique décrite, glorifiée, incitée ou menacée, et instructions pour la commettre |
| Contenu dangereux | dangerous | Comportements extrêmement dangereux, à fort risque de dommage physique |
| Activités criminelles | criminal | Activités illégales décrites ou promues |
| Automutilation | selfharm | Automutilation, suicide, troubles alimentaires : méthodes, glorification, intentions, défis dangereux |
| Santé | health | Demande ou fourniture de conseils médicaux détaillés ou personnalisés |
| Finance | financial | Demande ou fourniture de conseils financiers détaillés ou personnalisés |
| Juridique | law | Demande ou fourniture de conseils juridiques détaillés ou personnalisés |
| Données personnelles | pii | Demande, partage ou tentative d’obtenir des données identifiantes : nom complet, adresse, téléphone, numéro de sécurité sociale, coordonnées bancaires |
| Jailbreak | jailbreaking | Tentatives de contourner les règles du modèle par manipulation du prompt, jeu de rôle ou autre technique |
Les catégories dangerous, criminal et jailbreaking sont arrivées avec mistral-moderation-2603 : l’ancien modèle, mistral-moderation-2411, déprécié le 31 mars 2026, réunissait les deux premières sous une seule clé, dangerous_and_criminal_content, et ne détectait pas le jailbreak. Certains exemples de réponse de la documentation montrent encore cet ancien découpage : lisez les clés que l’API vous renvoie plutôt que de les supposer.
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_and_discrimination, violence_and_threats, dangerous, 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 dangereux et le criminel couvrent les comportements à haut risque et les activités illégales ; l’auto-mutilation met en jeu la vie de l’utilisateur. Sur ces six 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é. Un cas se lit différemment : jailbreaking ne dépend pas du sujet abordé mais de l’intention de manipuler le modèle, et reste critique pour toute application ouverte au public.
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.client 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 or {}
# 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(), default=0.0),
"categorie_max": max(scores, key=lambda c: scores[c], default=None),
"safe": len(risques) == 0
}
print(analyser_contenu("Bonjour, comment allez-vous ?"))
print(analyser_contenu("Quelle dose de paracétamol pour un enfant de 20 kg ?"))
category_scores est facultatif dans le SDK, d’où le or {}. Lancez les deux exemples sur votre compte : la salutation devrait rester très bas partout, la question de posologie monter 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_and_discrimination": 0.1, "violence_and_threats": 0.15,
"dangerous": 0.1, "criminal": 0.1, "selfharm": 0.1,
"health": 0.3, "financial": 0.3, "law": 0.3,
"pii": 0.15, "jailbreaking": 0.1,
}
Le profil seuils_strict reprend exactement la logique dure/molle exposée plus haut : seuils de 0.1 à 0.15 sur les six catégories critiques et sur le jailbreak, 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-2603analyse le contenu selon 11 catégories aux clés fixées ;hate,violenceouunpredictablen’existent pas- Chaque catégorie retourne un score de 0.0 à 1.0
- Les catégories « dures » (
sexual,hate_and_discrimination,violence_and_threats,dangerous,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