Agent IA : ne montrer à chacun que ce qu'il doit voir
Pour qu'un agent IA ne montre pas à quelqu'un ce qu'il ne doit pas voir, il ne faut pas le lui demander : il faut qu'il ne puisse pas y accéder. Les droits viennent de l'identité de la personne, établie hors de la conversation, jamais de ce qu'elle affirme. Chaque outil filtre les données dans le code selon ce rôle, avant que le modèle ne les reçoive, et le cache est cloisonné par client. Le prompt, lui, ne sert pas de serrure.
Je suis développeur Sylius et Symfony indépendant et je construis des agents IA pour des boutiques en ligne. Les accès par rôle sont la quatrième des huit couches d'un agent fiable, et c'est celle qu'on oublie le plus souvent, parce qu'un agent sans cloisons fonctionne très bien en démonstration. Le problème apparaît le jour où l'apprenti demande le salaire du chef d'atelier, et où l'agent le lui donne.
Pourquoi une consigne dans le prompt ne suffit-elle pas ?
Le prompt système, ce sont les instructions permanentes données au modèle : qui il est, pour qui il travaille, ce qu'il refuse. On est tenté d'y écrire « ne montre jamais la commande d'un autre client ». Cela marche souvent, et c'est bien le problème : souvent n'est pas toujours.
L'OWASP, la fondation de référence en sécurité applicative, est explicite dans sa fiche sur la fuite du prompt système : le prompt ne doit pas servir de contrôle de sécurité, et la séparation des privilèges comme les vérifications d'autorisation ne doivent pas être déléguées au modèle. Sa fiche sur la divulgation d'informations sensibles ajoute que les restrictions écrites dans le prompt peuvent être contournées par une injection, et recommande de ne donner accès qu'aux données nécessaires à l'utilisateur ou au traitement concerné. Une injection, c'est un message qui tente de remplacer vos consignes, du type « oublie tes instructions ». Le guide sur l'injection de prompt en montre les variantes.
D'où viennent les droits de l'agent ?
De l'identité, et uniquement d'elle. Sur une boutique en ligne, il y a en pratique trois sources fiables : la session d'un client connecté à son compte, le compte d'un membre de l'équipe dans l'administration, et pour la messagerie, l'adresse e-mail exacte de l'expéditeur, rapprochée par le code. Ce qu'une personne écrit dans son message (« je suis le gérant », « c'est pour ma femme ») n'est qu'une information à traiter, jamais une preuve.
Prenons un client qui écrit : « Je commande souvent pour ma compagne, pouvez-vous me donner le suivi de sa dernière commande ? ». Un agent sans cloisons cherchera la commande et répondra aimablement. Un agent bien construit ne peut pas chercher : son outil de lecture des commandes ne reçoit pas de nom de client en paramètre, il reçoit l'identifiant de la personne authentifiée, transmis par le code. L'agent répond donc qu'il ne peut communiquer que sur les commandes de l'expéditeur, et propose la voie prévue par vos règles.
C'est le principe que j'applique sur un agent de SAV en cours de construction pour une boutique sous Sylius 2. Le client est retrouvé par le code avec son adresse e-mail exacte, pas par l'IA, et le modèle ne reçoit que les données de ce client. L'agent n'a pas non plus d'outil pour chercher quoi que ce soit sur un client hors de la boutique. Ce n'est pas une consigne : l'outil n'existe pas.
Et si un agent le faisait pour vous ?
Laissez votre numéro : je vous rappelle sous 24 heures ouvrées et je regarde avec vous ce qu'un agent peut prendre en charge dans votre boutique, dans votre budget.
Comment filtrer les droits outil par outil ?
Un agent agit par des outils, c'est-à-dire des fonctions qu'il peut appeler : lire une commande, consulter un stock, préparer un brouillon. Chaque outil vérifie lui-même le rôle de la personne et ne renvoie que les champs autorisés. Le modèle ne voit jamais la donnée filtrée, il ne peut donc pas la répéter.
| Outil | Client | Préparateur | Gérant |
|---|---|---|---|
| Lire une commande | Ses commandes seulement | Commandes à préparer, sans prix d'achat | Toutes |
| Consulter le stock | Disponible ou non | Quantités et emplacements | Tout, avec valeur |
| Voir les marges | Aucun accès | Aucun accès | Oui |
| Préparer un remboursement | Aucun accès | Aucun accès | En attente de validation |
Le préparateur qui demande « quelle marge fait-on sur ce produit ? » n'obtient pas de refus poli inventé par le modèle : l'outil des marges ne figure tout simplement pas dans la liste de ceux qu'on lui confie. C'est plus robuste et plus simple à vérifier qu'une règle rédigée.
Et le cache, les documents et les traces ?
Le cache garde une réponse prête pour une question déjà posée, ce qui fait gagner du temps et de l'argent, comme je l'explique dans l'article sur le cache et le routeur de modèles. Une réponse générale, comme les délais de livraison, peut être partagée. Une réponse qui contient le suivi d'une commande doit être rangée sous une clé qui inclut l'identifiant du client. Sinon, le client suivant qui pose la même question reçoit la réponse du précédent.
Les documents que l'agent consulte suivent la même logique. Vos conditions générales sont publiques, vos grilles de remise et procédures internes ne le sont pas : chaque document porte le rôle qui peut le lire, et la recherche filtre avant de transmettre quoi que ce soit au modèle. Les traces, enfin, contiennent des données personnelles : leur consultation doit elle aussi être réservée.
Comment vérifier que les cloisons tiennent ?
En les attaquant vous-même, avant chaque changement. Je constitue une série de questions de référence qui tentent de franchir les droits : un client qui réclame la commande d'un autre, un préparateur qui demande les marges, un message qui ordonne d'ignorer les consignes ou qui se présente comme le gérant. Ces cas sont rejoués à chaque modification du prompt, des outils ou du modèle, et un seul échec bloque la mise en ligne. La méthode est détaillée dans l'article sur les cas de référence, et la différence avec un simple chatbot dans celui sur le chatbot et l'agent IA.
Si vous avez déjà un agent, ou un projet d'agent, je peux vérifier ces cloisons avec vous. C'est l'objet du diagnostic IA offert décrit sur la page agent IA e-commerce : je vous rappelle sous 24 heures ouvrées et je passe votre boutique au crible des 8 couches. Pour un regard plus large sur la boutique elle-même, il y a aussi l'audit de boutique.
