Il segreto sporco degli LLM: un dado pesato
ChatGPT, Claude, Gemini. Quando hai una conversazione con uno di questi modelli, ti sembra di stare parlando con qualcosa di intelligente. Ma non è così. Dentro, c’è solo una macchina che lancia un dado.
Non un dado normale. È un dado con 128.256 facce. Ogni faccia rappresenta una parola (o un frammento di parola, come vedremo). Quando premi invio dopo aver scritto una domanda, il modello lancia quel dado. Cade su una faccia. Quella diventa la tua prima parola di risposta. Poi lo relancia. E ancora. E ancora. Finché non tocca la faccia che dice “fine della risposta”.
Il trucco non è il dado. È come è pesato. Alcune facce hanno una probabilità altissima di essere scelte, altre quasi zero. Quel peso viene calcolato da qualcosa chiamato “rete neurale”. E quelle pesi sono il risultato di aver fatto leggere al modello miliardi di pagine di testo.
Un’analogia ancora più precisa: immagina che ogni faccia del dado abbia una probabilità diversa, calcolata matematicamente in base a tutto quello che il modello ha visto durante l’addestramento. Se l’ultima parola è stata “il”, le facce che corrispondono a “gatto”, “cane”, “libro” avranno probabilità alte. “Xyzzy” avrà probabilità quasi zero.
Questo è un LLM. Un grande modello di linguaggio. Non “comprende” nulla. Non “pensa”. Prevede il token più probabile che viene dopo.
Credito alla ricerca di Signal Pirate su questo concetto.
Come si pesano i dadi: l’addestramento
La domanda ovvia: come si fa a pesare un dado con 128.256 facce in modo che dica cose intelligenti?
Ecco il processo, semplificato:
Avvertenza critica
Durante l’addestramento, il modello ottimizza per plausibilità, non per correttezza fattuale. Se due risposte sono ugualmente probabili statisticamente in un corpus di testo, il modello non ha modo di sapere quale sia vera nella realtà. Questo è il fondamento delle “allucinazioni”.
LLM un mondo a pezzi: i Token (e il Bias Italiano)
Aspetta, non abbiamo ancora parlato di come il modello rappresenta il testo. Non lavora con le parole. Lavora con i token.
Un token è un pezzo di testo. Potrebbe essere una parola intera, mezza parola, o solo una lettera. Il modello deve decidere come spezzare il testo prima di iniziare l’addestramento. E usa un algoritmo chiamato Byte Pair Encoding.
L’idea è semplice: prendi tutte le coppie di caratteri o token che appaiono frequentemente insieme, e trasformale in un nuovo singolo token. Ripeti finché non hai un vocabolario della dimensione che desideri (di solito 100.000 – 200.000 token).
Questo crea dei bias linguistici interessanti. Guarda questa tabella:
| Frase | Lingua | Token |
|---|---|---|
| “Hello world” | Inglese | 2 |
| “Ciao mondo” | Italiano | 4 |
| “The quick brown fox” | Inglese | 4 |
| “La veloce volpe marrone” | Italiano | 8 |
Il bias italiano
L’italiano consuma più token rispetto all’inglese per la stessa informazione. Questo significa che per una conversazione fissa, un modello bilingue può “ricordare” meno contesto italiano rispetto all’inglese. È uno dei motivi per cui i modelli GPT spesso performano meglio in inglese: non è solo un problema di dati di addestramento, ma di efficienza tokenization.
Embedding: numeri che catturano significato
Ok, quindi il testo è stato tokenizzato. Ora ogni token deve essere rappresentato come qualcosa di cui il modello possa fare matematica. E qui entra in gioco l’embedding.
Un embedding è un vettore di numeri. In Llama 3.1, è un vettore di 4.096 dimensioni. Cioè 4.096 numeri che rappresentano quel token.
L’intuizione: se due parole hanno significati simili, i loro embedding dovrebbero essere simili (geometricamente vicini nello spazio a 4.096 dimensioni).
Come viene generato l’embedding? Inizialmente, casualmente. Poi, durante l’addestramento, viene aggiustato in modo che parole con contesti simili abbiano embedding simili. “Re” e “regina” sono lontani in una dimensione (sesso), ma vicini in altre (potenza, corona, etc).
La co-occorrenza non è significato
L’embedding cattura la co-occorrenza (quali parole appaiono insieme nel testo di addestramento), non il significato semantico vero. “Dottore” e “medicina” hanno embedding simili perché appaiono insieme spesso, non perché il modello “capisce” che curare è il compito di un dottore. Questa distinzione è cruciale per capire come i modelli possono sembrare intelligenti ma fallire in compiti che richiedono ragionamento vero.
L’attenzione: la parola che guarda le altre
Abbiamo i token. Abbiamo gli embedding. Adesso il modello deve capire come le parole si relazionano l’una con l’altra.
Entra in scena il meccanismo di attenzione (attention). È il cuore di ogni LLM moderno.
L’idea di base: quando il modello elabora una parola, non dovrebbe trattarla come isolata. Dovrebbe “guardare” alle altre parole nel contesto per capire di cosa sta parlando.
Prendi questa frase: “Maria ha detto a Luca che lei sarebbe andata al cinema”.
Quando il modello elabora “lei”, dovrebbe capire che si riferisce a Maria, non a Luca. Come? Con l’attenzione.
Ecco il meccanismo (molto semplificato):
Ogni token ha tre versioni di sé: Query (Q), Key (K) e Value (V).
- Query: “Sto cercando informazioni su quale parola?”
- Key: “Io sono questa parola, ho questa informazione”
- Value: “Se mi guardi, prendi questa informazione da me”
Per ogni token, calcoliamo quanto “attento” dovrebbe essere nei confronti degli altri token. Lo facciamo calcolando la similarità tra la sua Query e le Key di tutti gli altri token. Se “lei” ha una Query che dice “sto cercando un’entità femminile singolare” e “Maria” ha una Key che dice “io sono un’entità femminile singolare”, otteniamo un’alta similarità.
Poi prendiamo i valori (Value) dei token a cui siamo attenti, li mescoliamo in base alle loro similarità, e otteniamo una rappresentazione aggiornata di “lei” che include informazioni da “Maria”.
Ma aspetta. C’è di più. C’è la multi-head attention. Il modello non calcola solo una versione di Q/K/V. Ne calcola molte in parallelo (negli ultimi modelli, 128 “teste” di attenzione diverse). Ogni testa impara a guardare pattern diversi. Una testa potrebbe imparare che gli articoli si riferiscono al nome precedente. Un’altra potrebbe imparare che i verbi si coordinano con i soggetti.
Insieme, danno al modello una comprensione molto sofisticata (statisticamente parlando) delle relazioni dentro il testo.
Strato dopo strato: la fabbrica del significato
Un LLM non è solo uno strato di attenzione. È tanti di questi strati, impilati uno dopo l’altro.
Llama 3.1 ha 80 strati. GPT-4 ha più di 100 strati. Ogni strato prende l’output dello strato precedente e lo elabora ulteriormente.
Cosa succede in questi strati? Gli strati iniziali (primi 20, circa) tendono a catturare pattern di basso livello: ortografia, semplici relazioni grammaticali.
Gli strati intermedi fanno il grosso del “pensiero”: capiscono il significato, le relazioni semantiche, il contesto.
Gli strati finali fanno conversione: trasformano le rappresentazioni interne in qualcosa che può essere convertito in una probabilità per il prossimo token.
Ogni strato aggiunge complessità. Ogni strato permette al modello di capire relazioni più astratte. Ma più strati significano anche più calcolo, e addestrare il modello diventa più difficile.
Questo è uno dei grandi trade-off nel design dei modelli: profondità vs. velocità.
Da testo grezzo ad assistente: Fine-tuning e RLHF
Fin qui, abbiamo un modello che può prevedere il prossimo token. Ma non è un assistente. Non risponde a domande. Non rifiuta i compiti pericolosi. Non segue istruzioni.
Due tecniche lo trasformano da modello di previsione a assistente:
Fine-tuning
Cosa: Continua l’addestramento del modello su un dataset ristretto di esempi domanda-risposta.
Come: Prendi il modello già addestrato. Mostrai coppie di {domanda, risposta desiderata}. Aggiusta i pesi in modo che il modello impari a dare quella risposta a quella domanda.
Effetto: Il modello impara lo “stile” di un assistente, ma non impara il ragionamento morale.
Costo: Basso. Poche GPU, pochi giorni.
RLHF (Reinforcement Learning from Human Feedback)
Cosa: Usa il feedback umano per insegnare al modello quali risposte sono migliori.
Come: Genera diverse risposte per la stessa domanda. Umani le valutano (“questa è migliore di quella”). Addestra un “modello di reward” per imparare a preferire le risposte giudicate meglio. Usa quel modello di reward per aggiustare il modello principale verso risposte più preferibili.
Effetto: Il modello impara a rifiutare compiti pericolosi, a essere utile, a ragionare eticamente (entro i limiti del training set di valutazione).
Costo: Alto. Migliaia di valutazioni umane. Molto calcolo. Settimane.
La finestra di contesto: la scrivania del modello
Ricorda quando ho detto che il modello lancia il dado per generare una parola alla volta, e il risultato dipende da tutto quello che è stato detto prima?
Non è del tutto vero. Il modello non ricorda tutto. Ricorda solo gli ultimi N token. Questo numero si chiama finestra di contesto (context window).
Se la tua conversazione è più lunga della finestra, il modello inizia a “dimenticare” quello che hai detto all’inizio.
| Modello | Finestra di contesto (token) |
|---|---|
| GPT-2 (2019) | 2.048 |
| GPT-4 | 128.000 |
| Claude | 200.000 |
| Gemini | 1.000.000+ |
Una finestra più grande è meglio (puoi avere conversazioni più lunghe, allegare più documenti), ma ha un costo: più computazione per token, memoria più alta, addestramento più lento.
La temperatura: quanto è pesato il dado
Ricordi il dado pesato? Bene. Il peso del dado non è fisso. Puoi cambiarlo. Si chiama “temperatura”.
Una temperatura bassa significa “prendi solo la scelta più probabile sempre”. Il dado è pesatissimo su una singola faccia. Il modello diventa deterministico e noioso, ma coerente.
Una temperatura alta significa “le probabilità sono più piatte”. Molte facce hanno chance simili. Il modello diventa creativo e variabile, ma caotico.
Temperatura fredda (0.2)
Il modello: “La risposta è X e basta”
Quando usarla: Quando vuoi fatti, coerenza, prevedibilità. Traduzione, analisi dati, coding.
Output tipico: Sempre uguale per lo stesso input. Preciso. Noioso.
Temperatura calda (0.8+)
Il modello: “La risposta potrebbe essere X, Y, o Z. Scelgo A caso!”
Quando usarla: Quando vuoi creatività, variazione, idee nuove. Scrittura creativa, brainstorming.
Output tipico: Sempre diverso. Imprevedibile. Interessante e spesso incoerente.
Le allucinazioni: quando il dado mente
Ecco uno dei problemi più fastidiosi degli LLM: generano affermazioni plausibili ma completamente false.
Signal Pirate racconta una storia: chiede a ChatGPT “Quante zampe ha un’ape?” ChatGPT risponde con sicurezza “Le api hanno 10 zampe, il che le rende insetti extraordinariamente agili”. È completamente falso. Le api hanno 6 zampe. Ma la risposta è scritte così bene, con tono così convinto, che suona vera.
Perché succede? Ricorda: il modello non sta cercando la verità. Sta cercando il token più probabile. Se nella sua formazione ha visto molti testi dove vengono descritte “creature agili”, “insetti straordinari”, e le api sono menzionate vicino a questi concetti, il modello può generare una combinazione statistica di questi pattern senza mai aver “capito” quante zampe hanno realmente le api.
Ci sono due modi di combattere le allucinazioni:
Conoscenza ingranata (In-context learning)
L’idea: Non dare al modello informazioni nel contesto. Se dici “Usa solo i fatti da questo documento”, il modello ha meno libertà di allucinare.
Effetto: Riduce le allucinazioni drasticamente. Ma riduce anche la creatività.
Uso: Analisi di documenti, ricerca, fatto-checking.
Conoscenza retrieval (RAG, Retrieval-Augmented Generation)
L’idea: Prima di generare la risposta, recupera documenti rilevanti dal tuo database (Google Search, Wikipedia, una knowledge base privata). Dai al modello questi documenti come contesto.
Effetto: Il modello ha meno motivo di allucinare. Ha i fatti sotto gli occhi.
Uso: Chatbot su-brand, assistenti AI per aziende.
Allucinazioni sono strutturali, non un bug
Non puoi mai eliminarle completamente. È come chiedere a una moneta di fare sempre testa. Le allucinazioni sono una caratteristica della probabilità, non un errore corregibile. Il meglio che puoi fare è ridurre l’incentivo a allucinare (fornendo contesto, usando RAG) e educare gli utenti a verificare sempre le risposte critiche.
Il salto del 2025: dal lancio impulsivo al “ragionamento”
Per anni, gli LLM hanno funzionato così: prendi l’input, lancia il dado centinaia di volte, ottieni l’output. Il modello non ha mai “fermato e pensato”.
Nel 2024-2025, qualcosa è cambiato. I modelli come OpenAI o1 e altri hanno iniziato a fare “catena di pensiero” esplicita: dedica tempo a pensare al problema prima di rispondere.
Come funziona? Invece di generare direttamente la risposta, il modello genera prima i suoi “pensieri” (cosa che potrebbe fare, errori che potrebbe commettere, alternative da considerare). Solo dopo, genera la risposta pubblica.
Modello 2024 (fast forward)
Processo: Input → Lancio il dado centinaia di volte → Output
Velocità: Molto veloce (sotto 1 secondo per risposta semplice)
Qualità: Sufficiente per domande semplici e medie. Fallisce su logica complessa.
Costo computazionale: Basso. Pochi token generati.
Modello 2026 (chain of thought)
Processo: Input → Generazione pensiero nascosto (migliaia di token) → Generazione output
Velocità: Più lenta (5-20 secondi per problemi complessi)
Qualità: Molto superiore su compiti complessi, logica, matematica.
Costo computazionale: Più alto. Molti più token generati e non mostrati.
Questo non è vero ragionamento. Il modello non “capisce” il problema. Sta ancora lanciando il dado. Ma ora dedica più “lanci” a esplorare lo spazio dei possibili pensieri prima di dare una risposta. È come la differenza tra dare la prima risposta che ti viene in mente vs. fermarti un minuto e riflettere.
Il pappagallo con le mani: Agenti, RAG e System Prompt
Un pappagallo intelligente è comunque un pappagallo. Ripete quello che ha visto. Ma dai a un pappagallo le mani, e può fare più che ripetere. Può aprire una porta. Può premere un pulsante. Può usare gli strumenti.
Gli LLM moderni hanno “mani”.
RAG (Retrieval-Augmented Generation)
Il modello non sa cosa c’è nel tuo database privato. Ma può chiedere. Viene dato accesso a un search engine (vostro, su voi database). Quando il modello ne sente il bisogno, dice “voglio sapere X”. Tu fai la ricerca e gli dai la risposta. Lui la incorpora nella sua risposta finale.
Esempio: un chatbot per il supporto clienti. L’utente chiede “Dov’è il mio ordine?”. Il modello dice “Dammi l’ID dell’ordine”. Tu cerchi nel database. Il modello genera “Il tuo ordine è in consegna, arriverà il 15 aprile”.
Agenti
Come RAG, ma il modello può fare più di una semplice ricerca. Può eseguire azioni: inviare email, creare file, aprire API, eseguire codice.
Esempio: “Crea un’analisi delle vendite del mese passato e inviala a sales@company.com”. L’agente dice “OK, sto facendo questo”. Accede ai dati di vendita. Genera il grafico. Invia l’email. Tutto in una sola richiesta.
Ma qui le “mani” del modello devono essere molto controllate. Non puoi dare a un agente il permesso di fare QUALUNQUE COSA. Potrebbero cancellare dati importanti, violare la privacy, diventare maliziosi (in teoria).
System Prompt
La “personalità” del modello non è incorporata. È nella sua risposta iniziale.
Esempio di system prompt:
Sistema Prompt per Assistente IT
Tu sei Marco, un tecnico IT dell'azienda. Conosci bene gli strumenti interni:
- Slack per la comunicazione
- Jira per i ticket
- AWS per il cloud
Quando qualcuno ti chiede aiuto IT:
1. Chiedi informazioni specifiche
2. Fornisci soluzioni passo-passo
3. Se non sai, dimmi di contattare il senior tech
4. Mantieni il tono amichevole ma professionale
5. Priorità: Sicurezza > Disponibilità > Comodità
Il system prompt è istruzioni nascoste che il modello riceve prima di qualsiasi input dell’utente. È il più grande controllo che hai sui comportamenti del modello, oltre all’addestramento stesso.
Il viaggio di una domanda nel 2026
Riassumiamo. Quando chiedi qualcosa a un LLM moderno, ecco il viaggio:
L’Utente Consapevole nel 2026
Se hai letto fino a qui, capisci che gli LLM non sono magici. Sono dadi sofisticati. Sanno come lanciare dadi in modo che le persone credono di stare parlando con intelligenza.
Ecco cosa significa essere un utente consapevole:
Verifica sempre
Il modello non sa se sta mentendo. Non sa nemmeno la differenza tra verità e allucinazione. Se la risposta è importante (fatti, soldi, salute), verifica con una fonte affidabile.
Fornisci contesto
Il modello funziona meglio quando sa di cosa stai parlando. “Riscrivi questo paragrafo” è vago. “Riscrivi questo paragrafo per un pubblico di bambini di 8 anni” è meglio. “Riscrivi questo paragrafo [allega testo] per un pubblico di bambini di 8 anni, mantenendo questo tono [descrivi]” è ancora meglio.
Usa RAG per il tuo contenuto
Se gestisci dati sensibili (documenti aziendali, dati di clienti, storia della tua organizzazione), non mettere il modello di fronte a una domanda vuota. Fornisci il contesto esatto da cui deve attingere. RAG riduce allucinazioni e migliora rilevanza.
Scegli il modello per il compito
Non tutti i modelli sono uguali. Llama è veloce ma meno sofisticato. Claude è equilibrato. GPT-4 è potente ma lento e caro. Un modello con ragionamento (o1) è migliore per logica ma lentissimo. Scegli in base a quello che fai.
Controlla la privacy
Se usi ChatGPT, i dati che immetti vengono usati per migliorare il modello (a meno che non sia a pagamento). Se usi Claude o altri, leggi la loro politica. Se usi un modello privato (ospitato sulla tua infra), i dati sono tuoi.
Pensa critico ai bias
Il modello riflette i bias del suo training data. Un LLM addestrato su Wikipedia avrà bias verso informazioni in lingua inglese. Avrà pregiudizi verso le persone sovra-rappresentate negli articoli di Wikipedia. Non è “pensiero critico”, è un riflesso della statistica dei dati di addestramento.





