Un angle différent par rapport aux réponses ci-dessus, car tout le monde jusqu’à présent contrôle les écritures : argent, courriels, dossiers. L’action que j’ai dû apprendre à contrôler est celle qui n’écrit rien, l’IA répondant directement à un client.
Un chatbot répondant à une vraie personne est aussi une action externe irréversible. Une fois qu’il a dit quelque chose de mal, vous ne pouvez pas l’annuler. Mais aucun des instincts habituels ne se déclenche, car rien n’a été inséré, rien n’a frappé une API externe, aucune ligne n’a changé. Cela ne ressemble pas à la classe d’action dangereuse, donc habituellement cela ne reçoit pas de contrôle du tout.
Ce que j’utilise à la place d’une étape d’approbation humaine, puisque vous ne pouvez pas mettre un humain devant une réponse de chat en direct sans tuer le produit : une porte de confiance entre la récupération et la réponse. Si les preuves récupérées sont trop minces ou la similarité trop faible, le modèle ne peut pas répondre. Il dit qu’il n’a pas cette information et remet la main à un humain. Le refus est la valeur par défaut et répondre est ce qui doit être gagné. Même structure qu’une liste blanche, simplement appliquée à savoir si le modèle peut parler plutôt que s’il peut agir.
Deux choses que j’ai mal comprises et qui valent probablement la peine d’être transmises.
Sur votre question d’audit : je consigne les fragments récupérés et leurs scores de similarité à côté de chaque réponse, et pas seulement le texte final. Sans cela, « pourquoi a-t-il dit cela » est sans réponse, car le texte de réponse seul ne vous dit rien sur ce que le modèle regardait réellement. C’est la version côté lecture de ce que nathan3 a dit sur le stockage du raisonnement de l’agent aux côtés de la décision.
Deuxièmement, et celui-ci m’a attrapé il y a deux jours : la porte elle-même peut échouer en silence, et elle échoue dans la direction qui semble sûre. Une condition obsolète dans un nœud de filtre en aval de la récupération supprimait chaque ligne, donc la porte voyait zéro preuve et refusait correctement. Chaque exécution verte, aucune erreur levée. Le bot disait poliment aux gens qu’il ne connaissait pas les choses qu’il connaissait manifestement, et cela aurait continué indéfiniment, car un refus ne ressemble jamais à un échec. Je ne l’ai trouvé qu’en posant une question dont je savais déjà que les documents source répondaient.
Donc, la chose que j’ajouterais au modèle proposer puis exécuter décrit ci-dessus : quel que soit le composant qui décide « ne pas continuer », surveillez la fréquence à laquelle il se déclenche. Un chemin de refus qui passe silencieusement de 5 pour cent du temps à 100 pour cent du temps est un système cassé qui ressemble exactement à un système prudent.