Come funzionano i LLM
I Large Language Model (LLM) sono reti neurali addestrate su enormi quantità di testo per predire il token successivo in una sequenza. Nonostante la semplicità di questa descrizione, il risultato è un sistema capace di ragionamento, generazione di codice, traduzione e molto altro.
L'architettura Transformer
Tutto è iniziato con il paper "Attention Is All You Need" (Vaswani et al., 2017). L'architettura Transformer ha sostituito le reti ricorrenti (RNN/LSTM) con un meccanismo chiamato self-attention, che permette al modello di considerare tutte le parole di una frase simultaneamente, anziché sequenzialmente.
Un Transformer è composto da:
- Embedding layer — converte ogni token in un vettore numerico ad alta dimensionalità (tipicamente 4096-12288 dimensioni)
- Positional encoding — aggiunge informazioni sulla posizione di ogni token nella sequenza, poiché l'attention di per sé è invariante rispetto all'ordine
- Blocchi Transformer — ogni blocco contiene un layer di multi-head self-attention e un feed-forward network, collegati da layer normalization e connessioni residue
- Output layer — proietta il vettore finale su un vocabolario, producendo una distribuzione di probabilità sul prossimo token
Tokenizzazione
Prima di entrare nel modello, il testo viene convertito in token. Un token non corrisponde necessariamente a una parola: può essere una sotto-parola, un carattere o un gruppo di caratteri. I tokenizer più comuni usano algoritmi come BPE (Byte Pair Encoding) o SentencePiece.
Regola pratica: in italiano, 1 token corrisponde a circa 0.7 parole. Una frase di 100 parole occupa circa 140 token. Questo è importante perché ogni modello ha un limite massimo di token che può elaborare — la context window.
# Esempio: tokenizzazione con tiktoken (OpenAI)
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
tokens = enc.encode("L'intelligenza artificiale cambia tutto")
print(f"Tokens: {tokens}") # [L', int, elli, genza, ...]
print(f"Count: {len(tokens)}") # ~8 token per 5 parolepython
Il meccanismo di Attention
L'attention è il cuore dei Transformer. Per ogni token, il modello calcola quanto è "rilevante" ogni altro token nella sequenza. Matematicamente, si usano tre matrici — Query (Q), Key (K) e Value (V) — derivate dagli embedding:
Il termine √d_k è un fattore di scaling che stabilizza il gradiente. La multi-head attention esegue questo calcolo in parallelo con diverse proiezioni (tipicamente 32-128 "teste"), permettendo al modello di catturare diversi tipi di relazioni tra token.
Context Window
La context window è il numero massimo di token che un modello può elaborare in una singola richiesta (input + output). È uno dei parametri più importanti nella scelta di un modello:
- 4K-8K token — sufficienti per conversazioni brevi e task semplici
- 32K-128K token — permettono di analizzare documenti lunghi, codice sorgente, conversazioni estese
- 200K-1M token — Claude 3.5/4 offre 200K, Claude con extended thinking arriva a 1M. Permette l'analisi di interi codebase
Attenzione: una context window grande non significa che il modello presti uguale attenzione a tutto il contenuto. Il fenomeno "lost in the middle" (Liu et al., 2023) mostra che i modelli tendono a dimenticare informazioni posizionate a metà del contesto.
Panoramica dei modelli principali
GPT-4o e famiglia OpenAI
OpenAI ha definito l'era degli LLM con la serie GPT. GPT-4o ("omni") è il modello multimodale di punta: gestisce testo, immagini, audio e video in un singolo modello. Punti di forza: eccellente nel coding, ottima comprensione multilingue, ecosystem maturo (API, plugins, GPT Store).
o1 e o3 sono i modelli "reasoning" di OpenAI, che usano chain-of-thought interna per problemi complessi di matematica, coding e logica. Sono significativamente più lenti ma più accurati su task che richiedono ragionamento multi-step.
Claude (Anthropic)
Claude è sviluppato da Anthropic, fondata da ex-ricercatori di OpenAI. La famiglia Claude 4 include tre varianti:
- Haiku — il più veloce e economico, ottimo per task ad alto volume
- Sonnet — il miglior rapporto qualità/prezzo, eccellente per coding e analisi
- Opus — il più capace, con ragionamento avanzato e context window da 200K
Claude si distingue per la context window molto ampia (200K token di default), l'eccellenza nel seguire istruzioni complesse, e l'approccio alla sicurezza basato su "Constitutional AI". Supporta nativamente MCP (Model Context Protocol) per integrazioni con tool esterni.
Gemini (Google)
Gemini è la famiglia di modelli di Google DeepMind. Gemini 2.5 Pro offre una context window da 1M di token — la più grande disponibile commercialmente. È nativamente multimodale e fortemente integrato con l'ecosistema Google (Search, Workspace, Cloud).
Llama (Meta)
Llama 3.1 è il modello open-weight di Meta. La versione da 405B parametri compete con i modelli proprietari, mentre le versioni più piccole (8B, 70B) sono ideali per deployment on-premise. Llama ha catalizzato l'ecosistema open source: è la base per centinaia di modelli fine-tuned disponibili su Hugging Face.
Mistral
Startup francese che ha dimostrato che modelli più piccoli possono competere con modelli molto più grandi. Mistral Large è il modello di punta, mentre Mixtral 8x22B usa un'architettura Mixture of Experts (MoE) che attiva solo una parte dei parametri per ogni token, ottenendo efficienza e qualità.
Altri modelli rilevanti
- Command R+ (Cohere) — ottimizzato per RAG e uso enterprise, con supporto multilingue eccellente
- DeepSeek V3 — modello cinese open source, sorprendentemente competitivo, architettura MoE
- Qwen 2.5 (Alibaba) — forte nel cinese e nell'inglese, varianti specializzate per coding e matematica
Tabella comparativa
| Modello | Azienda | Context | Prezzo (input/1M tok) | Punti di forza |
|---|---|---|---|---|
| GPT-4o | OpenAI | 128K | $2.50 | Multimodale, coding, ecosystem |
| Claude Opus 4 | Anthropic | 200K | $15.00 | Ragionamento, istruzioni, sicurezza |
| Claude Sonnet 4 | Anthropic | 200K | $3.00 | Miglior rapporto qualità/prezzo |
| Gemini 2.5 Pro | 1M | $1.25 | Context enorme, multimodale | |
| Llama 3.1 405B | Meta | 128K | Self-hosted | Open weight, personalizzabile |
| Mistral Large | Mistral | 128K | $2.00 | Efficiente, multilingue |
| Command R+ | Cohere | 128K | $2.50 | RAG nativo, enterprise |
| DeepSeek V3 | DeepSeek | 128K | $0.27 | Costo bassissimo, MoE |
Open source vs proprietari
La distinzione tra modelli "open" e "proprietari" è meno netta di quanto sembri. Ecco le sfumature:
- Proprietari chiusi (GPT-4o, Claude, Gemini) — accessibili solo via API. Nessun accesso ai pesi. Il provider gestisce infrastruttura, aggiornamenti e compliance.
- Open weight (Llama, Mistral, Qwen) — i pesi del modello sono scaricabili, ma la licenza può limitare l'uso commerciale. Non si ha accesso ai dati di training né al codice di addestramento completo.
- Fully open (OLMo di AI2, BLOOM) — pesi, dati, codice e paper sono tutti pubblici. Rari ma importanti per la ricerca.
Quando scegliere open source
- Privacy dei dati — se i dati non possono lasciare la tua infrastruttura (sanità, finanza, difesa)
- Personalizzazione profonda — fine-tuning specifico per il tuo dominio
- Costi a volume — se fai milioni di richieste, il self-hosting può essere più economico
- Latenza — modelli più piccoli (7B-13B) serviti localmente hanno latenza molto bassa
Quando scegliere proprietari
- Qualità massima — i modelli proprietari di frontiera sono ancora superiori per task complessi
- Time to market — zero infrastruttura da gestire, integrazione in ore non settimane
- Aggiornamenti continui — il provider migliora il modello senza intervento da parte tua
- Compliance — molti provider offrono certificazioni SOC2, GDPR, HIPAA
Fine-tuning: quando e come
Il fine-tuning consiste nell'addestrare ulteriormente un modello pre-addestrato su dati specifici del tuo dominio. Ma nella maggior parte dei casi non serve. Prima di fare fine-tuning, considera queste alternative più semplici:
- Prompt engineering — spesso basta un buon system prompt con esempi (vedi Prompt Engineering)
- RAG — se il problema è la conoscenza specifica, il RAG è quasi sempre preferibile al fine-tuning
- Few-shot con retrieval — combinare RAG con esempi dinamici nel prompt
Il fine-tuning ha senso quando:
- Serve un formato di output molto specifico e consistente
- Il modello deve adottare un tono/stile particolare che non si ottiene con il prompting
- Hai bisogno di performance su un task ristretto con un modello piccolo (es. classificazione)
- Vuoi ridurre i costi usando un modello fine-tuned piccolo al posto di uno grande general-purpose
Tecniche di fine-tuning
- Full fine-tuning — aggiorna tutti i parametri. Richiede molta GPU e memoria. Rischio di catastrophic forgetting.
- LoRA (Low-Rank Adaptation) — aggiunge piccole matrici adattive ai layer di attention. Efficiente: richiede solo l'1-5% della memoria del full fine-tuning. Lo standard de facto.
- QLoRA — combina LoRA con quantizzazione a 4-bit. Permette di fine-tunare modelli da 70B su una singola GPU consumer.
- RLHF (Reinforcement Learning from Human Feedback) — usato per allineare il modello alle preferenze umane. Richiede un modello reward e feedback umano strutturato.
# Esempio: fine-tuning con LoRA usando PEFT
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
lora_config = LoraConfig(
r=16, # rank delle matrici LoRA
lora_alpha=32, # fattore di scaling
target_modules=["q_proj", "v_proj"], # layer da adattare
lora_dropout=0.05,
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
print(f"Parametri trainabili: {model.print_trainable_parameters()}")
# Output: trainable params: 4,194,304 || all params: 8,030,261,248 || 0.05%python
Benchmark e come interpretarli
I benchmark sono utili ma vanno interpretati con cautela. Ecco i principali:
| Benchmark | Cosa misura | Nota |
|---|---|---|
| MMLU | Conoscenza generale su 57 materie | Saturato — i modelli top superano il 90% |
| HumanEval | Generazione di codice Python | Molto usato, ma solo Python e task semplici |
| SWE-bench | Risoluzione di issue GitHub reali | Il più realistico per il coding |
| MATH | Problemi matematici a vari livelli | Buon indicatore del ragionamento |
| GPQA | Domande da esperti di dominio | Difficile anche per gli umani |
| LMSYS Chatbot Arena | Preferenza umana in conversazioni blind | Il più rappresentativo dell'uso reale |
Regola d'oro: non fidarti di un singolo benchmark. LMSYS Chatbot Arena è il più affidabile perché riflette le preferenze reali degli utenti, ma anche quello ha bias (favorisce risposte verbose). Il benchmark migliore è sempre il tuo caso d'uso specifico.
Il problema della contaminazione
Molti benchmark pubblici finiscono nei dati di training dei modelli successivi, gonfiando artificialmente i punteggi. Per questo motivo:
- I benchmark più vecchi (MMLU, HellaSwag) sono meno affidabili
- Benchmark "held-out" come GPQA Diamond o SWE-bench Verified sono più robusti
- La valutazione su dati proprietari interni resta il gold standard
Prossimi passi
Ora che hai una panoramica dei modelli disponibili, il passo successivo è capire come usarli efficacemente:
- Scopri come dare ai modelli accesso a conoscenza specifica con il RAG
- Impara a connetterli a strumenti esterni con MCP
- Approfondisci come orchestrarli in sistemi complessi nella sezione Orchestrazione
- Ottimizza le tue interazioni con il Prompt Engineering
- Scopri quando usare (e quando non usare) l'AI per ottimizzare costi e risultati