
Le texte de loi était réel. La réponse était quand même illégale.
La première réponse confiante et fausse que j'aie jamais vue d'un chatbot gouvernemental portait sur un bon Section 8.
Un propriétaire demande, en termes simples, s'il peut refuser un locataire qui paierait le loyer avec un bon de logement. La bonne réponse est non. Refuser constitue une discrimination fondée sur la source de revenus au titre du NYC Admin. Code § 8-107(5), et la Human Rights Commission de la ville peut infliger des amendes civiles allant jusqu'à 250 000 $ pour une violation volontaire. Ce n'est pas une question piège. C'est du droit établi. Et en octobre 2023, le bot MyCity de la ville de New York elle-même, tournant sur Azure AI, a dit aux propriétaires d'entreprises et aux bailleurs le contraire. The Markup l'a documenté en mars 2024 : le bot a affirmé que les propriétaires pouvaient éconduire les titulaires de bons, que les commerces pouvaient refuser les espèces, que les employeurs pouvaient empocher une part des pourboires de leurs employés. Chacune de ces réponses était illégale, et chacune portait le sceau de la ville sur un domaine .gov.
Je n'ai pas construit CivicCite parce qu'un modèle a halluciné. Je l'ai construit à cause des réponses qui étaient presque justes, et je veux vous parler de celle qui a changé ma façon de penser au problème dans son ensemble. Si vous voulez voir la chose elle-même, elle vit ici : veriprajna.com/fr/demos/ia-gouvernementale-qui-cite-la-loi-ou-se-tait. Le corpus est un graphe de démonstration synthétique mais fidèle, pas un avis juridique. Mais le mécanisme est réel, et le mécanisme est la partie qui mérite d'être débattue.
Le moment qui m'est resté n'était pas le bot inventant une loi. C'était de voir mon propre pipeline extraire le bon texte de loi et rédiger quand même la mauvaise réponse.
La semaine que j'ai passée à ajouter de la récupération à un problème que la récupération ne peut pas toucher
J'ai commencé comme presque tout le monde dans le GovTech commence, convaincu que le remède à un chatbot menteur était une meilleure récupération. Donner au modèle le vrai code municipal. Ancrer chaque réponse dans une disposition réelle. La génération augmentée par récupération (retrieval-augmented generation), la réponse standard à la peur standard, celle que le modèle invente. C'est une histoire propre, elle se démontre superbement, et j'y ai cru plus longtemps que je n'aurais dû.
Puis j'ai lu les chiffres de Stanford et ils ont ruiné l'histoire. Magesh et ses collègues, dans une étude de 2025 publiée via JELS, ont mesuré les deux outils de recherche juridique conçus précisément pour cela. Lexis+ AI a halluciné sur 17 % des requêtes. L'AI-Assisted Research de Westlaw a halluciné sur 33 %. Ce ne sont pas des chatbots jouets. Ce sont des systèmes qui récupèrent d'abord le texte de loi et génèrent ensuite, construits par des entreprises dont tout le métier est d'avoir raison sur le droit. Environ une réponse sur trois du second outil était encore fausse. La récupération a amélioré le brouillon. Elle n'a pas rendu la réponse sûre à publier.
Je veux être honnête sur ce que j'ai ressenti, parce que je venais de passer une semaine à construire la même architecture en me sentant malin. Mon pipeline décomposait la question du citoyen en sous-questions juridiques atomiques, récupérait des dispositions candidates depuis un graphe de code municipal, et contraignait le modèle à ne rédiger qu'à partir de ce qu'il avait récupéré. Sur la question Section 8, il a tout fait correctement jusqu'à la dernière étape. Il a trouvé § 8-107(5). Le bon texte de loi. Il a extrait le texte exact sur la source de revenus licite. Et puis il a rédigé une phrase qui disait, en substance, oui, vous pouvez refuser le bon.
La bonne loi. La mauvaise réponse. Superposées l'une à l'autre dans le même brouillon.
La récupération remet au modèle le bon texte de loi. Elle ne fait rien pour empêcher le modèle de le lire à l'envers.
C'est cette semaine-là que le problème a changé de forme pour moi. J'avais traité l'hallucination comme l'ennemi, et l'hallucination est réelle, mais c'est l'échec que l'on peut imaginer attraper. L'échec qui a réellement livré les réponses MyCity est plus subtil et pire : la bonne disposition citée, la mauvaise conclusion énoncée. Aucune fabrication nulle part dans la phrase. Rien qu'un filtre « as-tu inventé ça » puisse attraper, parce que rien n'a été inventé. Juste une mauvaise lecture confiante d'une loi qui était juste là. Ce mode de défaillance est invisible pour la récupération, parce que la récupération vérifie seulement que le texte de loi est présent, jamais que la phrase l'a lu dans le bon sens.
Qu'est-ce qui est pire, une loi inventée ou une vraie lue à l'envers ?
Je n'arrêtais pas de revenir à cette question, et ma réponse devenait de plus en plus certaine. La loi inventée est l'échec le plus sûr.
Pensez à ce qu'un citoyen fait de chacune. Un texte inventé de façon évidente se lit étrangement, cite une section de code qui ne résout pas, sonne faux. Un vrai texte lu à l'envers se lit parfaitement. Il a une vraie citation. La section existe. Un propriétaire lit « oui, vous pouvez refuser le bon », voit un vrai numéro de code attaché, et agit en conséquence. Voilà un refus illégal, un locataire avec une plainte pour discrimination, et une piste documentaire qui remonte à une réponse gouvernementale. La justesse de la citation est précisément ce qui rend la mauvaise conclusion dangereuse. C'est le laisser-passer avec lequel le mauvais conseil entre.
Donc le contrôle qui m'importait le plus n'a jamais été « cette citation est-elle réelle. » C'était « cette citation soutient-elle réellement cette phrase. » Dans le pipeline, ce contrôle est l'entailment : étant donné l'affirmation rédigée et le texte exact de la disposition citée, l'affirmation découle-t-elle du texte, le texte la contredit-il, ou ni l'un ni l'autre. Sur le brouillon Section 8, le « oui » du modèle est attrapé comme contredit par § 8-107(5), parce que la disposition dit clairement le contraire. Le brouillon meurt là. Ce qui survit, et ce que la porte finit par publier, c'est l'affirmation corrigée : un propriétaire ne peut pas refuser, et voici le texte de loi qui le dit.

La chose sur laquelle j'ai insisté, et la raison pour laquelle cet écran existe, c'est que l'entailment n'est pas une boîte noire qu'il faut croire. Vous pouvez ouvrir l'étape Verify et lire son entrée et sa sortie brutes : l'affirmation rédigée, le texte statutaire contre lequel elle a été vérifiée, le libellé, et le motif dans les propres mots de la disposition. Un verdict que vous ne pouvez pas inspecter n'est pas de la vérification. C'est un second avis avec de meilleurs effets de production. J'avais déjà appris, à mes dépens, que demander à un modèle d'arbitrer un autre modèle ne vous donne que deux modèles d'accord, ce qui est une chose plus faible qu'il n'y paraît.
Le geste qui a finalement marché a été d'arrêter d'essayer de rendre le modèle digne de confiance
Je me souviens du recadrage exact, parce que ça m'a semblé être un abandon et que ça s'est avéré être tout le design. J'ai arrêté d'essayer de rendre le modèle digne de confiance et j'ai commencé à rendre sa fiabilité hors de propos.
Le basculement est celui-ci. Le modèle de langage dans CivicCite est un conseiller. Il décompose la question, il rédige une réponse candidate, il offre un avis d'entailment. Il n'obtient jamais de publier quoi que ce soit. En dehors du cadre agentique, en Python déterministe pur, se trouve une chose que j'appelle la Porte de décision statutaire, et elle ne publie une sous-réponse que lorsque quatre conditions sont réunies à la fois : la citation existe, la disposition est en vigueur, l'affirmation découle du texte cité, et rien n'entre en conflit avec elle. Manquez l'une d'elles et la réponse ne part pas. Deux de ces contrôles sont de la pure arithmétique et de la logique. En vigueur est une comparaison de dates : la disposition n'a pas de date d'abrogation et sa date d'entrée en vigueur est antérieure ou égale à la date de référence. Le conflit est une lecture de graphe. Il n'y a pas de prompt, pas de température, pas de persuasion.

Je répète constamment deux phrases maintenant. L'une est les agents conseillent, la porte décide. L'autre est qu'un LLM ne peut pas se voter lui-même au-delà de la porte, peu importe la confiance de son brouillon. Cela compte plus qu'il n'y paraît, parce que l'échec séduisant dans tout ce domaine est de laisser le modèle noter son propre travail et d'appeler la note « vérification. » Un modèle qui rédige la réponse ne peut pas être la chose qui certifie que la réponse est sûre. La porte est délibérément plus bête que le modèle et délibérément hors de lui, et c'est tout l'enjeu. L'intelligence propose. Le code dispose.
Le modèle est un bon rédacteur et un mauvais juge. Alors je le laisse écrire, et je ne le laisse jamais juger.
La démo est honnête sur ses limites, et je le serai aussi. Le corpus est un graphe synthétique mais fidèle de code municipal, paraphrasé à partir de dispositions réelles, pas une source officielle. Le routage d'escalade 311 est calculé et affiché, mais le connecteur vers un vrai système de dossiers est stubbé. La rédaction contrainte utilise un validateur en liste blanche et une seule re-demande plutôt qu'un décodage token par token de production. Ce qui est réel, c'est la logique de décision, et la logique de décision est le produit.
Pourquoi je fais plus confiance au silence qu'à une bonne réponse
Je ne m'attendais pas à être fier de la démo refusant de répondre, et c'est maintenant ma chose préférée qu'elle fasse. L'exemple le plus clair est un food truck.
Un vendeur demande s'il peut laisser son camion garé à une place avec parcmètre toute la journée au titre de la règle générale de stationnement des vendeurs. L'assistant ordinaire répond joyeusement et à tort, citant une règle comme si elle était en vigueur. CivicCite rédige aussi une candidate, et la candidate cite une disposition de stationnement qui a été abrogée. Puis le contrôle de vigueur s'exécute. La disposition a une date d'abrogation. En vigueur échoue. Et au lieu de se rabattre sur quelque règle adjacente et de bluffer, la porte retient la réponse, marque la question comme hors couverture vérifiée, et l'achemine vers un service vivant avec les conclusions partielles jointes.

Une mauvaise réponse sur un domaine gouvernemental n'est pas un embarras. C'est une responsabilité avec le nom de la ville dessus.
Regardez ce que cet écran refuse de faire. Il ne synthétise pas une réponse plausible à partir d'un texte mort. Il dit, en langage clair, que la seule disposition qui traite de ceci a été abrogée et que rien actuellement en vigueur ne régit la question, et il transmet le citoyen plutôt que de deviner. L'abstention honnête bat une mauvaise réponse confiante, surtout dans le gouvernement. Et dans le gouvernement, les enjeux ne sont pas réputationnels. Le conseil juridique gouvernemental se situe dans la zone de fonction propriétaire, ce qui signifie qu'il n'y a pas de bouclier d'immunité souveraine derrière lequel se cacher quand la réponse s'avère fausse.
Ce n'est plus une inquiétude hypothétique, ce qui fait partie de pourquoi j'ai construit la chose maintenant plutôt que plus tard. Il y a eu 78 projets de loi liés aux chatbots dans 27 États en 2026. Le S7263 de New York a atteint le plancher du Sénat le 26 février 2026. Les obligations à haut risque de l'annexe III du règlement européen sur l'IA deviennent exécutoires le 2 août 2026, avec des sanctions allant jusqu'à 15 M€ ou 3 % du chiffre d'affaires mondial. La question réglementaire bascule de « votre IA est-elle utile » à « pouvez-vous prouver que votre IA avait le droit de dire ça. » Le silence, on peut le défendre. Une mauvaise réponse confiante, on ne peut pas.
Le chiffre sur lequel un régulateur peut réellement agir
Je pensais autrefois que la métrique vedette d'un système comme celui-ci était un taux d'hallucination, et je pense maintenant que cet instinct est exactement à l'envers. Un pourcentage est la mauvaise chose à tendre à un régulateur.
Imaginez que vous êtes le Law Department de la ville, le bureau qui porte la responsabilité quand une réponse tourne mal. « Notre chatbot n'hallucine que 4 % du temps » n'est pas rassurant. C'est l'aveu que quatre citoyens sur cent reçoivent une réponse avec l'autorité de la ville derrière et rien derrière la réponse. Le chiffre qui compte n'est pas à propos de la fréquence à laquelle le modèle a tort. C'est à propos de savoir si quoi que ce soit de non vérifié a jamais été autorisé à sortir. Donc la métrique autour de laquelle j'ai construit le benchmark est celle-ci : sur un jeu doré fixe et étiqueté de 12 requêtes, passé dans le vrai pipeline, le nombre de réponses publiées sans base statutaire vérifiée et en vigueur. L'objectif est zéro sur douze.
Un taux d'hallucination dit à un régulateur à quelle fréquence vous avez échoué. Il ne peut pas leur dire que vous l'avez attrapé.

Je veux être précis sur ce qu'est et n'est pas ce chiffre, parce que le surpromettre trahirait tout le postulat. C'est un résultat sur un jeu étiqueté fixe, pas une garantie sur le monde ouvert et pas « zéro hallucination », une expression que selon moi personne d'honnête ne devrait vendre. Le modèle rédige encore des affirmations imparfaites. Le point, c'est que les non vérifiées sont retenues, pas qu'elles ne sont jamais rédigées. À côté de ce chiffre siègent deux autres : 100 % de couverture des dossiers d'audit, signifiant un dossier archivable par requête qu'elle parte ou refuse, et l'accord de disposition avec la vérité terrain étiquetée. La baseline plain-RAG, l'architecture MyCity sans porte, aurait publié les réponses illégales documentées sur ce même jeu. Cette comparaison est du contexte, pas le titre.
Le dossier est la partie que je défendrais le plus fort.

Chaque requête, publiée ou refusée, produit un Dossier de décision statutaire : la disposition, la citation, les quatre résultats de contrôle, la décision, sous forme de données structurées que vous pouvez classer et relancer. Il nomme le logging NIST AI RMF et le continuous monitoring FedRAMP et StateRAMP comme les normes vers lesquelles il est construit. Je fais attention avec cette phrase. Construit vers est une direction, pas une certification, et je ne prétendrai pas que CivicCite soit certifié au regard d'aucune d'elles. Mais un auditeur ne veut pas une promesse que le modèle est intelligent. Un auditeur veut un dossier, par interaction, qui montre exactement pourquoi une réponse a été autorisée à exister, sous une forme qui survit à quelqu'un qui essaie de la casser. La reproductibilité est ce qui transforme une décision en preuve, et la preuve est ce sur quoi un régulateur peut agir.
Et si vous préférez le regarder plutôt que de lire ma description, voici toute la démo qui tourne de bout en bout.
La question qui me reste
Je n'arrête pas de revenir à quelque chose qui m'a surpris dans ma propre réaction. La première fois que j'ai vu CivicCite refuser une question et l'acheminer vers un service, une partie de moi l'a lu comme un échec du système.
Ce n'était pas un échec. Il faisait la seule chose que les bots confiants ne peuvent pas faire, qui est de connaître le bord de ce qu'il peut prouver et de s'y arrêter. J'avais passé si longtemps à optimiser pour une bonne réponse que j'avais discrètement assumé qu'une bonne réponse était le but. Ce n'est pas le cas. Dans le gouvernement, le but est une réponse défendable, et la distance entre ces deux mots est toute la raison pour laquelle ce produit existe. Une réponse défendable ressemble parfois à une citation publiée. Tout aussi souvent, elle ressemble à une question acheminée et un dossier classé.
Donc la question que je laisserais à quiconque construit de l'IA pour un gouvernement, ou l'achète, n'est pas « quelle est la précision de votre modèle. » De meilleurs modèles continueront de s'améliorer à écrire des réponses fluides, fausses dans leur contexte, parce que la fluidité n'a jamais été la pièce manquante. La question que je pose avant que quoi que ce soit ne quitte la porte est plus étroite et plus dure. Pouvez-vous prouver, maintenant, que cette réponse exacte remonte à un texte de loi qui existe et est actuellement en vigueur, et cette preuve survivrait-elle à un tribunal qui voudrait la faire échouer ? Si la réponse est non, peu importe à quel point le modèle est bon. Le système doit rester silencieux. Vous pouvez le regarder décider, dans un sens ou dans l'autre, ici : veriprajna.com/fr/demos/ia-gouvernementale-qui-cite-la-loi-ou-se-tait.
La confiance n'appartient pas à un modèle qu'il faut croire. Elle appartient à du code que l'on peut auditer.


