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