Aller au contenu principal

Sécuriser les agents avec des guardrails

La sécurité des agents n’est pas optionnelle

Un agent autonome qui utilise des outils, accède à Internet et exécute du code représente un risque si ses actions ne sont pas encadrées. Les guardrails sont les mécanismes qui définissent les limites de ce qu’un agent peut et ne peut pas faire.

Guardrails au niveau de l’agent

Vous pouvez configurer des guardrails lors de la création de l’agent :

from mistralai import Mistral
import os

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="Agent Sécurisé",
    description="Agent avec guardrails activés.",
    instructions="""Vous êtes un assistant professionnel.
- Ne partagez jamais d'informations personnelles
- Ne générez jamais de contenu inapproprié
- Refusez les demandes hors périmètre
- En cas de doute, demandez une clarification""",
    tools=[{"type": "web_search"}],
    guardrails={"enabled": True}
)

Guardrails au niveau de la conversation

Vous pouvez aussi overrider les guardrails de l’agent pour une conversation spécifique :

response = client.beta.conversations.start(
    agent_id=agent.id,
    inputs="Analysez ce document confidentiel.",
    guardrails={"enabled": True}  # Override les guardrails de l'agent
)

Les instructions comme première ligne de défense

Les instructions (system prompt) sont votre premier levier de sécurité :

instructions = """## Rôle
Vous êtes un assistant juridique spécialisé en droit du travail français.

## Périmètre
- UNIQUEMENT le droit du travail français
- Refusez toute question hors périmètre (fiscalité, immobilier, pénal, etc.)

## Interdictions strictes
- Ne donnez JAMAIS de conseil juridique définitif
- Ne rédigez JAMAIS de documents juridiques sans avertissement
- Ne partagez JAMAIS d'informations sur d'autres clients
- Mentionnez TOUJOURS qu'un avocat doit valider

## Format
- Citez les articles de loi pertinents
- Indiquez clairement les limites de votre réponse
- Proposez toujours de consulter un professionnel"""

Limiter les outils

Ne donnez à un agent que les outils strictement nécessaires :

# Trop d'outils — surface d'attaque large
agent_dangereux = client.beta.agents.create(
    model="mistral-large-latest",
    name="agent-tout-faire",
    tools=[
        {"type": "web_search"},
        {"type": "code_interpreter"},
        {"type": "image_generation"},
        {"type": "document_library", "library_ids": [lib.id]}
    ]
)

# Principe du moindre privilège — seulement ce qui est nécessaire
agent_securise = client.beta.agents.create(
    model="mistral-large-latest",
    name="agent-documentation",
    tools=[{"type": "document_library", "library_ids": [lib.id]}]
)

Contrôler les handoffs

En mode client, vous pouvez valider chaque handoff avant qu’il ne s’exécute :

response = client.beta.conversations.start(
    agent_id=router.id,
    inputs=user_query,
    handoff_execution="client"
)

ALLOWED_AGENTS = {research.id, analyst.id}  # Whitelist

for entry in response.outputs:
    if entry.type == "agent.handoff":
        if entry.to_agent not in ALLOWED_AGENTS:
            print(f"BLOQUÉ : handoff non autorisé vers {entry.to_agent}")
            continue
        # Continuer avec l'agent autorisé

Contrôler le stockage

Pour les données sensibles, désactivez le stockage côté Mistral :

response = client.beta.conversations.start(
    agent_id=agent.id,
    inputs="Données confidentielles : rapport financier Q1 2026...",
    store=False  # Rien ne persiste
)

Pattern de modération

Ajoutez un agent de modération en amont :

moderator = client.beta.agents.create(
    model="mistral-large-latest",
    name="moderator",
    description="Vérifie que les requêtes sont appropriées.",
    instructions="""Analysez la requête utilisateur :
- Si appropriée : transférez au spécialiste
- Si inappropriée : répondez poliment que la demande n'est pas prise en charge
- Si ambiguë : demandez une clarification"""
)

specialist = client.beta.agents.create(
    model="mistral-large-latest",
    name="specialist",
    description="Traite les requêtes validées.",
    tools=[{"type": "web_search"}]
)

moderator = client.beta.agents.update(
    agent_id=moderator.id,
    handoffs=[specialist.id]
)

Contrôler les paramètres de génération

Des paramètres conservateurs réduisent les hallucinations :

agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="Agent Factuel",
    description="Agent factuel et conservateur.",
    completion_args={
        "temperature": 0.1,   # Très peu de créativité
        "top_p": 0.85,        # Noyau restreint
        "max_tokens": 1024    # Réponses courtes
    }
)

Checklist sécurité

Avant de déployer un agent en production, vérifiez :

  • Les instructions définissent clairement le périmètre et les interdictions
  • L’agent n’a que les outils strictement nécessaires
  • Les guardrails sont activés
  • Le mode client est utilisé pour les workflows critiques
  • store=False est activé pour les données sensibles
  • La température est basse pour les tâches factuelles
  • Un agent de modération filtre les requêtes en amont

Points clés à retenir

  • Les guardrails se configurent au niveau agent et/ou conversation
  • Les instructions sont votre première ligne de défense — soyez explicite sur les interdictions
  • Appliquez le principe du moindre privilège : donnez uniquement les outils nécessaires
  • Le mode client permet de valider et bloquer les handoffs non autorisés
  • En production : modération en amont, logging, whitelist d’agents, store=False pour le sensible