HomeModelli AIRAGMCP OrchestrazionePrompt EngineeringQuando (Non) Usare AIChipsBotNews

Modelli AI

Come funzionano i Large Language Model, quali sono i principali attori del mercato, come confrontarli e quando ha senso il fine-tuning.

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:

Attention(Q, K, V) = softmax(QKᵀ / √d_k) · V

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 Google 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
Nota I prezzi sono indicativi e cambiano frequentemente. Verificare sempre i listini ufficiali. I prezzi di output sono generalmente 3-5x quelli di input.

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:

  1. Prompt engineering — spesso basta un buon system prompt con esempi (vedi Prompt Engineering)
  2. RAG — se il problema è la conoscenza specifica, il RAG è quasi sempre preferibile al fine-tuning
  3. 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
Consiglio pratico Crea un tuo set di valutazione con 50-100 esempi reali dal tuo dominio. Testa ogni modello candidato su questo set prima di scegliere. È più affidabile di qualsiasi benchmark pubblico.

Prossimi passi

Ora che hai una panoramica dei modelli disponibili, il passo successivo è capire come usarli efficacemente: