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é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.

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."
    ]
)
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 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 à 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.

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

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

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

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