Retrieval-Augmented Generation (RAG)

Autore

© 2025 Domenico Simone Marsella

1. Introduzione al Retrieval-Augmented Generation (RAG)

Il Retrieval-Augmented Generation è un paradigma che combina:

  1. Retrieval – il recupero di documenti, conoscenza o frammenti di informazione (chunks), potenzialmente rilevanti rispetto a una query dell'utente.
  2. Generation – la generazione di testo (o output) basata sia sul contesto derivato dalla query sia sui documenti recuperati.

In altre parole, invece di generare una risposta esclusivamente dalle conoscenze interne del modello linguistico, il RAG arricchisce l'input del modello con contenuti provenienti da una fonte esterna (knowledge base), assicurando risposte più aggiornate, contestuali e specifiche.

2. Riepilogo dell'Architettura

L'architettura generale che integra RAG si compone di diversi elementi:

  1. LLM (Large Language Model) – responsabile della comprensione linguistica e della generazione del testo finale.
  2. Database NoSQL – repository di chunks e embeddings, con metadati (fonte, timestamp, categoria).
  3. Motore di Similarità – implementa l'algoritmo di ricerca semantica (es. FAISS), restituendo i k documenti/chunk più rilevanti.
  4. Interfaccia GraphQL – astrazione per l'accesso ai dati e per la gestione delle query, mutazioni e subscription.
  5. Pipeline di Ingestione – prepara e indicizza i dati, generando embeddings per ogni chunk.

3. Formalizzazione Matematica

3.1 Rappresentazione: Embeddings

Si consideri un insieme di documenti o chunk \(\{d_i\}_{i=1}^N\). Ognuno di questi è convertito in un embedding vettoriale \(\mathbf{e}_i \in \mathbb{R}^m\) attraverso una funzione di embedding \(E(\cdot)\).

\[\mathbf{e}_i = E(d_i), \quad \mathbf{e}_q = E(q).\]

3.2 Retrieval: Selezione dei Chunk Rilevanti

Definiamo una funzione di similarità \( \text{sim}(\mathbf{e}_q, \mathbf{e}_i)\). Spesso si usa la similarità coseno:

\[\text{sim}(\mathbf{e}_q, \mathbf{e}_i) \;=\; \frac{\mathbf{e}_q \cdot \mathbf{e}_i}{\|\mathbf{e}_q\|\|\mathbf{e}_i\|}.\]

3.3 Generation: Produzione della Risposta

L'LLM prende in input la query \(q\) e i chunk recuperati \(R(q)\), generando una risposta \(y\):

\[y \sim p_\theta \bigl(y \mid q, R(q)\bigr).\]

4. Processo End-to-End di RAG

  1. Embedding della Query
    \(\mathbf{e}_q = E(q)\)
  2. Retrieval Semantico
    • Calcolo delle similarità \(\text{sim}(\mathbf{e}_q, \mathbf{e}_i)\)
    • Selezione dei \(\kappa\) chunk con similarità maggiore: \(R(q)\)
  3. Preparazione dell'Input per l'LLM
  4. Generazione della Risposta
  5. Consegna della Risposta

5. Vantaggi dell'Approccio RAG

  1. Aggiornamento Dinamico – La knowledge base può essere aggiornata senza riaddestramento del modello.
  2. Riduzione dell'Hallucination – Le risposte sono ancorate a documenti reali.
  3. Flessibilità di Dominio – Facilmente adattabile a diversi contesti specialistici.
  4. Scalabilità – L'indicizzazione vettoriale consente ricerche efficienti anche su milioni di documenti.
  5. Trasparenza – Possibilità di citare le fonti utilizzate per la risposta.

6. Svantaggi e Criticità

  1. Dipendenza dalla Qualità dei Chunks – Se i documenti sono incompleti o errati, anche le risposte lo saranno.
  2. Costi di Aggiornamento – Mantenere la knowledge base aggiornata richiede risorse.
  3. Allucinazioni Residue – Il modello può comunque generare contenuti non supportati.
  4. Gestione della Latenza – Il retrieval aggiunge tempo alla pipeline di risposta.
  5. Complessità Architetturale – Richiede più componenti da orchestrare e mantenere.

7. Conclusioni

Il Retrieval-Augmented Generation (RAG) si colloca al centro di un'architettura in cui un LLM può attingere a una base di conoscenza vasta, dinamica e aggiornata. La formalizzazione matematica proposta mostra come avviene il passaggio da query \(q\) a embedding \(\mathbf{e}_q\), come si identificano i chunk più rilevanti \(R(q)\) e come l'LLM generi una risposta \(y\) condizionata su tali informazioni.