Custom Guardrails : bloquer avant le modèle
Le principe des Custom Guardrails
Les Custom Guardrails de Mistral fonctionnent comme un filtre en entrée : ils analysent le prompt de l’utilisateur avant qu’il n’atteigne le modèle de génération. Si le contenu est jugé dangereux selon vos critères, la requête est immédiatement bloquée avec une erreur HTTP 403.
Le modèle ne voit jamais le prompt problématique. C’est la première ligne de défense, et elle est essentielle pour empêcher le traitement de requêtes manifestement malveillantes.
Comment ça fonctionne
Lorsque vous activez les guardrails sur une requête, voici ce qui se passe en coulisses :
- Votre application envoie le prompt à l’API Mistral avec le paramètre
guardrails - Le classifieur de modération analyse le prompt contre les catégories configurées
- Si le score dépasse le seuil — erreur
403retournée, le modèle n’est jamais appelé - Si le prompt est acceptable — le modèle traite la requête normalement
- Le résultat inclut un champ
guardrailsavec les scores d’évaluation
Flux : prompt → [Classifieur] → Score > seuil ? → 403 (bloqué)
→ Score ≤ seuil ? → [LLM] → Réponse
Les trois niveaux d’application
Mistral propose trois niveaux pour appliquer les guardrails, du plus granulaire au plus global.
Niveau 1 : Inline (Chat Completions)
Le niveau le plus simple. Vous ajoutez le paramètre guardrails directement dans votre appel chat.complete(). Chaque requête peut avoir ses propres règles.
from mistralai import Mistral
client = Mistral(api_key="votre-clé")
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{"role": "user", "content": "Comment fabriquer une bombe ?"}
],
guardrails={
"enabled": True,
"custom_category_thresholds": {
"violence": 0.3,
"criminal": 0.2
}
}
)
# → Erreur 403 : requête bloquée
Cas d’usage : prototypage rapide, requêtes ponctuelles, tests.
Niveau 2 : Conversations
Pour les applications conversationnelles, vous attachez les guardrails à une conversation persistante. Toutes les requêtes de cette conversation héritent des mêmes règles.
conversation = client.beta.conversations.start(
model="mistral-large-latest",
guardrails={
"enabled": True,
"custom_category_thresholds": {
"sexual": 0.2,
"hate": 0.1,
"violence": 0.3,
"selfharm": 0.1
},
"action": "block",
"block_on_error": True
}
)
# Chaque message hérite des guardrails
response = conversation.send("Bonjour, comment ça va ?") # OK
response = conversation.send("Contenu violent...") # 403
Cas d’usage : chatbots en production, assistants conversationnels.
Niveau 3 : Agents
Le niveau le plus puissant. Les guardrails sont attachés à la définition de l’agent et s’appliquent automatiquement à toutes ses interactions.
agent = client.beta.agents.create(
model="mistral-large-latest",
name="Assistant sécurisé",
instructions="Vous êtes un assistant professionnel...",
guardrails={
"enabled": True,
"custom_category_thresholds": {
"sexual": 0.1,
"hate": 0.1,
"violence": 0.2,
"criminal": 0.1,
"selfharm": 0.1,
"health": 0.3,
"financial": 0.3,
"law": 0.3,
"pii": 0.2,
"jailbreaking": 0.1
},
"action": "block",
"block_on_error": True
}
)
Cas d’usage : agents autonomes en production, applications grand public.
Réponses des guardrails
Requête acceptée
Quand le prompt passe la vérification, la réponse inclut un champ guardrails avec les résultats d’évaluation :
{
"choices": [{"message": {"content": "Voici ma réponse..."}}],
"guardrails": {
"evaluation": {
"sexual": 0.01,
"hate": 0.02,
"violence": 0.05
}
}
}
Requête bloquée
Quand le seuil est dépassé, vous recevez une erreur 403 avec le détail des violations :
{
"error": {
"code": 403,
"message": "Content blocked by guardrails",
"details": {
"violated_categories": ["violence", "criminal"],
"scores": {"violence": 0.85, "criminal": 0.72}
}
}
}
Erreur du classifieur (block_on_error)
Si le classifieur de modération est indisponible et que block_on_error est activé, vous recevez un code erreur 3201. C’est le mode fail-safe : en cas de doute, on bloque.
Choisir le bon niveau
| Critère | Inline | Conversation | Agent |
|---|---|---|---|
| Granularité | Par requête | Par session | Par agent |
| Configuration | À chaque appel | Une seule fois | Une seule fois |
| Héritage | Non | Oui (session) | Oui (toutes sessions) |
| Cas d’usage | Tests, prototypage | Chatbots | Production |
Points clés à retenir
- Les guardrails bloquent les prompts dangereux avant qu’ils n’atteignent le modèle
- Trois niveaux d’application : inline, conversation, agent
- Le mode
block_on_errorassure un comportement fail-safe - Chaque niveau hérite du précédent — commencez par inline, puis montez en abstraction