Que fait reduce-hallucination ?
Transformez les techniques vérifiées que la science de l'interrogatoire utilise pour amener un témoin compétent à dire la vérité en un audit standard pour les agents LLM. Chaque nœud LLM est un témoin. La transition entre les nœuds est la transcription du témoignage. Les corrections de l'utilisateur et les enregistrements de tâches sont des preuves physiques.
La théorie et les preuves se trouvent dans references/. Lisez references/research-map.md pour les citations derrière chaque affirmation.
Trois règles de fer
- Pas d'accusation sans preuve (règle de Wellman). Chaque constat doit citer la requête, le schéma ou la sortie réelle concerné. Un soupçon sans citation va dans une liste « à vérifier », pas dans les constats.
- Les signaux de surface ne prouvent pas la vérité. Un texte fluide, confiant et détaillé n'est pas plus correct qu'un texte laconique. Les gens lisent la tromperie à partir du comportement à peu près au hasard. Jugez uniquement le contenu : l'ancrage, la cohérence, si l'étendue citée existe.
- L'auto-correction nécessite un nouveau signal externe. « Êtes-vous sûr ? Vérifiez à nouveau » sans nouvelle preuve dégrade la précision. Chaque nouvelle vérification doit injecter des résultats récupérés ou la sortie du validateur.
Les trois piliers d'une bonne citation
La qualité des citations se décompose en trois vérifications, par ordre croissant de difficulté et de valeur :
| Pilier | Question | Statut aujourd'hui |
|---|---|---|
| Fidèle | La citation est-elle textuellement réelle et l'affirmation non fabriquée ? | En grande partie résolvable : correspondance textuelle de chaîne + abstention. |
| Pertinente | La source est-elle sur le sujet pour la question ? | En grande partie résolvable : qualité de la récupération + sondage de cohérence. |
| Supportive | La source soutient-elle l'affirmation, vs la contredit-elle, vs reste-elle neutre ? | La frontière. Difficile, et la rare classe « contredit » est celle où les systèmes sont les plus faibles. |
Une citation qui correspond à un passage réel et pertinent mais qui ne soutient pas réellement l'affirmation (« mé-ancrage ») est pire qu'aucune citation, car elle crée une confiance artificielle sur une affirmation erronée et désarme la seule défense qui fonctionne pour le réviseur (vérifier le contenu). Montrer une citation sans la vérifier en arrière-plan rend l'hallucination plus dangereuse, pas moins.
Protocole d'audit
Phase 1 — interrogez chaque témoin (drapeaux rouges de la requête et du schéma)
Pour chaque nœud LLM, exécutez la liste des drapeaux rouges. Chaque drapeau est une violation d'interrogatoire.
| # | Drapeau rouge (quoi chercher) | Pourquoi c'est important | Préjudice |
|---|---|---|---|
| R1 | Un champ d'énumération sans option null / unknown ; une instruction unidirectionnelle « générez une confirmation de X ». | Forcer une réponse produit de la conformité (analogue à de faux aveux). | Fabrication forcée, élaboration confiante. |
| R2 | La prose accorde une abstention (« utilisez null si absent ») mais le schéma n'a pas de null. | Le schéma l'emporte, l'abstention est nulle. | Fabrication silencieuse. |
| R3 | La requête demande des preuves/citations, mais rien en aval ne les vérifie. | Dire sans vérifier apprend au modèle à fabriquer des citations plus convaincantes. | Ancres fictives. |
| R4 | Instructions directionnelles : « soyez conservateur », « supposez », « déduisez de », « par défaut à ». | Présomption unidirectionnelle ; combiné avec R1, cela produit un biais systématique. | Sortie biaisée dans une direction. |
| R5 | Un champ agrégé sans unité définie (« années totales », « score global »). | Une mesure doit avoir son unité déclarée avant de pouvoir être verrouillée. | Inadéquation de définition interprétée comme une erreur d'extraction. |
| R6 | Exemples few-shot qui sont hors tâche ou qui modélisent un raisonnement sans citation. | Les exemples fixent l'attente d'une réponse « bonne ». | Enseigne le mauvais style de sortie. |
| R7 | La requête prétend que le nœud peut faire quelque chose pour lequel il n'a pas d'outil. | Fausse prémisse. | Narration de processus fabriquée. |
| R8 | Un « fait » fourni par l'utilisateur ou un nœud amont, utilisé comme vérité sans balise de source. | Ne confronter qu'avec des preuves vérifiées. | Pollution des prémisses. |
| R9 | Un modèle avec un emplacement obligatoire et aucune branche vide. | La version modèle de forcer une réponse. | Un blanc est rempli avec la valeur la plus proche. |
| R10 | Nouvelle vérification / nouvelle tentative écrite de manière agressive (« vous vous êtes trompé, corrigez ») sans nouvelle preuve. | La sycophantie inverse les réponses correctes. | Les bonnes réponses sont annulées. |
Enregistrez chacun comme : nœud | R# | texte cité | conséquence en une ligne.
Phase 2 — auditez la transcription (limites des nœuds / flux de données)
C'est là que se produit la plupart des hallucinations de pipeline. Dessinez le flux de données et vérifiez chaque arête :
- L'incertitude traverse-t-elle la frontière ?
confidence/missing_fields/null/ notes en amont — est-ce que quoi que ce soit en aval les consomme, ou un modèle les aplatit-il en une assertion ? Recherchez l'incertitude « lettre morte » : produite mais jamais lue. - La provenance est-elle perdue ? Une valeur que le raisonnement en amont admet être « supposée/déduite » devient un fait non marqué en aval. Le schéma devrait porter
stated | inferred | absent. - Les catégories de faits se croisent-elles ? Des données de configuration ou d'exigence rendues comme si l'utilisateur/le document les avait affirmées.
- Un agrégat change-t-il d'unité ? « années médicales totales » en amont devient « années en tant que titre X » en aval.
- Le LLM effectue-t-il un calcul déterministe ? Le calcul de dates, les sommes, les décomptes dans une requête doivent être déplacés vers une étape de code.
Phase 3 — faites correspondre les preuves physiques (lorsque des enregistrements de tâches existent)
- Extrayez les sorties intermédiaires des nœuds pour un échantillon de tâches (privilégiez celles avec des corrections d'utilisateur ou des échecs).
- Comparez la sortie finale avec chaque sortie intermédiaire de nœud par rapport à l'entrée brute, champ par champ ; localisez quelle première frontière a perdu la vérité.
- Trouvez des déclarations antérieures incohérentes : le même champ se contredisant d'un nœud à l'autre.
- Si les corrections sont directionnelles (systématiquement dans un sens), revérifiez les instructions directionnelles de la phase 1 R4 ; une erreur aléatoire pointe davantage vers la qualité de l'entrée.
- Classez honnêtement : « information qui n'a jamais été dans la source » (un écart de processus, pas une hallucination) vs « information qui était dans l'entrée mais formulée incorrectement » (une véritable hallucination).
Phase 4 — correctifs classés (par ROI)
Couche 1 — requête / schéma (aucun changement structurel)
- Chaque R1/R2 → ajoutez une énumération
null/unknown+ une ligne dé-stigmatisante (« X est une réponse correcte et attendue »). - Chaque R9 → ajoutez une branche vide au modèle (l'assertion devient une question ouverte).
- Chaque R5 → divisez l'unité, ou affichez une plage
{floor, ceiling}. - Chaque R3 → ajoutez un triplet
{value, source, evidence_quote}aux champs porteurs de charge.
Couche 2 — un validateur de code déterministe (coût LLM nul)
| Validateur | Vérifications |
|---|---|
| Liste blanche d'énumération | La valeur du champ est dans l'ensemble autorisé. |
| Correspondance textuelle de chaîne | evidence_quote existe textuellement dans la source citée ; sinon, rejetez ou dégradez. |
| Cohérence entre champs | Les totaux se réconcilient ; missing_fields ne contredit pas les valeurs remplies. |
| Calcul d'unité | Les différences de dates / sommes effectuées dans le code ; le LLM ne fait que de l'extraction sémantique. |
| Contrat de sortie | Chaque emplacement de fait visible par l'utilisateur est non vide et provient d'un champ source autorisé. |
Placez-le avant tout nœud qui produit du contenu visible par l'utilisateur. En cas d'échec, écrivez un indicateur de repli et acheminez vers une question ouverte ou un humain.
Couche 3 — un nœud d'examinateur croisé LLM (LM-contre-LM)
- Un nœud séparé qui reçoit uniquement la sortie examinée plus le document source (pas le contexte polluant).
- Formulez la tâche pour réfuter : « Essayez de réfuter : est-ce que chaque affirmation dans cette sortie remonte au document source ? Listez les affirmations qui ne le font pas. »
- Sortie
{verdict, offending_claims[]}; pour les flux à enjeux élevés, reposez la question dans un ordre différent et prenez un vote de cohérence. - Coût : +1 appel LLM par tâche — limitez-le aux sorties visibles par l'utilisateur ou aux décisions à enjeux élevés uniquement.
Phase 5 — le rapport
# Audit d'hallucination — {agent}
## Verdict en une ligne
## Aperçu des preuves (nœuds / version auditée / échantillon de tâches / échantillon de corrections + direction)
## Constats (chaque : emplacement | R# | texte cité | conséquence | correctif #)
## Carte des flux de données et canaux de lettres mortes
## Recommandations de correctifs (Couche 1/2/3, chacune étiquetée avec les constats qu'elle élimine)
## À vérifier (soupçons sans suffisamment de preuves + comment les obtenir)
## Limite honnête (quelles corrections sont des écarts de processus, pas des hallucinations ; ce que cet audit n'a pas couvert)
La supportivité comme frontière (extension facultative)
Fidèle + pertinent sont le minimum. Le problème ouvert est supportif : la source citée soutient-elle, contredit-elle ou reste-t-elle neutre sur l'affirmation ? Deux notes de la recherche :
- Modélisez-le comme position plus degré. La position à trois voies (implique / contredit / neutre) manque le soutien partiel ou conditionnel, qui constitue l'essentiel des textes réglementaires et juridiques. Ajoutez un indicateur « partiel/conditionnel » qui achemine vers un examen humain.
- La supportivité est relative à l'intention. Le même passage soutient « nous nous conformons » et contredit « nous avons une lacune », selon ce que l'utilisateur avance. Lorsque la position ou l'intention est incertaine, présentez à la fois une source qui soutient et une source qui contredit et laissez l'utilisateur choisir. Présentez la direction comme un indicateur invitant à l'examen, pas comme un verdict.
Rappels
- Si une requête est « choquante », vérifiez d'abord s'il s'agit d'un modèle généré automatiquement (la répétition Rôle/Objectif/Tâche en est le signe). « Un problème systématique avec ce générateur » vaut mieux que d'énumérer le même défaut par agent.
- Contrastez au sein d'un même agent : quels champs sont propres et lesquels échouent. La différence est généralement la réponse (les champs avec une option
unknownont tendance à être propres). - Passez le rapport à travers une étape de révision en langage clair : un constat doit être compréhensible pour quelqu'un qui n'a pas lu la théorie.
Compétences connexes
Fait partie d'une petite famille de compétences d'agent ouvertes pour une communication fiable et claire :
- reduce-hallucination — auditer les agents LLM ; ancrer, citer, s'abstenir.
- better-doc — Style classique + Brièveté intelligente.
- numbers — donner du sens aux chiffres, et les afficher proprement.