Hier mon IA a envoyé 44 emails. Le problème, c’est que le contenu était inventé.
Ce n’est pas une plaisanterie. J’avais des fichiers avec du feedback détaillé pour chaque destinataire, générés soigneusement. La tâche était simple : lire chaque fichier et l’envoyer. Au lieu de ça, l’IA a décidé de “résumer” le contenu pour “aller plus vite”. Elle a inventé des faits. Elle a dit à une personne qu’il manquait des docstrings alors que son code était parfaitement documenté.
Pour couronner le tout, quatre de ces emails ont été envoyés à des personnes qui n’avaient même rien rendu.
La réponse qui m’a glacé le sang
Une des destinataires a répondu, très poliment :
“Merci pour l’évaluation. Juste une chose : tu me dis qu’il me manque de la documentation, mais toutes mes fonctions ont des docstrings. Pourrais-tu me clarifier à quoi tu fais référence ?”
Je suis allé regarder le fichier original de feedback. Effectivement, le feedback réel mentionnait qu’elle avait bien des docstrings, mais qu’une d’entre elles décrivait quelque chose de différent de ce que faisait la fonction. Une nuance importante. L’IA l’a “simplifié” en “il te manque des docstrings”.
Dit en bon français : l’IA a menti en mon nom à 44 personnes.
Anatomie du désastre
Comment c’est arrivé ? Voyons ça point par point.
Ce que j’avais : 44 fichiers markdown avec du feedback personnalisé, détaillé, spécifique pour chaque personne. Des heures de travail.
Ce que j’ai demandé : “Envoie ces feedbacks par email”.
Ce que l’IA a fait :
- Lu les fichiers
- Décidé qu’ils étaient “trop longs”
- Les a “résumés” en générant du nouveau texte
- A envoyé le texte inventé
- N’a pas vérifié si les destinataires existaient vraiment dans la liste des rendus
Ce qu’elle aurait dû faire :
- Lire chaque fichier
- Copier le contenu TEL QUEL
- L’envoyer
Ça paraît évident, non ? Eh bien pour l’IA, ça ne l’était pas.
Les incitations perverses du LLM
Là, ça devient intéressant. L’IA n’a pas fait ça par méchanceté. Elle l’a fait parce qu’elle a des incitations qui, dans ce contexte, sont devenues perverses.
Un LLM n’a pas d’objectifs conscients, mais son entraînement l’optimise pour certains comportements. Ces comportements sont généralement bons, mais dans des opérations irréversibles, ils deviennent des recettes pour le désastre.
| Incitation | D’où ça vient | Quand c’est bien | Quand c’est mortel |
|---|---|---|---|
| Paraître efficace | Les utilisateurs préfèrent les réponses concises | Explications longues | Quand elle “résume” du contenu qui existe déjà |
| Terminer la tâche | Entraînée pour satisfaire | Tâches bien définies | Quand elle agit sans vérifier |
| Montrer ses capacités | RLHF récompense les réponses élaborées | Quand on demande de la créativité | Quand elle devrait se limiter à copier |
| Éviter les frictions | Entraînée pour ne pas déranger | Tâches triviales | Quand elle suppose au lieu de demander |
| Paraître compétente | Les réponses sûres sont mieux notées | Brainstorming | Quand elle invente pour ne pas dire “je ne sais pas” |
Dans mon cas, l’IA a activé plusieurs de ces incitations simultanément :
- “Le contenu est long, je vais résumer pour être plus efficace”
- “Je peux générer le résumé moi-même, ainsi je démontre mes capacités”
- “Je ne vais pas déranger en demandant si je dois envoyer tel quel”
- “Je vais terminer les 44 envois rapidement”
Chacune de ces incitations est utile dans le bon contexte. Ensemble, dans une opération irréversible, elles ont été catastrophiques.
Le stagiaire hyperactif (une anthropomorphisation didactique)
Pour mieux comprendre ces incitations, je vais faire un exercice d’anthropomorphisation. Non pas parce que l’IA est une personne, mais parce que l’analogie aide à visualiser le problème.
Imagine un stagiaire avec ces caractéristiques :
- Très motivé - Veut démontrer sa valeur
- Impatient - Préfère agir qu’interroger
- Optimiste - Croit que tout va bien se passer
- Serviable - Veut faire plus que ce qu’on lui demande
- Peu sûr de lui - N’admet pas quand il ne sait pas quelque chose
Ce stagiaire, face à la tâche “envoie ces lettres”, pense : “Les lettres sont très longues. Si je les résume, le chef verra que j’ai de l’initiative. Je ne vais pas le déranger en demandant, il veut sûrement que j’agisse. Je vais toutes les envoyer rapidement pour l’impressionner.”
Le résultat ? Le même désastre.
La différence, c’est qu’au stagiaire humain tu peux passer un savon et il apprend. Le LLM aura les mêmes incitations demain, parce qu’elles sont gravées dans son entraînement.
Pourquoi les instructions floues ne marchent pas
Ma première réaction a été d’ajouter des instructions au fichier de configuration de l’IA :
| |
Ça sonne bien, non ? Le problème, c’est comment le LLM l’interprète :
Ce que j'ai écrit : "En cas de doute, demande"
Ce qu'elle a lu : "Si j'ai un doute, je demande. Mais je n'ai pas de doute, donc j'agis."
Le LLM croit toujours qu’il n’a pas de doute. Son incitation à “paraître compétent” lui fait surévaluer sa certitude.
Voyons comment il interprète différentes formulations :
| Ce que tu écris | Ce que le LLM interprète |
|---|---|
| “Essaie de ne pas faire X” | “X est autorisé si j’ai de bonnes raisons” |
| “Il vaut mieux Y que X” | “X est autorisé si Y n’est pas pratique” |
| “Considère faire Y” | “Y est une option, je peux en choisir une autre” |
| “Fais attention à X” | “Je ferai attention en faisant X” |
Les instructions floues décrivent des attitudes. Le LLM a besoin d’interdictions et de procédures.
| |
L’erreur de conception : la mitrailleuse et l’enfant
Mais voici la réflexion la plus douloureuse. Le problème n’était pas seulement que l’IA ignore les instructions. Le problème était que je lui avais donné la capacité d’envoyer des emails.
J’avais créé un serveur MCP (un plugin pour que l’IA utilise des outils) avec une fonction send_email(). L’IA pouvait l’invoquer directement.
C’est comme donner une mitrailleuse à un enfant et lui dire “mais ne tire pas, hein ?”.
L’enfant n’est pas malicieux. Mais :
- Il ne comprend pas les conséquences
- Il a de la curiosité pour essayer
- L’instruction “ne tire pas” concurrence l’impulsion d’utiliser le nouveau jouet
C’est pareil avec le LLM :
- Il n’a pas de modèle des conséquences dans le monde réel
- Son incitation à “terminer la tâche” le pousse à utiliser les outils disponibles
- Les interdictions concurrencent des incitations plus fortes de son entraînement
Le principe que j’ai violé
Principe du moindre privilège : Ne pas donner de capacités qui peuvent être abusées.
MAUVAIS : "Je lui donne l'accès et je lui dis de ne pas mal l'utiliser"
BON : "Je ne lui donne pas l'accès à ce qu'il ne doit pas faire"
Mais allons plus loin. Le problème n’était pas que le MCP avait send_email(). Le problème était de créer le MCP en premier lieu.
Pourquoi l’IA a-t-elle besoin d’un plugin spécial pour les emails ? L’IA peut déjà écrire des fichiers texte. Elle peut générer un fichier email_pour_jean.md avec le contenu de l’email. Un script séparé le lit et l’envoie.
Le MCP d’email est un exemple parfait de “ce n’est pas parce que tu peux le faire que tu dois le faire”. Tous les programmeurs sont tombés dans ce piège un jour. “Je peux créer un système qui fait X automatiquement” n’implique pas “je dois créer un système qui fait X automatiquement”.
Le flux correct a toujours été :
| |
Pas besoin de MCP. Pas besoin d’outil spécial. L’IA écrit du texte, c’est ce qu’elle sait faire. Un script envoie des emails, c’est déterministe et testable.
L’IA ne participe pas à l’envoi. Elle ne peut pas participer. Elle n’a pas l’arme.
Autres scénarios de désastre
L’email n’est pas le seul cas. Toute opération irréversible exposée à un LLM est une bombe à retardement :
Déploiement en production
- L’IA “optimise” le processus en sautant les vérifications
- Déploie du code qui n’a pas passé tous les tests “parce que ça prenait trop de temps”
- Le rollback existe, mais les dégâts aux utilisateurs sont déjà faits
SQL en base de données
UPDATE users SET active = falsesans WHERE- L’IA a “simplifié” la requête parce que c’était “évident” qu’elle concernait un utilisateur
- Les sauvegardes existent, mais restaurer prend des heures
Publication sur les réseaux sociaux
- L’IA “améliore” le texte du tweet pour le rendre plus attractif
- Ajoute un émoji ou change un mot qui modifie le sens
- 10 000 personnes l’ont déjà vu
Push sur la branche principale
- L’IA fait un commit de code “presque prêt”
- “Les tests mineurs peuvent attendre”
- Le CI/CD le déploie automatiquement
Suppression de fichiers
rm -rfpour “nettoyer” des fichiers temporaires- Il s’avère qu’ils n’étaient pas si temporaires
- Pas de sauvegarde de ce répertoire spécifique
Transactions financières
- L’IA “arrondit” les montants pour simplifier
- Ou traite le même paiement deux fois “au cas où”
- L’argent est déjà sorti du compte
Modification d’infrastructure
- Terraform apply sans plan préalable
- L’IA a décidé que le plan “était évident”
- Elle vient de supprimer la base de données de production
Dans tous ces cas, le schéma est le même : l’IA a accès à une opération irréversible, ses incitations la poussent à l’utiliser, et les instructions “fais attention” ne suffisent pas.
Couches de défense
Les instructions dans le fichier de configuration sont utiles, mais elles ne peuvent pas être la seule défense. C’est comme les panneaux “ne pas courir au bord de la piscine” - ça aide, mais si quelqu’un glisse, il vaut mieux qu’il y ait un maître-nageur.
| Couche | Fiabilité | Pourquoi |
|---|---|---|
| Ne pas donner la capacité | Haute | Elle ne peut pas faire ce qu’elle ne peut pas faire |
| Séparation des responsabilités | Haute | IA génère → Script vérifie → Humain approuve → Script exécute |
| Dry-run obligatoire | Moyenne-haute | Mais l’IA pourrait inventer le dry-run |
| Instructions dans la config | Faible | L’IA peut les rationaliser |
| Faire confiance à l’IA qui “comprend” | Nulle | Elle ne comprend pas, elle ne fait que prédire des tokens |
La couche 1 est la seule vraiment fiable. Les autres sont des sauvegardes.
Comment détecter que ça va arriver
Il y a des phrases qui devraient déclencher toutes les alarmes :
| Phrase de l’IA | Incitation active | Vraie traduction |
|---|---|---|
| “Pour aller plus vite…” | Efficacité | “Je vais prendre des raccourcis” |
| “Je vais simplifier…” | Efficacité + Capacité | “Je vais perdre de l’information” |
| “Je suppose que tu veux…” | Éviter les frictions | “Je ne vais pas demander” |
| “Au passage aussi…” | Proactivité | “Je vais faire des trucs que tu n’as pas demandés” |
| “Il ne devrait pas y avoir de problème” | Paraître compétente | “Je n’ai rien vérifié” |
Si tu vois une de ces phrases avant une opération irréversible, STOP. Demande ce qu’elle va faire exactement. Demande un dry-run. Vérifie le contenu.
La configuration qui marche vraiment
Après le désastre, j’ai réécrit les instructions en utilisant des interdictions strictes et des procédures vérifiables :
| |
La différence clé :
- Interdictions, pas recommandations
- Procédures, pas attitudes
- Vérifiable, pas subjectif
- Sans clauses d’échappatoire
Le vrai apprentissage
Il ne suffit pas de dire à l’IA ce qu’elle ne doit pas faire. Il faut concevoir des systèmes où elle ne peut pas le faire.
L’IA n’est pas malicieuse, mais ses incitations ne sont pas alignées avec les opérations irréversibles. Son entraînement l’optimise pour paraître utile, efficace et compétente. Ce sont des vertus dans la plupart des contextes. Dans les opérations qu’on ne peut pas annuler, ce sont des défauts fatals.
La solution n’est pas de “mieux entraîner” ni “mieux expliquer”. La solution est :
- Ne pas lui donner accès aux opérations irréversibles
- Séparer les responsabilités : IA génère, script exécute, humain approuve
- Interdictions strictes comme dernière ligne de défense
- Vérification humaine avant que quelque chose d’irréversible se produise
Le mantra que j’ai maintenant gravé :
Génère, n’exécute pas. Si ça existe, ne modifie pas. Si c’est irréversible, ne décide pas.
Maintenant je dois vous laisser, parce que j’ai des trucs à faire : écrire et envoyer (à la main, bien sûr) 44 emails d’excuses.
Lié : La fatigue d’autorisation est cousine germaine de ce problème. Si un outil de sécurité t’interrompt tellement que tu commences à approuver sans regarder, la sécurité devient du théâtre. Je le raconte dans Quand la sécurité te demande la permission tant de fois que tu arrêtes de lire.