Introduzione: il ponte tra generazione e realtà

I Large Language Model sono straordinari nel generare testo fluido, coerente e apparentemente competente. Ma hanno un problema fondamentale: non sanno quello che non sanno. La loro conoscenza è congelata al momento dell'addestramento, e quando non trovano un pattern statistico adeguato, inventano. Con grande sicurezza.

Per le aziende che vogliono usare l'AI su documenti interni, normative aggiornate, cataloghi prodotti o basi di conoscenza proprietarie, questo è un problema bloccante. Non basta un modello brillante: serve un modello che sappia dove cercare le risposte prima di generarle.

La Retrieval-Augmented Generation — RAG — è la risposta architetturale a questo problema. Non è un singolo algoritmo, ma un paradigma progettuale: prima cerca, poi genera. Un ponte tra il mondo dei motori di ricerca e quello dei modelli generativi, progettato per ancorare le risposte dell'AI a fonti documentali verificabili.

"Un LLM senza accesso a fonti esterne è come un esperto con una memoria eccellente ma nessuna biblioteca: può ragionare, ma non può verificare."

In questo articolo esploreremo ogni componente dell'architettura RAG, dalla teoria agli errori pratici più comuni, con l'obiettivo di fornire una mappa completa a chi vuole progettare, valutare o semplicemente comprendere questi sistemi.

Il problema delle allucinazioni

Per capire perché la RAG è necessaria, bisogna prima capire perché i Large Language Model sbagliano. E non sbagliano come sbaglierebbe un essere umano — per distrazione o ignoranza consapevole — ma in un modo strutturalmente diverso: generano la sequenza di token più probabile, indipendentemente dalla sua veridicità.

La natura statistica della generazione

Un LLM non “sa” che Roma è la capitale d'Italia. Ha semplicemente osservato, durante l'addestramento, che dopo la sequenza “la capitale d'Italia è” il token “Roma” compare con altissima probabilità. Quando questa correlazione statistica funziona, il risultato sembra intelligenza. Quando non funziona — perché i dati di training erano incompleti, contraddittori o assenti — il modello produce comunque una risposta, semplicemente meno affidabile. Ma con la stessa sicurezza.

Questo fenomeno si chiama allucinazione: il modello genera informazioni plausibili ma false. Citazioni di libri mai scritti, statistiche inventate, riferimenti normativi inesistenti, date errate. Il tutto con una prosa fluida e convincente che rende l'errore particolarmente insidioso.

Perché il fine-tuning non basta

Una prima reazione naturale è: “addestriamo il modello sui nostri dati”. Il fine-tuning è utile per insegnare al modello uno stile, un formato o un dominio specifico, ma presenta limiti strutturali:

Il punto chiave: il fine-tuning cambia come il modello parla, ma la RAG cambia cosa il modello sa nel momento in cui risponde. Sono strategie complementari, non alternative.

La necessità del grounding

Quello che serve è un meccanismo di grounding: ancorare ogni risposta generata a fonti documentali concrete e verificabili. L'utente deve poter risalire al paragrafo esatto da cui proviene un'informazione. Il sistema deve poter dire “non ho trovato informazioni pertinenti” invece di inventare.

La RAG nasce precisamente per questo: non per sostituire la capacità generativa del modello, ma per nutrirla con informazioni reali, aggiornate e tracciabili.

L'architettura RAG

Il termine Retrieval-Augmented Generation è stato formalizzato nel 2020 da Patrick Lewis e colleghi in un paper di riferimento pubblicato da Facebook AI Research (oggi Meta AI). L'intuizione fondamentale è semplice: dare al modello generativo accesso a una memoria esterna interrogabile.

L'architettura si articola in tre fasi principali, ciascuna con le proprie sfide tecniche e scelte progettuali.

1

Indexing
I documenti vengono elaborati, suddivisi in frammenti e trasformati in vettori numerici, poi archiviati in un database vettoriale.

2

Retrieval
Quando arriva una domanda, viene convertita in vettore e confrontata con i documenti indicizzati per trovare i frammenti più pertinenti.

3

Generation
I frammenti recuperati vengono inseriti nel prompt come contesto, e il modello genera una risposta basata su quelle informazioni.

Il pipeline nel dettaglio

Ecco il flusso completo di un sistema RAG dalla ricezione della domanda alla risposta finale:

  1. 1L'utente pone una domanda in linguaggio naturale al sistema.
  2. 2La query viene trasformata in un vettore (embedding) usando lo stesso modello utilizzato per indicizzare i documenti.
  3. 3Il vettore della query viene confrontato con i vettori dei frammenti documentali nel database vettoriale tramite una metrica di similarità.
  4. 4I frammenti più rilevanti (tipicamente i top-k, dove k va da 3 a 10) vengono estratti dal database.
  5. 5I frammenti vengono inseriti nel prompt del modello generativo come contesto, insieme alla domanda originale e alle istruzioni di sistema.
  6. 6Il modello genera la risposta basandosi sul contesto fornito, idealmente citando o parafrasando le fonti.

Paper di riferimento: Lewis, P. et al. (2020). "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks". Questo lavoro ha dimostrato che combinare un retriever neurale (DPR) con un generatore (BART) produce risposte più accurate e verificabili rispetto a un modello generativo usato da solo.

Embedding e spazi vettoriali

Il cuore di qualsiasi sistema RAG è la capacità di trasformare il testo in numeri che ne catturino il significato. Questo processo si chiama embedding e rappresenta forse il concetto più importante dell'intera architettura.

Come il testo diventa un vettore

Un modello di embedding prende una sequenza di testo — una frase, un paragrafo, un frammento di documento — e produce un vettore: una lista ordinata di numeri (tipicamente da 384 a 1536 dimensioni). Ogni dimensione cattura un aspetto del significato.

L'analogia più efficace è quella delle coordinate GPS per il significato. Come le coordinate geografiche collocano un punto sulla superficie terrestre, un vettore di embedding colloca un concetto in uno spazio semantico multidimensionale. Testi con significato simile avranno coordinate vicine; testi con significato diverso saranno distanti.

"Se un embedding è una coordinata GPS del significato, allora un database vettoriale è la mappa su cui cerchiamo i punti più vicini alla nostra posizione."

Modelli di embedding

Non tutti i modelli di embedding sono uguali. La scelta del modello influenza direttamente la qualità del retrieval:

Similarità coseno

Per confrontare due vettori si usa tipicamente la similarità coseno (cosine similarity): una misura che calcola l'angolo tra due vettori nello spazio multidimensionale. Un valore di 1 indica identità semantica perfetta, 0 indica assenza di relazione, -1 indica significato opposto.

La formula è elegantemente semplice: il prodotto scalare dei due vettori diviso per il prodotto delle loro norme. Ma la sua potenza sta nel fatto che ignora la “lunghezza” dei vettori (ciòè la quantità di testo) e si concentra sulla “direzione” (ciòè il significato).

Database vettoriali

Una volta generati, i vettori devono essere archiviati e interrogabili in modo efficiente. Qui entrano in gioco i database vettoriali:

Open Source / Locale

FAISS

Libreria di Meta per ricerca di similarità vettoriale ad alte prestazioni. Ideale per grandi volumi di dati su infrastruttura propria.

Velocità pura, massimo controllo, richiede competenze tecniche
Open Source / Embedded

ChromaDB

Database vettoriale leggero e semplice da integrare. Perfetto per prototipi e applicazioni di scala media.

Semplicità d'uso, ottimo per iniziare, API intuitive
Open Source / Self-hosted

Qdrant

Database vettoriale con filtraggio avanzato sui metadati e supporto per payload strutturati. Scritto in Rust.

Filtraggio potente, ottime prestazioni, architettura moderna
Cloud / Managed

Pinecone

Servizio cloud completamente gestito. Nessuna infrastruttura da mantenere, scalabilità automatica.

Zero manutenzione, costi a consumo, dipendenza da provider

Chunking: spezzare i documenti

Un documento intero — un PDF di 50 pagine, un manuale tecnico, un contratto — non può essere trasformato in un singolo vettore di embedding. I modelli di embedding hanno un limite di token in input (tipicamente 256–512 token) e, anche quando accettano input più lunghi, la qualità della rappresentazione degrada: troppa informazione compressa in un unico vettore produce un embedding “annacquato” che non cattura bene nessun concetto specifico.

Per questo i documenti vengono spezzati in frammenti (chunks) prima dell'indicizzazione. La strategia di chunking è una delle decisioni progettuali più critiche in un sistema RAG.

Strategie di chunking

Il ruolo dell'overlap

Quasi tutte le strategie prevedono un overlap (sovrapposizione) tra chunk consecutivi: gli ultimi N token di un chunk vengono ripetuti all'inizio del successivo. Questo serve a preservare il contesto ai confini: se un concetto si trova a cavallo di due frammenti, l'overlap garantisce che almeno uno dei due lo contenga interamente.

L'overlap tipico va dal 10% al 20% della dimensione del chunk. Troppo poco e si perdono informazioni ai confini; troppo e si spreca spazio di archiviazione e si introduce rumore nel retrieval.

La regola empirica: chunk troppo piccoli perdono contesto (il sistema trova frasi isolate senza significato); chunk troppo grandi perdono precisione (il sistema recupera paragrafi interi quando serviva una sola frase). La dimensione ottimale dipende dal tipo di documento e dal tipo di domande che il sistema deve gestire. Testare è l'unica via sicura.

Retrieval: trovare l'informazione giusta

Il retrieval è il momento decisivo dell'intero pipeline. Se il sistema recupera i frammenti sbagliati, nessun modello generativo, per quanto potente, potrà produrre una risposta corretta. È il principio garbage in, garbage out applicato all'AI generativa.

Dense retrieval vs sparse retrieval

Esistono due paradigmi fondamentali per cercare informazioni in una collezione di documenti:

Approccio Semantico

Dense Retrieval

Usa modelli di embedding per rappresentare query e documenti come vettori densi. La ricerca avviene per similarità coseno nello spazio vettoriale.

Punti di forza

Comprende sinonimi e parafrasi. “Come risolvere un guasto” trova anche “procedura di riparazione”.

Limiti

Può confondere concetti superficialmente simili. Richiede un buon modello di embedding.

Approccio Lessicale

Sparse Retrieval (BM25)

Usa la corrispondenza esatta delle parole, pesata con l'algoritmo BM25 (evoluzione di TF-IDF). Nessun modello neurale necessario.

Punti di forza

Eccellente per termini tecnici, sigle, codici prodotto, nomi propri. Preciso quando le parole esatte contano.

Limiti

Non comprende sinonimi. “Auto” e “macchina” sono due parole diverse.

Ricerca ibrida

La soluzione più efficace nella pratica è la ricerca ibrida (hybrid search): combinare i risultati del dense retrieval e dello sparse retrieval, tipicamente con una fusione pesata dei punteggi (Reciprocal Rank Fusion o semplice media pesata). Questo permette di sfruttare la comprensione semantica dei modelli neurali e la precisione lessicale di BM25.

Re-ranking

Dopo il retrieval iniziale, un passaggio di re-ranking può migliorare significativamente la qualità dei risultati. Un modello di re-ranking (come Cohere Rerank o un cross-encoder) prende la query e ciascun frammento candidato, li analizza congiuntamente e produce un punteggio di rilevanza più accurato.

Il re-ranking è più lento del retrieval iniziale (perché analizza coppie query-documento invece di fare semplici confronti vettoriali), ma applicato ai top-20 o top-50 risultati del primo stadio, il costo computazionale resta contenuto e il guadagno in qualità è sostanziale.

Architettura a due stadi: la pratica migliore è un sistema a due stadi: un primo stadio veloce (retrieval vettoriale + BM25) che seleziona un set ampio di candidati, seguito da un secondo stadio preciso (re-ranking) che riordina i risultati per rilevanza. È lo stesso principio dei motori di ricerca moderni.

Generazione aumentata

Una volta che il retrieval ha identificato i frammenti più pertinenti, questi vengono “iniettati” nel prompt del modello generativo come contesto. È qui che avviene la vera “augmentation”: il modello non genera più dal nulla, ma a partire da informazioni concrete.

Come il contesto entra nel prompt

Un prompt RAG tipico ha questa struttura logica:

  1. 1System prompt: istruzioni che definiscono il comportamento del modello (“Rispondi solo basandoti sul contesto fornito. Se non trovi l'informazione, dillo esplicitamente.”)
  2. 2Contesto recuperato: i frammenti documentali, tipicamente preceduti da un'etichetta (“Contesto:”) e separati da delimitatori.
  3. 3Domanda dell'utente: la query originale.
  4. 4Istruzione finale: eventuali vincoli aggiuntivi sul formato della risposta (“Cita le fonti tra parentesi quadre.”)

Gestione della finestra di contesto

Ogni modello ha un limite alla quantità di testo che può elaborare simultaneamente (la context window). Se i frammenti recuperati sono troppi o troppo lunghi, rischiano di non entrare nella finestra, o di spingere fuori la domanda dell'utente e le istruzioni di sistema.

La gestione della finestra di contesto richiede un equilibrio attento:

Fedeltà vs creatività

Nella RAG esiste una tensione fondamentale tra faithfulness (fedeltà al contesto fornito) e creatività (capacità di sintetizzare, riformulare, connettere). Un sistema RAG per un chatbot di assistenza legale deve essere rigidamente fedele; un sistema RAG per un assistente di ricerca può permettersi più libertà nella sintesi.

"Il prompt engineering per la RAG non è un'arte: è un'attività ingegneristica che richiede test, metriche e iterazione sistematica."

Il parametro di temperature del modello, le istruzioni nel system prompt e la qualità del contesto recuperato sono le tre leve principali per calibrare questo equilibrio.

Valutare un sistema RAG

Costruire un sistema RAG è relativamente semplice. Costruire un sistema RAG che funzioni bene è enormemente più difficile. E la differenza sta nella capacità di misurare.

Le metriche fondamentali

La valutazione di un sistema RAG richiede metriche su più livelli:

Il framework RAGAS

RAGAS (Retrieval Augmented Generation Assessment) è un framework open-source che automatizza la valutazione di sistemi RAG. Usa un LLM come “giudice” per valutare ciascuna delle metriche sopra, senza bisogno di annotazioni umane per ogni singola domanda.

Il framework genera punteggi da 0 a 1 per faithfulness, answer relevance, context precision e context recall, permettendo di identificare rapidamente dove il sistema fallisce: se il problema è nel retrieval o nella generazione.

Attenzione: la valutazione automatica con LLM (LLM-as-a-judge) è utile per iterazioni rapide, ma non sostituisce la valutazione umana. Un LLM giudice può avere i propri bias e non cattura tutte le sfumature della qualità di una risposta. Per sistemi in produzione, campionamenti periodici con revisione umana restano indispensabili.

Valutazione umana

La valutazione umana è il gold standard ma anche la più costosa. Tipicamente si procede con:

La combinazione di valutazione automatica per le iterazioni quotidiane e valutazione umana per i rilasci principali è l'approccio più pragmatico.

Errori comuni e soluzioni

Dopo aver progettato, implementato e valutato decine di sistemi RAG, alcuni errori ricorrono con prevedibile regolarità. Ecco i più comuni e le relative contromisure.

1. Chunking inadeguato

Errore: usare chunk troppo grandi (“tanto il contesto è ampio”) o troppo piccoli (“così sono più precisi”) senza testare l'impatto sul retrieval.

Soluzione: sperimentare con dimensioni diverse (256, 512, 1024 token) sullo stesso set di domande di test. Misurare la context relevance per ogni configurazione.

2. Modello di embedding sbagliato

Errore: usare un modello di embedding generico per un dominio altamente specializzato (es. testi legali, documentazione medica).

Soluzione: valutare modelli di embedding specifici per il dominio o effettuare fine-tuning dell'embedding model. Verificare che il modello supporti adeguatamente la lingua dei documenti.

3. Assenza di re-ranking

Errore: fidarsi ciecamente dei risultati del retrieval iniziale senza un secondo stadio di riordino.

Soluzione: aggiungere un re-ranker (anche leggero) dopo il retrieval. Il miglioramento è quasi sempre significativo, specialmente su query ambigue.

4. Context overflow

Errore: inserire troppi frammenti nel prompt, saturando la finestra di contesto e causando l'effetto “lost in the middle”.

Soluzione: limitare il numero di frammenti (3–5 è spesso sufficiente). Posizionare i frammenti più rilevanti all'inizio e alla fine del contesto.

5. Ignorare i metadati

Errore: indicizzare solo il testo, senza conservare metadati come la data del documento, l'autore, la sezione di appartenenza o il tipo di documento.

Soluzione: arricchire ogni chunk con metadati strutturati e usare il filtraggio per metadati nel retrieval. Se l'utente chiede “la normativa più recente”, il sistema deve poter filtrare per data.

6. Nessuna strategia di fallback

Errore: non gestire il caso in cui il retrieval non trova risultati pertinenti. Il modello genera comunque una risposta, ma senza contesto valido: il risultato è un'allucinazione.

Soluzione: definire una soglia minima di similarità. Se nessun frammento supera la soglia, il sistema deve rispondere “Non ho trovato informazioni pertinenti nella base documentale” invece di inventare.

Consiglio pratico: prima di ottimizzare l'intero pipeline, guardate i frammenti che il retrieval restituisce per le vostre query di test. Se i frammenti sono sbagliati, nessun miglioramento a livello di generazione sarà sufficiente. Il debug di un sistema RAG parte sempre dal retrieval.

Il futuro della RAG

L'architettura RAG è giovane — il paper fondante ha solo pochi anni — e il campo sta evolvendo rapidamente. Diverse direzioni di ricerca stanno ampliando le capacità e i limiti del paradigma.

Agentic RAG

Nella RAG tradizionale, il flusso è lineare: query, retrieval, generazione. Nella Agentic RAG, il modello può decidere autonomamente se e quando fare retrieval, riformulare la query se i primi risultati non sono soddisfacenti, combinare informazioni da fonti diverse e persino verificare la coerenza della propria risposta. L'agente diventa un ricercatore attivo, non un semplice consumatore di contesto.

GraphRAG

GraphRAG, introdotto da Microsoft Research, sostituisce (o affianca) il database vettoriale con un grafo della conoscenza. Invece di cercare frammenti di testo simili, il sistema naviga relazioni strutturate tra entità (persone, organizzazioni, concetti, eventi). Questo permette di rispondere a domande che richiedono ragionamento multi-hop: “Quali aziende hanno collaborato con il fornitore X che ha sede nella regione Y?”

Multi-modal RAG

La RAG non si limita al testo. Sistemi di multi-modal RAG possono indicizzare e recuperare immagini, tabelle, diagrammi e persino video. Un sistema RAG per la manutenzione industriale potrebbe recuperare lo schema tecnico di un componente insieme alla procedura testuale di riparazione.

Self-RAG

Nei sistemi Self-RAG, il modello impara a decidere autonomamente quando ha bisogno di informazioni esterne e quando può rispondere dalle proprie conoscenze. Genera “token di riflessione” speciali che valutano la necessità del retrieval e la qualità dei frammenti recuperati, rendendo il processo più efficiente e adattivo.

La direzione è chiara: da pipeline rigide e lineari verso sistemi adattivi che decidono dinamicamente come e dove cercare informazioni. La RAG del futuro non sarà una sequenza fissa di passaggi, ma un processo intelligente di ricerca e sintesi che si adatta alla complessità della domanda.

Glossario

Definizioni dei termini tecnici principali utilizzati in questo articolo.

RAG (Retrieval-Augmented Generation)
Architettura che combina un sistema di ricerca documentale (retriever) con un modello generativo (generator). Il retriever trova informazioni pertinenti in una base documentale, e il generator produce una risposta basata su quelle informazioni. Introdotta da Lewis et al. nel 2020.
Embedding
Rappresentazione numerica del significato di un testo sotto forma di vettore multidimensionale. Testi semanticamente simili producono vettori vicini nello spazio vettoriale. Fondamentale per il dense retrieval nei sistemi RAG.
Vector Database
Database specializzato nell'archiviazione e nella ricerca efficiente di vettori ad alta dimensionalità. Supporta query di similarità (nearest neighbor search) e filtraggio per metadati. Esempi: FAISS, ChromaDB, Qdrant, Pinecone.
Chunking
Processo di suddivisione di documenti lunghi in frammenti più piccoli (chunk) per l'indicizzazione. Le strategie includono chunking a dimensione fissa, per frase, semantico e ricorsivo. La dimensione e la strategia di chunking influenzano direttamente la qualità del retrieval.
Retrieval
Fase del pipeline RAG in cui il sistema cerca e recupera i frammenti documentali più pertinenti alla query dell'utente. Può essere denso (basato su embedding), sparso (basato su parole chiave) o ibrido.
Dense Retrieval
Metodo di ricerca che rappresenta query e documenti come vettori densi (embedding) e trova i documenti più pertinenti tramite similarità coseno. Comprende sinonimi e parafrasi ma può confondere concetti superficialmente simili.
Sparse Retrieval
Metodo di ricerca basato sulla corrispondenza lessicale delle parole, tipicamente implementato con l'algoritmo BM25. Eccellente per termini tecnici e nomi propri, ma non comprende sinonimi.
Re-ranking
Secondo stadio di valutazione della rilevanza applicato ai risultati del retrieval iniziale. Un modello cross-encoder analizza congiuntamente query e documento per produrre un punteggio di rilevanza più accurato.
Cosine Similarity (Similarità Coseno)
Metrica che misura la similarità tra due vettori calcolando il coseno dell'angolo tra di essi. Valori da -1 (opposti) a 1 (identici). Ignora la magnitudine dei vettori, concentrandosi sulla direzione (ciòè sul significato).
Faithfulness (Fedeltà)
Metrica che misura quanto la risposta generata è coerente con il contesto recuperato. Un sistema con alta faithfulness non inventa informazioni assenti dal contesto fornito.
Hallucination (Allucinazione)
Fenomeno in cui un modello generativo produce informazioni plausibili ma false con apparente sicurezza. Causa principale della necessità di architetture RAG per applicazioni che richiedono accuratezza fattuale.
Context Window (Finestra di Contesto)
Quantità massima di testo (misurata in token) che un modello può elaborare simultaneamente. Nella RAG, la finestra deve contenere le istruzioni di sistema, il contesto recuperato e la domanda dell'utente.