Claude a généré trois citations la semaine dernière. Aucune d’entre elles n’existait. Les titres des articles semblaient plausibles, les auteurs étaient réels, mais les journaux étaient inventés. Ce n’était pas un bug — c’était une hallucination, et cela se produit à cause du fonctionnement réel de ces modèles.
Les hallucinations se produisent lorsqu’un LLM génère du texte qui semble confiant mais contredit la réalité, le contexte ou l’instruction. Ce ne sont pas des bugs. Ni imprévisibles. Elles sont une conséquence directe de la manière dont les modèles transformeurs prédisent les tokens, et elles se produisent à grande échelle dans chaque déploiement en production.
Ce qui se passe réellement lorsqu’un LLM hallucine
Les modèles linguistiques ne récupèrent pas de faits. Ils prédisent le token suivant statistiquement le plus probable en se basant sur les modèles de données d’entraînement. Lorsque vous posez une question à Claude ou GPT-4o, le modèle ne consulte pas une base de données. Il calcule des distributions de probabilité sur des milliers de tokens possibles et choisit les gagnants, token par token, jusqu’à ce qu’il atteigne une condition d’arrêt.
Cela fonctionne magnifiquement pour de nombreuses tâches. Mais lorsque le modèle rencontre une requête qui se situe en dehors de ses données d’entraînement — ou lorsque plusieurs continuations plausibles existent — il ne dit pas « Je ne sais pas ». Il génère de toute façon le token suivant statistiquement probable. Ce token devient le contexte de la prédiction suivante. La confiance s’accumule. Une hallucination est née.
Le problème s’accélère avec les sorties plus longues. Chaque nouveau token dépend des tokens précédents, et si les prédictions antérieures étaient erronées, le texte en aval diverge davantage de la réalité. Une étude d’Anthropic (mars 2024) a révélé que le taux d’erreur de Claude sur les questions factuelles double environ lorsque les réponses dépassent 2 000 tokens par rapport aux réponses de moins de 500 tokens.
La température et le hasard ne sont pas le vrai coupable
La plupart des développeurs blâment initialement les réglages de température. Température plus basse = moins d’hallucinations, n’est-ce pas ? Partiellement vrai, mais incomplet. La température contrôle le caractère aléatoire de l’échantillonnage, pas fondamentalement l’hallucination. Régler la température à 0 (mode déterministe) empêche le modèle de choisir des tokens improbables — mais cela ne l’empêche pas de générer des déclarations fausses et confiantes basées sur des choix erronés à haute probabilité.
C’est là que la plupart des guides échouent. Baisser la température réduit la variabilité mais pas l’exactitude. Vous obtenez des hallucinations cohérentes au lieu de aléatoires.
Quatre techniques qui réduisent réellement les taux d’hallucination
1. Ancrage : Forcer le modèle à citer des sources
C’est le levier le plus simple. Lorsque vous exigez que le modèle quote ou cite des documents sources dans sa réponse, les hallucinations diminuent considérablement — pas à zéro, mais de manière mesurable. Le modèle est contraint par ce qui existe réellement dans votre entrée.
Mauvaise requête :
Résumez les principales conclusions de ce document de recherche sur l'efficacité de l'apprentissage automatique.
[texte du document ici]
Ce qui se passe : Le modèle génère des points de résumé qui semblent pouvoir provenir du document, mais il peut inventer des conclusions ou les attribuer à tort.
Requête améliorée :
Résumez les principales conclusions de ce document de recherche. Pour chaque conclusion, citez la phrase exacte du document qui la soutient. Si un point n'est pas directement énoncé dans le document, marquez-le comme [INFÉRÉ] et expliquez votre raisonnement.
[texte du document ici]
Pourquoi cela fonctionne : Le modèle doit maintenant faire correspondre sa sortie avec le texte réel. Il commet toujours des erreurs, mais le taux d’erreur diminue car il ne peut pas fabriquer sans violer l’exigence de citation. En pratique, cela réduit le taux d’hallucination de 40 à 60 % pour les tâches d’extraction factuelle.
2. RAG (Retrieval-Augmented Generation) : Laissez-le chercher, pas mémoriser
Les hallucinations se produisent souvent parce que le modèle essaie de répondre de mémoire (données d’entraînement) alors qu’il devrait répondre du contexte. La Génération Augmentée par Récupération inverse cela : vous fournissez des documents pertinents avant la requête, et le modèle construit sa réponse à partir de ce qui est réellement là.
Cela nécessite une infrastructure — une base de données vectorielle, un récupérateur, une stratégie de découpage — mais c’est la technique la plus fiable pour les flux de travail riches en connaissances. Les taux d’hallucination sur les tâches de récupération avec des implémentations RAG solides se situent autour de 5 à 8 %, contre 20 à 30 % sans ancrage.
Flux de travail :
- L’utilisateur pose une question
- Le récupérateur recherche votre base de connaissances et renvoie les 3 à 5 documents les plus pertinents
- Ces documents sont injectés dans la requête comme contexte
- Le LLM génère une réponse ancrée dans ce contexte
- La sortie cite quelles sections du document ont éclairé la réponse
Le compromis : RAG ajoute de la latence et nécessite la maintenance des sources documentaires. Il échoue également silencieusement si les documents pertinents ne sont pas dans votre base de données — le modèle hallucine une réponse au lieu de dire « non trouvé ».
3. Formats de sortie contraints
Lorsque vous imposez une sortie structurée — JSON, XML, catégories prédéfinies — vous réduisez l’espace dans lequel les hallucinations peuvent se produire. Le modèle peut toujours faire des erreurs, mais il ne peut pas inventer de champs entiers.
Mauvaise requête :
Extrayez le nom de l'entreprise, l'année de fondation et le PDG de ce communiqué de presse.
[texte du communiqué de presse]
Sortie attendue (hallucinée) :
Entreprise : TechVision Inc
Année de fondation : 2015
PDG : Sarah Martinez
Approche améliorée :
Extrayez les informations du communiqué de presse. Retournez uniquement du JSON valide. Si un champ n'est pas mentionné dans le texte, retournez null.
{