Un'allucinazione dell'IA è una risposta che suona sicura ed è falsa: un fatto inventato, una citazione di un articolo che non esiste, una funzione che una libreria non ha mai avuto. Tutti i modelli di chat lo fanno, compresi ChatGPT, Claude e Gemini. Non è un bug che verrà corretto con una patch; deriva dal modo in cui i modelli linguistici producono il testo. I prompt possono rendere le allucinazioni più rare, e solo la verifica può scoprire quelle che restano.
Perché i modelli linguistici hanno allucinazioni
Un modello linguistico scrive un token alla volta, e sceglie ciascuno perché è probabile che segua il testo scritto fin lì. Probabile rispetto a tutto quello che il modello ha visto durante l'addestramento. In questo processo niente va a consultare un fatto. Quando la risposta era comune nei dati di addestramento, la continuazione probabile di solito è quella vera. Quando era rara, recente o del tutto assente, il modello produce comunque la continuazione più plausibile, e un testo plausibile su un fatto che il modello non conosce è un'allucinazione.
Alcuni tipi di domanda sono più esposti di altri:
- Dettagli specifici: numeri esatti, date, nomi, numeri di versione, riferimenti di pagina. La forma della risposta è facile da prevedere; il dettaglio no.
- Citazioni e link. Un riferimento ha un formato prevedibile (autori, anno, titolo, rivista), quindi un modello può produrne uno ben formato per un articolo mai scritto.
- Argomenti rari o recenti: una piccola libreria, una normativa locale, qualunque cosa successiva alla fine dei dati di addestramento del modello.
- Domande con una premessa falsa. Chiedi cosa fa una funzione, e il modello tende a rispondere come se la funzione esistesse.
La scorrevolezza non è un segnale di precisione. Una risposta allucinata ha lo stesso tono sicuro, la stessa formattazione e lo stesso livello di dettaglio di una corretta, ed è per questo che è facile non accorgersene.
La trappola della premessa falsa
Le schede qui sotto chiedono di DataFrame.smart_merge() in pandas. Quel metodo non esiste. La prima domanda dà per scontato che esista; la seconda permette al modello di dire che non c'è.
DataFrame.smart_merge() unisce due DataFrame e rileva le chiavi di join al posto tuo confrontando i nomi e i tipi di dati delle colonne. Usalo quando le tue tabelle hanno colonne chiave con nomi leggermente diversi, per esempio user_id e userId, perché può abbinarle automaticamente.
Per avere il pieno controllo su chiavi e tipo di join, merge() resta la scelta migliore.
La prima risposta è un'allucinazione costruita con pezzi veri: pandas unisce davvero i DataFrame, e abbinare le chiavi è una cosa ragionevole da volere. La domanda ha fornito la premessa e il modello ha fornito una funzione plausibile che ci si adattasse. I modelli attuali riconoscono le premesse false più spesso di quelli vecchi, ma una domanda formulata come presupposto spinge ancora la risposta verso l'assenso.
Il secondo prompt ha fatto due cose. Ha chiesto se il metodo esiste prima di chiedere cosa fa, e ha dato il permesso esplicito di non essere sicuro. La risposta ha anche restituito un modo per verificare, ed è l'abitudine da mantenere: hasattr controlla la libreria reale in una riga.
Rispondere dalla fonte, con citazioni
Il modo più efficace per ridurre le allucinazioni è mettere i fatti nel prompt. Quando la risposta si trova in un testo che il modello può vedere, non deve ricordare nulla, e tu puoi confrontare ogni affermazione con quel testo. Chiedere una citazione a sostegno di ogni affermazione rende il controllo veloce, e dire al modello cosa rispondere quando il documento non dice niente rende meno probabile che riempia il vuoto con un'ipotesi.
Per quanto tempo si conservano i backup di produzione: 30 giorni. Il documento indica 30 giorni per i backup in generale e 7 giorni solo per lo staging. "I backup vengono eseguiti ogni notte alle 02:00 UTC e sono conservati per 30 giorni."
Posso ripristinarne uno da solo: Non è nel documento. Dice solo come si richiedono i ripristini: "I ripristini si richiedono nel canale #ops e di solito vengono completati entro quattro ore." Questo fa pensare che se ne occupi un altro team, ma il documento non dice se esista un ripristino in autonomia.
Guarda come la risposta ha trattato la seconda domanda. Un modello che rispondesse in base alla conoscenza generale avrebbe potuto descrivere un comando di ripristino. Vincolato al documento, ha separato quello che il testo dice da quello che lascia solo intendere. Disattiva la parte dei vincoli e chiedi di nuovo per vedere se la risposta continua a tenerli separati.
I tag <document> tengono il materiale di partenza separato dalle tue istruzioni; delimitatori e tag XML spiega perché è importante, e context engineering spiega come fornire ai modelli i documenti giusti su larga scala. La stessa idea è alla base delle app di chat con ricerca web o caricamento di file: la risposta è fondata solo quanto le fonti presenti nella conversazione, quindi leggi la fonte citata, non solo il suo riassunto.
Altre abitudini di prompting che aiutano
- Chiedi, non dare per scontato. "C'è un modo per fare X?" prima di "Come faccio X?". Una premessa falsa è l'allucinazione più facile da provocare.
- Chiedi di segnalare l'incertezza. "Segna ogni affermazione di cui non sei sicuro" ti dà un elenco di punti da controllare per primi. Le etichette non sono probabilità calibrate, ma spesso indicano i punti deboli.
- Chiedi fonti che puoi aprire. Poi aprile. Una citazione che non hai aperto non è verificata, e un link può esistere e dire qualcosa di diverso dall'affermazione che dovrebbe sostenere.
- Ricomincia da capo quando una chat si allunga. I dettagli dell'inizio di una chat lunga possono mescolarsi o perdersi man mano che la conversazione cresce. Per i fatti che contano, apri una nuova conversazione incollando il materiale rilevante; token e finestra di contesto spiega perché.
- Chiedi una seconda volta, da capo. Se due risposte indipendenti alla stessa domanda fattuale non coincidono, almeno una è sbagliata. Che coincidano è una prova più debole, perché un modello può ripetere lo stesso errore.
Verifica quello che conta
Nessun prompt elimina le allucinazioni, quindi decidi cosa controllare in base a quanto costa sbagliare. Un brainstorming o una prima bozza possono contenere qualche errore. Un numero in un report, un'affermazione legale o medica, una frase attribuita a una persona o una citazione nel tuo lavoro richiedono una fonte primaria.
Il codice è l'output più facile da verificare, perché eseguirlo lo mette alla prova. Un metodo inventato fallisce con un AttributeError o il suo equivalente appena viene eseguita la riga che lo chiama, quindi assicurati che il tuo test arrivi a quella riga. Il caso rischioso è il nome di pacchetto inventato. Se un modello ti dice di installare un pacchetto di cui non hai mai sentito parlare, prima di installarlo controlla che esista, che sia il progetto che pensi e che sia molto usato. Ricercatori di sicurezza hanno mostrato che i modelli inventano spesso gli stessi nomi di pacchetti falsi, più e più volte, e un attaccante che pubblica un pacchetto con uno di quei nomi fa installare il proprio codice a chiunque segua il suggerimento. I controlli per il codice scritto dall'IA sono trattati in prompt per scrivere codice.
Domande frequenti
Cos'è un'allucinazione dell'IA?
Un'allucinazione dell'IA è una risposta di un modello linguistico che suona sicura e scorrevole ma è falsa o infondata: un fatto inventato, una citazione di un articolo che non esiste, una funzione che una libreria non ha mai avuto. Il modello non mente di proposito. Ha prodotto il testo che sembrava più probabile, e probabile non vuol dire vero.
Perché ChatGPT inventa le cose?
I modelli di chat generano testo prevedendo il token successivo, uno dopo l'altro, in base agli schemi appresi durante l'addestramento. A meno che nella conversazione ci sia uno strumento come la ricerca web o un documento, niente va a controllare la risposta. Quando la risposta giusta era rara nei dati di addestramento, o non c'era affatto, il modello produce comunque la continuazione più plausibile, e una risposta sbagliata ma plausibile si legge esattamente come una giusta.
Si può impedire del tutto all'IA di avere allucinazioni?
No. I modelli attuali hanno meno allucinazioni di quelli precedenti, e rispondere partendo da documenti che fornisci tu o da risultati di ricerca le riduce ancora, ma nessun prompt le elimina. Tratta ogni fatto, numero, citazione, riferimento o API che conta come un'affermazione da verificare su una fonte primaria.
Quali prompt riducono le allucinazioni dell'IA?
Tre aiutano più di tutti. Dai il permesso esplicito di dire "non lo so". Fornisci il materiale di partenza e chiedi al modello di rispondere solo in base a quello. Chiedi una citazione testuale a sostegno di ogni affermazione, così puoi confrontarla con il testo. Evita le domande che danno qualcosa per scontato, perché il modello tende ad assecondare il presupposto.
Quali sono esempi di allucinazioni dell'IA nella programmazione?
Chiamare un metodo che una libreria non ha, passare un'opzione che non esiste, importare un pacchetto che nessuno ha mai pubblicato e descrivere come attuale il comportamento di una vecchia versione di una libreria. Con il codice molte di queste sono facili da scoprire, perché un metodo inventato fallisce appena viene eseguita la riga che lo chiama. I nomi di pacchetti inventati sono il caso pericoloso: prima di installare un pacchetto controlla che esista e che sia conosciuto.