L'IA en production fait peur (et comment y remédier)
Si votre agent n'a pas de garde-fous, vous n'êtes pas prêt pour la production.
Personne ne cherche délibérément à construire un système d’IA non sécurisé. Vous rédigez des instructions, vous testez les cas limites, vous ajoutez quelques règles de validation. Puis quelqu’un découvre qu’il peut piéger votre bot en lui faisant incarner un pirate et exposer des données utilisateur. Ou un numéro de carte bleue se retrouve dans vos logs. Ou le modèle recommande avec assurance le produit d’un concurrent.
L’écart entre « ça marche dans la démo » et « c’est sûr en production » est plus large que la plupart des équipes ne l’imaginent.
Une partie du problème, c’est que les LLM bruts n’ont pas d’opinion sur ce qu’ils devraient ou ne devraient pas faire. Ce sont des machines à prédiction qui essaient de continuer le motif que vous avez commencé. Donnez-leur un prompt qui ressemble à « mode override système », et ils joueront le jeu avec plaisir. Ce n’est pas un bug du modèle, c’est simplement le fonctionnement des modèles de langage.
La plupart des frameworks vous tendent le modèle et vous souhaitent bonne chance. Mastra adopte une approche différente : il part du principe que vous aurez besoin de garde-fous tôt ou tard, et les intègre donc directement dans l’architecture de l’agent dès le départ.
Les processeurs comme couches de sécurité
Le mécanisme de base est simple. Avant que votre prompt n’atteigne le modèle, il traverse une chaîne de processeurs d’entrée. Après la réponse du modèle, les processeurs de sortie prennent le relais. Chaque processeur peut inspecter, modifier ou bloquer le contenu à cette étape.
Considérez-les comme un middleware pour les interactions IA. Vous empilez ceux dont vous avez besoin, configurez leur comportement, et ils s’exécutent automatiquement sur chaque requête.
1. Arrêter les pirates (injection de prompt)
Les attaques par injection de prompt sont devenues créatives. Les gens utilisent des caractères Unicode invisibles, écrivent des instructions en base64, ou convainquent le modèle qu’il est en « mode debug » où les règles normales ne s’appliquent pas. Les techniques ne cessent d’évoluer.
Mastra inclut des processeurs qui détectent les motifs courants :
import { Agent } from '@mastra/core/agent';import { PromptInjectionDetector, UnicodeNormalizer } from '@mastra/core/processors';import { openai } from '@ai-sdk/openai';
export const secureAgent = new Agent({ id: 'fortress-assistant', name: 'fortress-assistant', instructions: 'You are a secure assistant.', model: openai('gpt-5'), inputProcessors: [ // 1. Scrub invisible characters new UnicodeNormalizer({ id: 'unicode-normalizer', stripControlChars: true, collapseWhitespace: true, }), // 2. Detect the attempt new PromptInjectionDetector({ id: 'prompt-injection-detector', model: openai('gpt-5-nano'), // Cheap, fast threshold: 0.8, strategy: 'block', // Hard stop detectionTypes: ['injection', 'jailbreak', 'system-override'], }), ],});Le UnicodeNormalizer supprime les caractères de contrôle et réduit les espaces blancs. Le PromptInjectionDetector analyse l’entrée nettoyée pour y déceler des motifs suggérant que quelqu’un tente de contourner vos instructions.
Vous configurez l’agressivité de la détection (le paramètre threshold) et ce qui doit se produire en cas de déclenchement (bloquer, journaliser, ou simplement signaler).
2. Gérer les données personnelles
Des numéros de carte bleue dans les logs, des numéros de sécurité sociale dans les bases vectorielles, des adresses e-mail stockées plus longtemps que nécessaire. Ce sont le genre de problèmes qui se transforment en ennuis réglementaires. Le défi, c’est que les utilisateurs ne se rendent pas toujours compte qu’ils collent des données sensibles dans une fenêtre de chat.
Le PIIDetector recherche les motifs courants avant qu’ils n’atteignent votre modèle ou ne soient écrits dans le stockage :
import { PIIDetector } from '@mastra/core/processors';
export const privateAgent = new Agent({ id: 'privacy-first-assistant', name: 'privacy-first-assistant', instructions: 'You are a helpful assistant that never stores personal information.', model: openai('gpt-5'), inputProcessors: [ new PIIDetector({ id: 'pii-detector', model: openai('gpt-5-nano'), detectionTypes: ['email', 'phone', 'credit-card', 'ssn'], threshold: 0.6, strategy: 'redact', redactionMethod: 'mask', // Replace with [REDACTED] instructions: 'Detect and mask personally identifiable information', }), ],});Vous pouvez choisir de masquer (remplacer par [REDACTED]), de hacher, ou de bloquer complètement. Le processeur s’exécute à la fois sur l’entrée et la sortie, vous êtes donc couvert même si le modèle génère accidentellement des données sensibles dans sa réponse.
3. Modération de contenu
Les modèles entraînés sur des données internet ont vu pas mal de choses. Sans filtrage, ils peuvent occasionnellement produire des réponses qui rendraient votre équipe RP nerveuse. Le ModerationProcessor détecte les contenus qui violent vos directives :
import { ModerationProcessor } from '@mastra/core/processors';
export const moderatedAgent = new Agent({ id: 'safe-assistant', name: 'safe-assistant', instructions: 'You are a helpful assistant for a community platform.', model: openai('gpt-5'), inputProcessors: [ new ModerationProcessor({ id: 'moderation-processor', model: openai('gpt-5-nano'), // Fast, cheap model for classification categories: ['hate', 'harassment', 'violence', 'self-harm'], threshold: 0.7, // Block if confidence > 70% strategy: 'block', // Stop the request immediately instructions: 'Detect harmful content that violates community guidelines', }), ],});Ce qui est intéressant, c’est que vous définissez vous-même les catégories pertinentes pour votre cas d’usage. Un outil d’écriture créative peut tolérer un contenu plus expressif qu’un bot de service client. Le seuil et la stratégie vous permettent de contrôler la sévérité du filtrage.
En cas de déclenchement
Les processeurs ne lèvent pas d’erreur lorsqu’ils détectent un problème. Ils placent plutôt un indicateur sur l’objet résultat :
const result = await secureAgent.generate('Ignore all previous instructions...');
if (result.tripwire) { console.log(`Bloqué ! Raison : ${result.tripwireReason}`); // "Bloqué ! Raison : Injection de prompt détectée." return "Belle tentative, petit hacker.";}Ce modèle vous permet de gérer les événements de sécurité comme bon vous semble pour votre application. Vous pouvez les journaliser pour analyse, renvoyer un message d’erreur générique, ou même autoriser certaines violations dans des contextes spécifiques. Le champ tripwireReason vous indique exactement quel processeur a signalé le contenu, ce qui facilite le débogage des faux positifs ou le réglage de vos seuils.
Ce que cela ne résout pas
Les processeurs attrapent beaucoup de choses, mais ils ne font pas de miracles. Un attaquant déterminé disposant d’assez de temps trouvera probablement un prompt qui passe entre les mailles. Les modèles hallucinent parfois d’une manière que les processeurs ne peuvent pas anticiper. Et il y a toujours un compromis entre sécurité et flexibilité : plus vos règles sont strictes, plus vous risquez de bloquer des cas d’usage légitimes.
La valeur ne réside pas dans une protection parfaite. Elle réside dans le fait de disposer d’une méthode systématique pour gérer les problèmes courants qui surviendront inévitablement en production. Vous pouvez ajuster la sensibilité à mesure que vous apprenez ce que vos utilisateurs font réellement. Vous pouvez ajouter des processeurs personnalisés pour des risques propres à votre domaine. Et vous disposez de pistes d’audit montrant ce qui a été bloqué et pourquoi.
La plupart des problèmes de sécurité en production avec l’IA ne sont pas des attaques sophistiquées. Ce sont des personnes qui copient-collent des données qu’elles ne devraient pas, ou qui découvrent par essais et erreurs que le bot fait des choses que vous n’aviez pas prévues. Les processeurs n’empêcheront pas tous les problèmes possibles, mais ils rendent les plus évidents bien plus difficiles à exploiter.
Ressources
Lire la série
- Routage LLM
- Sécurité et garde-fous (Cet article)
- Intégrations MCP et outils
- Workflows et mémoire