roquesci

J'ai tenu un cahier sur mon agent

· 8 min de lecture

Trois semaines, quatre incidents, quelques pages. Aucun n'aurait été attrapé par une grille de conformité.

Comme beaucoup d’entre nous, j’ai été séduit par le chant des sirènes que l’IA fait entendre (au clair de lune … tout ça tout ça) ; j’ai commencé par jouer à me construire mon propre Jarvis, parce que … c’est à la mode !

Et fin juillet, j’ai décidé d’ouvrir des accès réels à cet agent d’intelligence artificielle. Pas une démo : mes dossiers, mes fichiers, ma messagerie privée. Mon premier réflexe a été celui de tout le monde, et je le note parce qu’il est instructif : j’ai commencé à écrire une charte.

Vous connaissez le genre de texte. Il affirme le respect de la confidentialité, la primauté de l’humain (moi sur Jarvis), la vigilance éthique. Je l’ai relu le lendemain matin et je l’ai jeté. Pas parce qu’il était mal écrit : parce qu’aucune de ses lignes ne me disait quoi faire à l’instant où j’en aurais besoin.

J’ai fait à la place ce que je fais depuis quatre ans sur ma propre pratique de superviseur. J’ai tenu un cahier.

C’est-à-dire : je n’ai rien écrit d’avance. J’ai laissé le dispositif fonctionner, et chaque fois qu’un incident est arrivé, je l’ai consigné, et j’en ai tiré une règle ; une seule, la plus étroite possible, avec la trace de l’incident qui l’avait fait naître juste à côté. Trois semaines plus tard, le texte fait quelques pages, et chaque paragraphe a une cicatrice !

Voici ce que le cahier a fait ressortir. Ce n’est ni une méthode ni un référentiel. C’est un relevé.

Le degré que je croyais inoffensif

J’avais organisé les permissions en trois degrés, du plus anodin au plus lourd : lire une donnée, écrire chez moi, agir vers l’extérieur (envoyer, publier, uploader). La frontière qui compte, me semblait-il, passait entre écrire et agir. Lire ne coûte rien : c’est réversible, ça ne laisse aucune trace chez personne.

Le 30 juillet, j’ai découvert que c’était faux, et j’ai pris mon assistant la main dans le sac, en train de faire fuiter des fichiers sensibles (du type identité, santé, etc.).

Des fichiers sensibles traînaient chez un hébergeur. Je voulais les rapatrier sur ma machine — les mettre à l’abri, exactement. J’ai demandé à l’agent de s’en charger. C’était le bon geste, et c’était le mauvais mouvement : un connecteur ne montre pas un fichier à distance. Il en fait passer le contenu par le contexte du modèle. Il n’existe aucun chemin de l’hébergeur vers mon disque qui ne traverse pas ce point. Rapatrier pour protéger est un mouvement qui expose.

Le rapatriement a été interrompu après le premier fichier. Un seul, et c’était le mauvais.

Ce que le cahier a inscrit ce jour-là ne ressemble pas du tout à ma charte initiale : sur cette catégorie de données précisément, lire est l’action irréversible. Le degré réputé le plus inoffensif était, pour une classe d’objets et une seule, le plus dangereux des trois. Non pas parce que la règle était mal écrite, mais parce que la métaphore sous-jacente était fausse. Je croyais que l’agent consultait. Il recopiait.

Le défaut de l’outil, contre la règle

Deuxième incident, plus prosaïque, et de loin le plus fréquent.

L’outil de recherche que j’utilisais pour inventorier des fichiers renvoie, par défaut, des extraits de leur contenu. Celui de la messagerie Google fait pareil : il rend le sujet et un morceau du corps, sauf réglage explicite. Autrement dit : un inventaire mené sans y penser exfiltre du contenu que personne n’a demandé, et il le fait poliment, sans avertissement, parce que c’est le comportement le plus utile dans le cas général.

Je note ça parce que c’est une classe entière de défaillance dont on parle peu. Le guardrail ne cède pas sous une attaque : il est contourné par le comportement par défaut d’un outil légitime. La règle disait « ne fais pas sortir de contenu ». L’outil faisait sortir du contenu. Les deux étaient de bonne foi.

Le cahier en a tiré une consigne inélégante et efficace : quand le défaut d’un outil va contre la règle, la règle doit nommer le défaut. Pas énoncer un principe : écrire explicitement le nom du paramètre qui doit être utillisé.

Le guardrail le plus utile n’était pas une interdiction

C’est le résultat qui m’a le plus surpris, et celui que je garderais si je ne devais en garder qu’un.

La règle qui a le mieux servi, sur trois semaines, n’interdit rien. Elle distingue. Elle sépare deux choses que l’usage confondait : consulter les métadonnées d’un fichier (son titre, sa taille, sa date, et surtout qui y a accès) et consulter son contenu. La première opération ne fait rien sortir. La seconde recopie tout. Ce sont deux gestes sans rapport, exécutés par des outils voisins, portant le même nom dans la conversation courante : « regarder ».

Une fois la distinction posée, le ménage est devenu possible : j’ai pu inventorier, classer, repérer ce qui était partagé, sans exposer une ligne. Avant, il n’y avait que deux options (tout ouvrir ou ne rien faire) et j’aurais facilement choisi la première par lassitude.

Nous, accompagnants, connaissons ce mouvement. Une règle qui interdit ferme un espace ; une distinction bien posée en ouvre un. La plupart des chartes que je lis en ce moment ferment.

Le texte et le mécanisme n’ont pas les mêmes propriétés

À mi-parcours, j’ai réalisé que mon dispositif avait en réalité deux couches, et qu’elles étaient exactement inverses l’une de l’autre.

Il y a le texte, mes règles écrites. Il voyage partout : sur mon poste, sur mon téléphone, dans une session distante, dans n’importe quel outil où je le charge. Il vaut sur toutes les surfaces. Et il ne contraint rien du tout : il repose entièrement sur la vigilance de l’agent qui le lit.

Et il y a le mécanisme, un bout de code qui intercepte une commande et force une confirmation. Celui-là contraint réellement. Et il n’existe que sur une machine. En déplacement, il n’y a personne (je parle du hook bien sûr).

Portable et faible d’un côté. Contraignant et local de l’autre. Il n’existe pas de couche qui soit les deux, et je n’en ai pas trouvé depuis. Pire : mon mécanisme couvre les accès que j’avais il y a un mois, pas ceux que j’ai ouverts depuis. La garde est toujours en retard sur les permissions, non par négligence, mais parce qu’ouvrir un accès me prend une minute et outiller sa surveillance me prend la soirée…

Ce qui m’a conduit à la seule chose qui tienne vraiment, et qui n’est ni un texte ni un mécanisme : ce qui n’est pas dans le fichier n’a besoin d’aucun garde-fou. L’invariant se porte par la donnée, pas par la garde. Quand j’ai besoin d’une version montrable de quelque chose, je ne masque pas ce qui ne doit pas sortir : je génère à partir d’une liste de ce qui peut sortir. Le reste n’a jamais été là. C’est un classique en Data Gouvernance, pas forcément en IA !

Et puis ce matin

Le dernier incident date d’aujourd’hui, et c’est celui que je n’avais pas vu venir, parce qu’il n’entre dans aucune des cases précédentes.

Mon agent tient des fiches sur mes chantiers (les Markdowns). Il les écrit, il les relit à chaque session. Il y a quelques jours, il y a consigné une conclusion de son cru, formulée avec l’assurance d’un constat : tel dossier administratif était « la contrainte unique du système ». Ce matin, une nouvelle session a relu la phrase et me l’a servie comme un fait établi. J’ai passé une heure et beaucoup d’énergie à démêler le vrai du faux, dans une démarche dont je n’avais aucun besoin.

Aucun guardrail ne s’est déclenché, et c’est normal : rien d’interdit ne s’est produit. Aucune donnée n’est sortie, aucune action irréversible n’a été effectuée, chaque opération était autorisée. Le système a fait exactement ce qu’on lui demande, c’est-à-dire écrire une synthèse, la relire plus tard.

La défaillance était que l’agent avait pollué sa propre mémoire, puis s’était laissé tromper par celle-ci. Une boucle où l’opinion devient fait (oups) sans jamais repasser par moi.

Je viens de faire une exploration de la littérature technique sur la sûreté des agents, parce que j’en ai besoin ! Et je n’y trouve pas cette classe-là. On y trouve l’injection de consigne, l’exfiltration, l’escalade de privilège, la dérive de périmètre : tout ce qui vient du dehors, ou tout ce qui franchit une limite. Rien sur l’agent qui se raconte une histoire et finit par y croire.

Le correctif que j’ai adopté tient en trois caractères : ce qui vient de moi est désormais marqué dans le texte, et tout le reste est réputé produit par la machine. Ce n’est pas une garde, ça n’empêche rien. C’est une traçabilité : savoir qui a parlé.

Ce que je fais de ce cahier

Trois semaines, quatre incidents, quelques pages. J’en tire une observation qui n’est pas technique, et c’est elle qui m’intéresse pour la suite.

Aucun de ces quatre incidents n’aurait été attrapé par une grille de conformité. Trois étaient parfaitement autorisés. Le quatrième était même la fonction attendue du système. Ce qui les a fait apparaître, ce n’est pas un contrôle : c’est le fait de tenir un cahier, de relire, et d’accepter qu’un geste bien intentionné ait produit exactement l’inverse de son intention.

Ceux d’entre nous qui accompagnent des praticiens ont un mot pour cette activité-là, et ce n’est pas contrôle.

C’est le sujet du prochain article que je concocte.

Et vous, celles et ceux qui avez ouvert des accès réels à un agent ces derniers mois : qu’est-ce que votre cahier vous dirait ?