Corso
I large language model (LLM) come GPT-4 hanno portato enormi progressi, ma hanno anche dei limiti: conoscenze non aggiornate, allucinazioni e risposte generiche. È un problema che possiamo risolvere con la Retrieval Augmented Generation (RAG).
In questo blog ti spiegherò come funziona RAG, perché è un cambio di passo per le applicazioni di IA e come le aziende la usano per creare sistemi più intelligenti e affidabili.
Che cos'è RAG?
La Retrieval Augmented Generation (RAG) è una tecnica che potenzia gli LLM integrandoli con fonti di dati esterne. Combinando le capacità generative di modelli come GPT-4 con meccanismi di recupero dell'informazione accurati, RAG consente ai sistemi di IA di produrre risposte più precise e pertinenti al contesto.
Gli LLM sono potenti ma presentano limiti intrinseci:
- Conoscenza limitata: gli LLM possono generare risposte solo in base ai dati di addestramento, che possono essere obsoleti o privi di informazioni di settore specifiche.
- Allucinazioni: a volte questi modelli generano informazioni plausibili ma errate.
- Risposte generiche: senza l’accesso a fonti esterne, gli LLM possono fornire risposte vaghe o imprecise.
RAG affronta questi problemi consentendo ai modelli di recuperare informazioni aggiornate e specifiche del dominio da fonti di dati strutturate e non strutturate, come database, documentazione e API.
Perché usare RAG per migliorare gli LLM? Un esempio
Per capire meglio cos’è RAG e come funziona la tecnica, consideriamo uno scenario comune a molte aziende.
Immagina di essere un dirigente di un’azienda di elettronica che vende dispositivi come smartphone e laptop. Vuoi creare un chatbot di assistenza clienti per rispondere alle domande degli utenti su specifiche dei prodotti, risoluzione dei problemi, informazioni sulla garanzia e altro.
Vorresti usare le capacità degli LLM come GPT-3 o GPT-4 per alimentare il tuo chatbot.
Tuttavia, i large language model hanno i seguenti limiti, che portano a un'esperienza cliente inefficiente:
Mancanza di informazioni specifiche
I modelli linguistici si limitano a fornire risposte generiche basate sui loro dati di addestramento. Se gli utenti pongono domande specifiche sul software che vendi o hanno richieste su come eseguire una diagnosi approfondita, un LLM tradizionale potrebbe non essere in grado di fornire risposte accurate.
Questo perché non sono stati addestrati su dati specifici della tua organizzazione. Inoltre, i dati di addestramento di questi modelli hanno una data di cutoff, il che limita la loro capacità di fornire risposte aggiornate.
Allucinazioni
Gli LLM possono “allucinare”, ovvero tendono a generare con sicurezza risposte false basate su fatti inventati. Questi algoritmi possono anche fornire risposte fuori tema se non hanno una risposta accurata alla domanda dell’utente, con conseguente cattiva esperienza cliente.
Risposte generiche
I modelli linguistici spesso forniscono risposte generiche non calibrate su contesti specifici. Questo può essere un grosso limite in un contesto di assistenza clienti, dove le preferenze individuali dell’utente sono di solito necessarie per offrire un'esperienza personalizzata.
RAG colma efficacemente queste lacune offrendo un modo per integrare la base di conoscenza generale degli LLM con l’accesso a informazioni specifiche, come i dati presenti nel tuo database prodotti e nei manuali utente. Questa metodologia consente risposte altamente accurate e affidabili, calibrate sulle esigenze della tua organizzazione.
Come funziona RAG?
Ora che hai capito cos’è RAG, vediamo i passaggi per configurare questo framework:
Passo 1: Raccolta dei dati
Per prima cosa devi raccogliere tutti i dati necessari alla tua applicazione. Nel caso di un chatbot di assistenza clienti per un’azienda di elettronica, questo può includere manuali utente, un database prodotti e un elenco di FAQ.
Passo 2: Suddivisione in chunk
La suddivisione in chunk è il processo di frammentazione dei dati in parti più piccole e gestibili. Ad esempio, se hai un manuale utente lungo 100 pagine, potresti dividerlo in sezioni diverse, ciascuna potenzialmente in grado di rispondere a differenti domande dei clienti.
In questo modo, ogni chunk di dati è focalizzato su un argomento specifico. Quando si recupera un’informazione dal dataset di origine, è più probabile che sia direttamente applicabile alla domanda dell’utente, evitando di includere informazioni irrilevanti da interi documenti.
Questo migliora anche l’efficienza, perché il sistema può ottenere rapidamente i pezzi di informazione più rilevanti invece di elaborare documenti interi.
Passo 3: Embedding dei documenti
Ora che i dati di origine sono stati suddivisi in parti più piccole, vanno convertiti in una rappresentazione vettoriale. Ciò implica trasformare i testi in embedding, rappresentazioni numeriche che catturano il significato semantico del testo.
In parole semplici, gli embedding dei documenti consentono al sistema di comprendere le domande degli utenti e di associarle a informazioni pertinenti nel dataset di origine in base al significato del testo, invece che a un semplice confronto parola per parola. Questo metodo garantisce che le risposte siano pertinenti e allineate alla richiesta dell’utente.
Se vuoi saperne di più su come i testi vengono convertiti in rappresentazioni vettoriali, ti consigliamo di esplorare il nostro tutorial sugli embedding testuali con le API di OpenAI.
Passo 4: Gestione delle richieste degli utenti
Quando una richiesta utente entra nel sistema, deve essere anch’essa convertita in un embedding o rappresentazione vettoriale. Bisogna usare lo stesso modello sia per l’embedding dei documenti sia per quello della query, per garantire uniformità tra i due.
Una volta convertita la query in embedding, il sistema la confronta con gli embedding dei documenti. Identifica e recupera i chunk i cui embedding sono più simili a quello della query, usando misure come similarità del coseno e distanza euclidea.
Questi chunk sono considerati i più rilevanti per la richiesta dell’utente.
Passo 5: Generazione delle risposte con un LLM
I chunk di testo recuperati, insieme alla domanda iniziale dell’utente, vengono forniti a un modello linguistico. L’algoritmo utilizzerà queste informazioni per generare una risposta coerente alle domande dell’utente tramite un’interfaccia chat.
Ecco un diagramma di flusso semplificato che riassume come funziona RAG:

Immagine dell’autore
Per realizzare in modo fluido i passaggi necessari a generare risposte con gli LLM, puoi usare un framework dati come LlamaIndex.
Questa soluzione ti permette di sviluppare applicazioni LLM gestendo in modo efficiente il flusso di informazioni dalle fonti di dati esterne a modelli linguistici come GPT-3. Per saperne di più su questo framework e su come usarlo per costruire applicazioni basate su LLM, leggi il nostro tutorial su LlamaIndex.
Applicazioni pratiche di RAG
Ora sappiamo che RAG consente agli LLM di formulare risposte coerenti basate su informazioni al di fuori dei loro dati di addestramento. Un sistema del genere ha varie applicazioni di business che migliorano l’efficienza organizzativa e l’esperienza utente. Oltre all’esempio del chatbot per i clienti visto in precedenza, ecco alcune applicazioni pratiche di RAG:
Riassunto dei testi
RAG può usare contenuti da fonti esterne per produrre riassunti accurati, con notevoli risparmi di tempo. Ad esempio, manager e dirigenti sono persone impegnate che non hanno tempo per spulciare report estesi.
Con un’applicazione basata su RAG, possono attingere rapidamente ai risultati più critici dai testi e prendere decisioni in modo più efficiente, invece di dover leggere documenti lunghi.
Raccomandazioni personalizzate
I sistemi RAG possono essere utilizzati per analizzare dati dei clienti, come acquisti passati e recensioni, per generare raccomandazioni di prodotto. Questo migliora l’esperienza complessiva dell’utente e, in ultima analisi, genera più ricavi per l’organizzazione.
Ad esempio, le applicazioni RAG possono essere utilizzate per consigliare film migliori sulle piattaforme di streaming in base alla cronologia di visione e alle valutazioni dell’utente. Possono anche analizzare recensioni scritte sulle piattaforme di e-commerce.
Poiché gli LLM eccellono nella comprensione della semantica dei testi, i sistemi RAG possono fornire suggerimenti personalizzati più sfumati rispetto a un sistema di raccomandazione tradizionale.
Business intelligence
Le organizzazioni in genere prendono decisioni di business monitorando il comportamento dei competitor e analizzando le tendenze di mercato. Questo avviene analizzando meticolosamente i dati presenti in report aziendali, bilanci e documenti di ricerche di mercato.
Con un’applicazione RAG, le organizzazioni non devono più analizzare manualmente e identificare le tendenze in questi documenti. Invece, si può impiegare un LLM per ricavare in modo efficiente insight significativi e migliorare il processo di ricerca di mercato.
Sfide e best practice nell’implementazione di sistemi RAG
Sebbene le applicazioni RAG consentano di colmare il divario tra recupero delle informazioni ed elaborazione del linguaggio naturale, la loro implementazione presenta alcune sfide specifiche. In questa sezione esamineremo le complessità affrontate nella costruzione di applicazioni RAG e vedremo come mitigarle.
Complessità di integrazione
Integrare un sistema di retrieval con un LLM può essere difficile. Questa complessità aumenta quando ci sono più fonti di dati esterne in formati diversi. I dati immessi in un sistema RAG devono essere coerenti e gli embedding generati devono essere uniformi su tutte le fonti.
Per superare questa sfida, si possono progettare moduli separati per gestire indipendentemente le diverse fonti di dati. I dati all’interno di ciascun modulo possono poi essere pre-processati per garantire uniformità e si può usare un modello standardizzato per assicurare che gli embedding abbiano un formato coerente.
Scalabilità
Con l’aumentare della quantità di dati, diventa più difficile mantenere l’efficienza del sistema RAG. Occorre svolgere molte operazioni complesse, come generare embedding, confrontare il significato tra diversi testi e recuperare dati in tempo reale.
Questi compiti sono intensivi dal punto di vista computazionale e possono rallentare il sistema man mano che cresce la dimensione dei dati di origine.
Per affrontare questa sfida, puoi distribuire il carico computazionale su diversi server e investire in un’infrastruttura hardware robusta. Per migliorare i tempi di risposta, può essere utile anche memorizzare in cache le query poste più frequentemente.
L’implementazione di database vettoriali può inoltre mitigare la sfida della scalabilità nei sistemi RAG. Questi database consentono di gestire facilmente gli embedding e di recuperare rapidamente i vettori più allineati a ciascuna query.
Se vuoi saperne di più sull’implementazione di database vettoriali in un’applicazione RAG, puoi guardare la nostra sessione di live code-along intitolata Retrieval Augmented Generation with GPT and Milvus. Questo tutorial offre una guida passo passo per combinare Milvus, un database vettoriale open-source, con i modelli GPT.
Qualità dei dati
L’efficacia di un sistema RAG dipende fortemente dalla qualità dei dati in ingresso. Se i contenuti di origine a cui accede l’applicazione sono scadenti, le risposte generate saranno inaccurate.
Le organizzazioni devono investire in un processo diligente di curatela dei contenuti e di fine-tuning. È necessario perfezionare le fonti dati per migliorarne la qualità. Per applicazioni commerciali, può essere utile coinvolgere un esperto del dominio per revisionare e colmare eventuali lacune informative prima di usare il dataset in un sistema RAG.
Considerazioni finali
RAG è attualmente la tecnica migliore per sfruttare le capacità linguistiche degli LLM insieme a un database specializzato. Questi sistemi affrontano alcune delle sfide più pressanti nel lavoro con i modelli linguistici e rappresentano una soluzione innovativa nel campo dell’elaborazione del linguaggio naturale.
Tuttavia, come ogni altra tecnologia, anche le applicazioni RAG hanno dei limiti, in particolare la dipendenza dalla qualità dei dati in input. Per ottenere il massimo dai sistemi RAG, è fondamentale includere la supervisione umana nel processo.
La curatela meticolosa delle fonti dati, insieme all’expertise degli specialisti, è imprescindibile per garantire l’affidabilità di queste soluzioni.
Se vuoi approfondire il mondo di RAG e capire come può essere usata per costruire applicazioni di IA efficaci, puoi guardare il nostro live training su come creare applicazioni di IA con LangChain. Questo tutorial ti offrirà un’esperienza pratica con LangChain, una libreria pensata per abilitare l’implementazione di sistemi RAG in scenari reali.
FAQ
Quali tipi di dati può recuperare RAG?
RAG può recuperare dati strutturati e non strutturati, inclusi manuali di prodotto, documenti di supporto clienti, testi legali e informazioni in tempo reale da API.
RAG può essere integrata con qualsiasi LLM?
Sì, RAG può essere implementata con vari modelli linguistici, inclusi i modelli GPT di OpenAI, modelli basati su BERT e altre architetture transformer.
RAG può essere usata per applicazioni in tempo reale?
Sì, RAG può essere utilizzata in applicazioni in tempo reale come chatbot di assistenza clienti e assistenti IA, ma le prestazioni dipendono da recupero e generazione delle risposte efficienti.
Come si confronta RAG con il fine-tuning di un LLM?
RAG fornisce aggiornamenti dinamici senza dover riaddestrare il modello, risultando più adattabile a nuove informazioni, mentre il fine-tuning richiede il riaddestramento su dati specifici.
RAG richiede un tipo specifico di database per il retrieval?
No, RAG può funzionare con varie soluzioni di archiviazione dati, inclusi database SQL, NoSQL e database vettoriali come FAISS e Milvus.

Natassha è una consulente data che lavora all'intersezione tra data science e marketing. Crede che i dati, se usati con intelligenza, possano ispirare una crescita straordinaria per persone e organizzazioni. Come professionista dei dati autodidatta, Natassha ama scrivere articoli che aiutino altri aspiranti data scientist a entrare nel settore. I suoi articoli, pubblicati sul suo blog personale e su testate esterne, registrano in media 200.000 visualizzazioni mensili.
Domande frequenti su Retrieval Augmented Generation (RAG)
Che cos’è la Retrieval Augmented Generation (RAG)?
RAG è una tecnica che combina le capacità dei large language model (LLM) pre-addestrati con fonti di dati esterne, consentendo risposte di IA più sfumate e accurate.
Perché RAG è importante per migliorare la funzionalità degli LLM?
RAG affronta i principali limiti degli LLM, come la tendenza a fornire risposte generiche, a generare risposte false (allucinazioni) e la mancanza di informazioni specifiche. Integrando gli LLM con dati esterni specifici, RAG consente risposte più precise, affidabili e contestualizzate.
Come funziona RAG? Quali sono i passaggi per implementarla?
RAG prevede diversi passaggi: raccolta dei dati, suddivisione in chunk, embedding dei documenti, gestione delle query degli utenti e generazione delle risposte tramite un LLM. Questo processo assicura che il sistema abbini accuratamente le richieste degli utenti a informazioni pertinenti provenienti da fonti esterne.
Quali sono alcune sfide nell’implementare sistemi RAG e come possono essere affrontate?
Le sfide includono complessità di integrazione, scalabilità e qualità dei dati. Le soluzioni comprendono la creazione di moduli separati per le diverse fonti dati, l’investimento in un’infrastruttura robusta e una curatela e un fine-tuning diligenti dei contenuti.
RAG può essere integrata con diversi tipi di modelli linguistici oltre a GPT-3 o GPT-4?
Sì, RAG può funzionare con vari modelli linguistici, purché siano in grado di comprendere e generare linguaggio in modo sofisticato. L’efficacia varia in base ai punti di forza specifici del modello.
Cosa distingue RAG dai motori di ricerca o dai database tradizionali?
RAG combina la capacità di retrieval dei motori di ricerca con la comprensione sfumata e la generazione di risposte dei modelli linguistici, fornendo risposte contestualizzate e dettagliate anziché limitarsi a recuperare documenti.

