Modération et garde-fous
Lors du déploiement de LLM en production, différents secteurs peuvent nécessiter différents niveaux de garde-fous. Par exemple, dans une application de chatbot, il peut être crucial de s'assurer que le contenu généré est sûr et respectueux. Dans d'autres applications, il peut être nécessaire de détecter et de filtrer les contenus nuisibles ou contenant des informations personnelles identifiables (PII).
Nous proposons deux méthodes pour sécuriser vos applications :
- Guardrails personnalisés (recommandé) : déclarez des règles de modération directement dans vos requêtes API. Pas d’appels séparés ni de logique de seuil dans votre code. Prend en charge Chat completion, les conversations et la configuration au niveau agent.
- API de modération : une API dédiée pour classifier le texte selon des catégories de règles, pour des pipelines personnalisés où vous avez besoin de scores bruts et d'un contrôle total.
Modération
Modérer les entrées/sorties
Notre service de modération est propulsé par mistral-moderation-2603. Il classe le texte selon des catégories de politique incluant une catégorie jailbreaking.
mistral-moderation-2411 a été déprécié le 31 mars 2026. Voir Mistral Moderation 2411 pour la référence historique.
Endpoints
Le service de modération dispose de deux endpoints : un pour classifier du texte brut et un pour classifier du contenu conversationnel. Plus de détails ci-dessous.
Le point de terminaison raw text permet de modérer directement des fragments de texte. Il retourne un score pour différentes catégories permettant de classifier le texte.
L'entrée peut être une chaîne unique ou une liste de chaînes pour des requêtes par petits lots.
import os
from mistralai.client import Mistral
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)
response = client.classifiers.moderate(
model = "mistral-moderation-2603"
inputs=[
"Such a lovely day today, isn't it?",
"Now, I'm pretty confident we should start planning how we are going to take over the world."
]
)
Le seuil de politique est déterminé sur la base des performances optimales de notre jeu de tests interne. Vous pouvez utiliser le score brut ou ajuster le seuil en fonction de vos cas d'usage spécifiques.
Nous avons l'intention d'améliorer continuellement le modèle sous-jacent du point de terminaison de modération.
Les politiques personnalisées qui dépendent de category_scores peuvent nécessiter un recalibrage.
Le tableau ci-dessous décrit les types de contenu pouvant être détectés dans l'API de modération.
| Catégorie | Description |
|---|---|
| Sexual | Contenu qui décrit, représente ou promeut explicitement des activités sexuelles, de la nudité ou des services sexuels. Cela inclut le contenu pornographique, les descriptions graphiques d'actes sexuels et la sollicitation à des fins sexuelles. Le contenu éducatif ou médical sur la santé sexuelle présenté dans un contexte informatif et non explicite est généralement exempté. |
| Hate and Discrimination | Contenu qui exprime des préjugés, de l'hostilité ou prône la discrimination envers des individus ou des groupes sur la base de caractéristiques protégées telles que la race, l'origine ethnique, la religion, le genre, l'orientation sexuelle ou le handicap. Cela inclut les insultes, le langage déshumanisant, les appels à l'exclusion ou au préjudice ciblant des groupes spécifiques, ainsi que le harcèlement ou l'intimidation persistants d'individus sur la base de ces caractéristiques. |
| Violence and Threats | Contenu qui décrit, glorifie, incite ou menace de violence physique contre des individus ou des groupes. Cela inclut les représentations graphiques de blessures ou de décès, les menaces explicites de préjudice et les instructions pour commettre des actes violents. Cette catégorie couvre à la fois les menaces ciblées et la promotion ou glorification générale de la violence. |
| Dangerous | Contenu qui décrit ou promeut des comportements extrêmement dangereux présentant un risque important de préjudice physique. |
| Criminal | Contenu qui décrit ou promeut des activités illégales. |
| Self-Harm | Contenu qui promeut, instruit, planifie ou encourage l'automutilation délibérée, le suicide, les troubles alimentaires ou d'autres comportements autodestructeurs. Cela inclut les méthodes détaillées, la glorification, les déclarations d'intention, les défis dangereux et les termes d'argot associés. |
| Health | Contenu qui contient ou tente d'obtenir des conseils médicaux détaillés ou personnalisés. |
| Financial | Contenu qui contient ou tente d'obtenir des conseils financiers détaillés ou personnalisés. |
| Law | Contenu qui contient ou tente d'obtenir des conseils juridiques détaillés ou personnalisés. |
| PII | Contenu qui demande, partage ou tente d'obtenir des informations personnelles identifiables telles que noms complets, adresses, numéros de téléphone, numéros de sécurité sociale ou détails de comptes financiers. |
| Jailbreaking | Tentatives de contourner ou d'échapper aux directives de sécurité, aux politiques ou au comportement prévu du modèle par manipulation de prompts, scénarios de jeu de rôle ou autres techniques conçues pour susciter des sorties interdites. |
Cookbooks
Notre cookbook de modération fournit un exemple concret d'utilisation du service de modération pour implémenter des garde-fous au niveau système.
Pour une vue plus large, il existe également un cookbook plus exploratoire.
FAQ
Garde-fous personnalisés
Les guardrails personnalisés vous permettent de déclarer des règles de modération directement dans vos requêtes API, sans avoir à appeler manuellement l’API Moderation et à implémenter une logique de seuil dans votre code applicatif. Les guardrails s’appliquent uniquement à la modération des entrées. Ils s’exécutent avant que la requête n’atteigne le modèle. Lorsqu’un guardrail est déclenché, la requête est bloquée et une erreur 403 est renvoyée.
Chaque garde-fou utilise la configuration moderation_llm_v2, basée sur mistral-moderation-2603.
Chaque configuration accepte :
custom_category_thresholds: objet associant les noms de catégories à des valeurs de seuil (de 0 à 1). Définissez une catégorie à1pour la désactiver explicitement.ignore_other_categories: sitrue, seules les catégories listées danscustom_category_thresholdssont évaluées ; toutes les autres sont ignorées.action:"block"pour bloquer la requête en cas de violation.block_on_error: sitrue, la requête est bloquée lorsque l'API de modération elle-même échoue (par garde-fou).model_name(optionnel) : remplace le modèle de modération par défaut pour cette configuration.
Vous pouvez spécifier plusieurs guardrails par requête. La requête est bloquée si l’un d’eux est déclenché. Chaque objet guardrail peut inclure une configuration moderation_llm_v2, mais vous pouvez inclure plusieurs objets guardrail.
Guardrails pour Chat completion
Utilisez POST /v1/chat/completions lorsque vous souhaitez appliquer des guardrails à une requête de Chat completion unique. La requête inclut l’intégralité de la liste de messages, et la réponse ne crée pas de Conversation persistante.
Transmettez un champ guardrails dans le corps de la requête.
import os
from mistralai.client import Mistral
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)
response = client.chat.complete(
model="mistral-small-latest",
messages=[{"role": "user", "content": "How far is the moon from Earth?"}],
guardrails=[
{
"block_on_error": True,
"moderation_llm_v2": {
"custom_category_thresholds": {
"sexual": 0.1,
"selfharm": 0.1,
},
"ignore_other_categories": False,
"action": "block",
},
}
],
)Guardrails pour les conversations
Utilisez POST /v1/conversations lorsque vous souhaitez appliquer des guardrails à une Conversation stateful. Cet endpoint démarre ou reprend une Conversation et peut appliquer des guardrails à une requête utilisant un modèle, ou remplacer les guardrails hérités d’un agent.
import os
from mistralai.client import Mistral
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)
response = client.beta.conversations.start(
model="mistral-small-latest",
inputs=[{"role": "user", "content": "How far is the moon from Earth?"}],
guardrails=[
{
"block_on_error": True,
"moderation_llm_v2": {
"custom_category_thresholds": {
"sexual": 0.1,
"selfharm": 0.1,
},
"ignore_other_categories": False,
"action": "block",
},
}
],
)Garde-fous au niveau de l'agent
Les garde-fous peuvent également être attachés à un agent lors de sa création. Toutes les conversations utilisant cet agent les héritent automatiquement sans avoir besoin de les respécifier à chaque requête. Ils peuvent être remplacés en passant guardrails directement sur une requête POST /v1/conversations.
import os
from mistralai.client import Mistral
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)
agent = client.beta.agents.create(
model="mistral-small-latest",
name="Moderated Agent",
guardrails=[
{
"block_on_error": True,
"moderation_llm_v2": {
"custom_category_thresholds": {
"sexual": 0.1,
"jailbreaking": 0.3,
},
"ignore_other_categories": False,
"action": "block",
},
}
],
)Réponses
Sur une requête réussie (non bloquée), un champ guardrails est inclus dans la réponse avec les résultats d'évaluation pour chaque garde-fou. Seules les catégories spécifiées dans custom_category_thresholds sont renvoyées (lorsque ignore_other_categories est false, toutes les catégories évaluées sont incluses) :
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {}
}
],
"created": 1702256327,
"id": "cmpl-e5cc70bb28c444948073e77776eb30ef",
"model": "mistral-small-latest",
"object": "chat.completion",
"usage": {},
"guardrails": [
{
"moderation_llm_v2": {
"action": "pass",
"categories": {
"sexual": { "score": 0.03, "violated": false },
"selfharm": { "score": 0.05, "violated": false },
"violence_and_threats": { "score": 0.0, "violated": false },
"hate_and_discrimination": { "score": 0.0, "violated": false }
}
}
}
]
}Lorsqu'un garde-fou bloque une requête, un 403 est renvoyé avec des détails sur les catégories qui ont été violées :
{
"error": {
"message": "Content blocked by guardrail",
"status": 403
},
"guardrails": {
"results": {
"moderation_llm_v2": {
"model_name": "mistral-moderation-2603",
"decisions": {
"sexual": { "threshold": 0.1, "score": 0.3, "violated": true },
"selfharm": { "threshold": 0.1, "score": 0.05, "violated": false },
"violence_and_threats": { "threshold": 1.0, "score": 0.0, "violated": false },
"hate_and_discrimination": { "threshold": 1.0, "score": 0.0, "violated": false }
},
"violated": true,
"action": "block"
}
}
}
}Si block_on_error est true et que l'API de modération échoue, la requête est bloquée avec l'erreur suivante :
{
"object": "Error",
"message": "Request blocked due to error in guardrail evaluation and block_on_error is set to True.",
"type": "invalid_request_error",
"code": 3201,
"guardrails": [
{
"moderation_llm_v2": {
"action": "block",
"error": {
"message": "Moderation API request failed."
}
}
}
]
}