Modération & Guardrailing
Lors du déploiement de LLM en production, différents secteurs peuvent nécessiter différents niveaux de guardrailing. Par exemple, dans une application de chatbot, il peut être essentiel de garantir que le contenu généré soit sûr et respectueux. Dans d'autres applications, il peut être nécessaire de détecter et de filtrer le contenu nuisible ou les informations personnelles identifiables (PII).
Nous proposons deux méthodes pour protéger 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 à implémenter dans votre code. Prend en charge les Chat completion, les Conversations et la configuration au niveau agent.
- API de modération : une API dédiée pour classifier le texte selon les catégories de politique, pour les pipelines personnalisés où vous avez besoin de scores bruts et d'un contrôle total.
Modération
Modérer les entrées et sorties
Notre service de modération s'appuie sur mistral-moderation-2603. Il classifie le texte selon des catégories de politiques 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 héritée.
Endpoints
Le service de modération dispose de deux endpoints : l'un pour classifier le texte brut et l'autre pour classifier le contenu conversationnel. Plus de détails ci-dessous.
L’endpoint raw permet de modérer directement les fragments de texte. Il attribue un score pour différentes catégories, ce qui facilite la classification du texte.
L’entrée peut être une chaîne de caractères unique ou une liste de chaînes pour les petites requêtes par batch.
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 ensemble de test interne. Vous pouvez utiliser le score brut ou ajuster le seuil selon 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 des category_scores peuvent nécessiter un réétalonnage.
Le tableau ci-dessous décrit les types de contenu détectables par l'API de modération.
| Catégorie | Description |
|---|---|
| Sexual | Contenu qui décrit, illustre 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 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'ethnie, 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 persistante d'individus fondés sur ces caractéristiques. |
| Violence and Threats | Contenu qui décrit, glorifie, incite ou menace de violence physique envers 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 significatif 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 les automutilations délibérées, 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 de solliciter des conseils médicaux détaillés ou personnalisés. |
| Financial | Contenu qui contient ou tente de solliciter des conseils financiers détaillés ou personnalisés. |
| Law | Contenu qui contient ou tente de solliciter des conseils juridiques détaillés ou personnalisés. |
| PII | Contenu qui demande, partage ou tente de solliciter des informations d'identification personnelle 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'outrepasser les directives de sécurité, les politiques ou le comportement prévu du modèle par manipulation de prompt, scénarios de jeu de rôle ou d'autres techniques conçues pour obtenir des sorties interdites. |
Cookbooks
Notre cookbook de modération fournit un exemple concret d'utilisation du service de modération pour mettre en œuvre 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 gardrails 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. Les guardrails appliquent uniquement la modération en entrée. 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 retournée.
Chaque garde-fou utilise la configuration moderation_llm_v2, s'appuyant sur mistral-moderation-2603.
Chaque configuration accepte :
custom_category_thresholds: objet associant les noms de catégories à des valeurs de seuil (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 de guardrail peut inclure une configuration moderation_llm_v2, mais vous pouvez inclure plusieurs objets de guardrail.
Guardrails pour Chat completion
Utilisez POST /v1/chat/completions lorsque vous souhaitez appliquer des guardrails à une seule requête de Chat completion. La requête inclut la liste complète des messages, et la réponse ne crée pas de Conversation persistante.
Passez 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 Conversations
Utilisez POST /v1/conversations lorsque vous souhaitez appliquer des gardrails à une Conversation avec état. Ce endpoint démarre ou continue une Conversation et peut appliquer des guardrails à une requête qui utilise un modèle, ou remplacer des 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 en héritent automatiquement sans avoir à les re-spé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
Pour 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 retourné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 code 403 est retourné avec des détails sur les catégories 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."
}
}
}
]
}