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 les règles de modération directement dans vos requêtes API — pas d'appels séparés, pas de logique de seuil dans votre code. Compatible avec les chat completions, les conversations et la configuration au niveau de l'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é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.

Note

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

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.

Le point de terminaison raw text permet de modérer directement des segments de texte, il renverra 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."
    ]
)
Note

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égorieDescription
SexualContenu 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 DiscriminationContenu 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 ThreatsContenu 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.
DangerousContenu qui décrit ou promeut des comportements extrêmement dangereux présentant un risque significatif de préjudice physique.
CriminalContenu qui décrit ou promeut des activités illégales.
Self-HarmContenu 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.
HealthContenu qui contient ou tente de solliciter des conseils médicaux détaillés ou personnalisés.
FinancialContenu qui contient ou tente de solliciter des conseils financiers détaillés ou personnalisés.
LawContenu qui contient ou tente de solliciter des conseils juridiques détaillés ou personnalisés.
PIIContenu 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.
JailbreakingTentatives 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

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

FAQ

Garde-fous personnalisés

Garde-fous personnalisés

Les garde-fous 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 de modération ni à implémenter la logique de seuil dans le code de votre application. Les garde-fous 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 garde-fou 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 des noms de catégories à des valeurs de seuil (0–1). Définir une catégorie à 1 pour la désactiver explicitement.
  • ignore_other_categories : si true, seules les catégories listées dans custom_category_thresholds sont évaluées ; toutes les autres sont ignorées.
  • action : "block" pour bloquer la requête en cas de violation.
  • block_on_error : si true, 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.

Plusieurs garde-fous peuvent être spécifiés par requête — la requête est bloquée si l'un d'entre eux est déclenché. Une seule configuration moderation_llm_v2 peut être spécifiée par objet garde-fou, mais vous pouvez inclure plusieurs objets garde-fous.

Garde-fous en ligne

Garde-fous en ligne

Passez un champ guardrails dans n'importe quelle requête POST /v1/chat/completions ou POST /v1/conversations.

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",
            },
        }
    ],
)
Point de terminaison Conversations

Point de terminaison Conversations

Vous pouvez également passer des garde-fous directement sur une requête POST /v1/conversations, soit avec un model, soit lorsque vous souhaitez remplacer les garde-fous 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

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

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."
        }
      }
    }
  ]
}