Lesson 13/17 9 min

Spotting hallucinations

AI confidently invents functions, methods and options that do not exist. Learn to trust the logic but verify every reference.

FR EN

La fonction qui n'existait pas

Vous demandez à l'IA de formater une date en PHP. Elle vous répond, sûre d'elle, avec un magnifique str_format_date($date, 'd/m/Y'). Le code a l'air parfait, bien indenté, bien commenté. Vous le collez, vous lancez la page... Fatal error: Call to undefined function str_format_date().

Cette fonction n'existe pas. Elle n'a jamais existé. L'IA l'a tout simplement inventée, parce qu'elle « sonnait juste ». C'est ce qu'on appelle une hallucination : l'IA produit avec un aplomb total des fonctions, des méthodes, des API de bibliothèques et des options de configuration qui n'existent pas.

Attention : le piège central : ne jamais faire confiance à une référence (nom de fonction, méthode, option, paramètre) que vous n'avez pas vue dans la documentation officielle. L'IA est convaincante même quand elle se trompe. Son assurance n'est jamais une preuve d'exactitude.

Faire confiance à la logique, vérifier chaque référence

C'est la nuance essentielle. L'IA est généralement très bonne sur la logique : la structure d'une boucle, l'enchaînement des conditions, l'algorithme global sont souvent solides. Là où elle dérape, c'est sur les références factuelles : le nom exact d'une fonction, sa signature, les options qu'elle accepte.

Le bon réflexe se résume en une phrase : « trust the logic, verify every reference ». Vous pouvez vous appuyer sur le raisonnement, mais chaque nom d'API doit être confirmé.

Et attention : ce sujet est distinct de la code review (la qualité du code) et de la sécurité. Ici, on ne juge pas si le code est élégant ou sûr. On vérifie une seule chose : est-ce que ça existe vraiment ? Une hallucination, c'est un problème d'exactitude factuelle, pas de style.

Bon à savoir : les hallucinations apparaissent plus souvent sur les bibliothèques de niche, les versions récentes mal documentées, ou les API que vous-même connaissez mal : exactement là où vous avez le moins de moyens de les repérer.

Le décalage de version : le piège silencieux

Le cas le plus sournois n'est pas la fonction totalement inventée. C'est la fonction qui existe vraiment... mais pas dans votre version. L'IA a appris sur du code de toutes les versions mélangées. Elle vous propose une méthode bien réelle de la v3 d'une bibliothèque, alors que votre projet tourne en v2 où elle n'existe pas encore.

Exemple concret en JavaScript : l'IA vous écrit array.findLast(fn) pour récupérer le dernier élément correspondant. C'est une vraie méthode... ajoutée seulement dans les versions récentes. Sur un environnement plus ancien, vous obtenez :

const last = users.findLast(u => u.active);
// TypeError: users.findLast is not a function
//   → la methode existe, mais pas dans cette version

Le code n'est pas « faux » dans l'absolu : il est faux pour votre contexte. C'est précisément ce que l'IA ignore si vous ne lui précisez pas votre version exacte.

Astuce : indiquez toujours vos versions dans le prompt (« PHP 8.1, Symfony 5.4 ») et, en cas de doute, demandez directement : « Es-tu sûr que cette fonction existe en version X ? Donne-moi le lien de la doc officielle. » Cela force l'IA à reconsidérer, et révèle souvent l'invention.

Le détecteur le plus rapide : exécuter le code

Vous pouvez relire pendant des heures. Le moyen le plus rapide et le plus fiable de débusquer une hallucination reste de faire tourner le code dans un bac à sable et de regarder les erreurs apparaître.

  • Python : un ImportError ou AttributeError au lancement dénonce immédiatement un module ou une méthode inventés.
  • JavaScript : un is not a function ou undefined dans la console pointe une API qui n'existe pas dans votre environnement.
  • PHP : un Call to undefined function est l'aveu direct d'une hallucination.

La machine, elle, n'est jamais polie ni confiante : si la fonction n'existe pas, elle plante. C'est votre meilleur allié contre l'aplomb de l'IA.

En complément, la règle de discipline : ne copiez jamais un appel d'API que vous ne retrouvez pas dans la doc officielle. Un aller-retour de trente secondes vers la documentation vous épargne une bonne demi-heure de débogage à chercher pourquoi « le code de l'IA ne marche pas ».

Règle d'or : aucune référence à une fonction, méthode ou option ne va en production sans avoir été soit exécutée sans erreur, soit confirmée dans la documentation officielle de la bonne version.

The function that never existed

You ask the AI to format a date in PHP. It answers, fully confident, with a beautiful str_format_date($date, 'd/m/Y'). The code looks perfect, nicely indented, well commented. You paste it, you load the page... Fatal error: Call to undefined function str_format_date().

That function does not exist. It never did. The AI simply made it up, because it "sounded right". This is what we call a hallucination: the AI produces, with total confidence, functions, methods, library APIs and config options that do not exist.

Warning — the core trap: never trust a reference (function name, method, option, parameter) that you have not seen in the official documentation. The AI is convincing even when it is wrong. Its confidence is never proof of correctness.

Trust the logic, verify every reference

This is the essential nuance. The AI is generally very good at the logic: the structure of a loop, the chaining of conditions, the overall algorithm are often solid. Where it slips is on factual references: the exact name of a function, its signature, the options it accepts.

The right reflex fits in one sentence: "trust the logic, verify every reference". You can lean on the reasoning, but every API name must be confirmed.

And be careful: this topic is distinct from code review (code quality) and security. Here, we are not judging whether the code is elegant or safe. We check one single thing: does it really exist? A hallucination is a problem of factual correctness, not of style.

Good to know: hallucinations appear more often on niche libraries, poorly documented recent versions, or APIs you yourself know little about — exactly where you are least able to spot them.

Version drift: the silent trap

The sneakiest case is not the fully invented function. It is the function that really exists... but not in your version. The AI learned on code from all versions mixed together. It hands you a very real method from a library's v3, while your project runs on v2 where it does not exist yet.

Concrete example in JavaScript: the AI writes array.findLast(fn) to get the last matching element. It is a real method... added only in recent versions. On an older environment, you get:

const last = users.findLast(u => u.active);
// TypeError: users.findLast is not a function
//   → the method exists, but not in this version

The code is not "wrong" in absolute terms: it is wrong for your context. That is exactly what the AI ignores if you do not give it your exact version.

Tip: always state your versions in the prompt ("PHP 8.1, Symfony 5.4") and, when in doubt, ask directly: "Are you sure this function exists in version X? Give me the official docs link." This forces the AI to reconsider, and often reveals the invention.

The fastest detector: run the code

You can reread for hours. The fastest and most reliable way to flush out a hallucination is still to run the code in a sandbox and watch the errors appear.

  • Python — an ImportError or AttributeError at startup instantly exposes an invented module or method.
  • JavaScript — an is not a function or undefined in the console points to an API that does not exist in your environment.
  • PHP — a Call to undefined function is the direct confession of a hallucination.

The machine is never polite or confident: if the function does not exist, it crashes. It is your best ally against the AI's self-assurance.

On top of that, the discipline rule: never copy an API call you cannot find in the official docs. A thirty-second round trip to the documentation saves you a good half hour of debugging trying to figure out why "the AI's code does not work".

Golden rule: no reference to a function, method or option goes to production without being either run without error, or confirmed in the official documentation of the right version.

Avec l'IA

Faites vérifier à l'IA elle-même chaque référence du code qu'elle vient de produire, en précisant vos versions exactes :

Voici le code que tu m'as donné. Mon environnement est exactement : PHP 8.1 (ou Node 18 / Python 3.10). Pour CHAQUE fonction, méthode ou option utilisée, dis-moi : 1) existe-t-elle réellement dans cette version précise ? 2) sa signature exacte. 3) le lien de la documentation officielle. Si tu n'es pas certain à 100 % qu'une référence existe dans ma version, marque-la clairement comme À VÉRIFIER plutôt que de l'affirmer.
Exercice : Votre plan anti-hallucination

L'IA vous a livré un script qui utilise une fonction que vous ne reconnaissez pas. Décrivez votre plan pour vérifier qu'elle existe vraiment avant de l'intégrer. Mentionnez au moins : exécuter le code, consulter la documentation officielle, et la notion de version.

Qu'est-ce qu'une hallucination de l'IA en code ?
Une méthode existe en v3 mais pas dans la v2 de votre projet. C'est :
Quel est le moyen le plus rapide de détecter une hallucination ?
Next step

The AI hallucinates even more when it does not know your code. The next lesson, exploring an unknown codebase, shows how to have it map an existing project (entry point, key files, data flow) so it speaks accurately instead of inventing.

Lesson 14: Exploring an unknown codebase →
Besoin d'un développeur pour votre projet ?

Réponse sous 24h · Sans engagement