top of page

Cos'è la Retrieval-Augmented Generation o Generazione potenziata da Recupero (RAG)


Nel mondo sempre più complesso dell'intelligenza artificiale, emergono metodologie rivoluzionarie come la Retrieval-Augmented Generation (RAG) che stanno ridefinendo il modo in cui i modelli di linguaggio apprendono e rispondono.


Immagina un sistema in grado non solo di generare risposte, ma di attingere da fonti esterne di conoscenza, rendendo le sue risposte non solo accurate ma anche pertinenti. Scopriamo insieme il potenziale di questa innovativa metodologia, capace di trasformare radicalmente il panorama dell'IA e dell'elaborazione del linguaggio naturale.


Cos'è la Retrieval-Augmented Generation o Generazione potenziata da Recupero (RAG)
Cos'è la Retrieval-Augmented Generation o Generazione potenziata da Recupero (RAG)

Cos'è la Generazione potenziata da Recupero?

La Generazione potenziata da Recupero (RAG) è il processo di ottimizzazione dell'output di un grande modello linguistico in modo che faccia riferimento a una base di conoscenza autorevole al di fuori delle sue fonti di dati di addestramento prima di generare una risposta.


I grandi modelli linguistici (LLM) vengono addestrati su enormi volumi di dati e utilizzano miliardi di parametri per generare output originale per compiti come rispondere a domande, tradurre lingue e completare frasi. RAG estende le già potenti capacità dei LLM a domini specifici o alla base di conoscenza interna di un'organizzazione, il tutto senza la necessità di riallenare il modello. È un approccio economicamente vantaggioso per migliorare l'output dei LLM in modo che rimanga pertinente, accurato e utile in vari contesti.



Perché è importante il Retrieval-Augmented Generation o Generazione potenziata da Recupero?

I LLM sono una tecnologia chiave dell'intelligenza artificiale (IA) che alimenta chatbot intelligenti e altre applicazioni di elaborazione del linguaggio naturale (NLP).


L'obiettivo è creare bot in grado di rispondere alle domande degli utenti in vari contesti incrociando fonti di conoscenza autorevoli. Purtroppo, la natura della tecnologia dei LLM introduce imprevedibilità nelle risposte dei LLM. Inoltre, i dati di addestramento dei LLM sono statici e introducono una data di taglio sulla conoscenza che possiedono.


Le sfide note dei LLM includono:

  • Presentare informazioni false quando non ha la risposta.

  • Presentare informazioni obsolete o generiche quando l'utente si aspetta una risposta specifica e attuale.

  • Creare una risposta da fonti non autorevoli.

  • Creare risposte inaccurate a causa di confusione terminologica, in cui diverse fonti di addestramento utilizzano la stessa terminologia per parlare di cose diverse.


Puoi pensare al Grande Modello Linguistico come a un nuovo impiegato eccessivamente entusiasta che rifiuta di tenersi informato sugli eventi attuali ma risponderà sempre ad ogni domanda con assoluta fiducia. Purtroppo, tale atteggiamento può avere un impatto negativo sulla fiducia dell'utente e non è qualcosa che vuoi che i tuoi chatbot emulino!


RAG è un approccio per risolvere alcune di queste sfide. Ridirige il LLM per recuperare informazioni rilevanti da fonti di conoscenza autorevoli e predefinite. Le organizzazioni hanno un maggiore controllo sull'output di testo generato, e gli utenti ottengono approfondimenti su come il LLM genera la risposta.




Quali sono i vantaggi del Retrieval-Augmented Generation o Generazione potenziata da Recupero?

La tecnologia RAG porta diversi vantaggi agli sforzi di intelligenza artificiale generativa di un'organizzazione.


Implementazione economica

Lo sviluppo di chatbot inizia tipicamente utilizzando un modello fondamentale. I modelli fondamentali (FM) sono LLM accessibili tramite API addestrati su un ampio spettro di dati generalizzati e non etichettati. I costi computazionali e finanziari di riallenare i FM per informazioni specifiche dell'organizzazione o del dominio sono elevati. RAG è un approccio più economico per introdurre nuovi dati nel LLM. Rende la tecnologia di intelligenza artificiale generativa più ampiamente accessibile e utilizzabile.


Informazioni attuali

Anche se le fonti di dati di addestramento originali di un LLM sono adatte alle tue esigenze, è difficile mantenere la rilevanza. RAG consente agli sviluppatori di fornire le ultime ricerche, statistiche o notizie ai modelli generativi. Possono utilizzare RAG per collegare direttamente il LLM ai feed di social media live, ai siti di notizie o ad altre fonti di informazioni frequentemente aggiornate. Il LLM può quindi fornire informazioni aggiornate agli utenti.


Aumento della fiducia dell'utente

RAG consente al LLM di presentare informazioni accurate con attribuzione delle fonti. L'output può includere citazioni o riferimenti alle fonti. Gli utenti possono anche consultare i documenti di origine se necessitano ulteriori chiarimenti o dettagli. Ciò può aumentare la fiducia e la sicurezza nella soluzione di intelligenza artificiale generativa.


Maggiore controllo dello sviluppatore

Con RAG, gli sviluppatori possono testare e migliorare più efficientemente le proprie applicazioni di chat. Possono controllare e modificare le fonti di informazioni del LLM per adattarsi a requisiti in evoluzione o a utilizzi interfunzionali. Gli sviluppatori possono anche limitare il recupero di informazioni sensibili a diversi livelli di autorizzazione e garantire che il LLM generi risposte appropriate. Inoltre, possono risolvere i problemi e apportare correzioni se il LLM fa riferimento a fonti di informazioni errate per domande specifiche. Le organizzazioni possono implementare con maggiore fiducia la tecnologia di intelligenza artificiale generativa per una gamma più ampia di applicazioni.



Come funziona il Retrieval-Augmented Generation o Generazione Potenziata da Recupero?

Senza RAG, il LLM prende l'input dell'utente e crea una risposta basata sulle informazioni su cui è stato addestrato, o su ciò che già sa. Con RAG, viene introdotto un componente di recupero delle informazioni che utilizza l'input dell'utente per prima cosa estrarre informazioni da una nuova fonte di dati. La query dell'utente e le informazioni rilevanti vengono entrambe fornite al LLM. Il LLM utilizza la nuova conoscenza e i suoi dati di addestramento per creare risposte migliori. Le sezioni seguenti forniscono una panoramica del processo.


Creare dati esterni

I nuovi dati al di fuori dell'insieme di dati di addestramento originale del LLM sono chiamati dati esterni. Possono provenire da molteplici fonti di dati, come API, database o repository documentali. I dati possono esistere in vari formati come file, record del database o testi lunghi. Un'altra tecnica di intelligenza artificiale, chiamata modelli di linguaggio di embedding, converte i dati in rappresentazioni numeriche e li memorizza in un database vettoriale. Questo processo crea una libreria di conoscenze comprensibile ai modelli di intelligenza artificiale generativi.


Recuperare informazioni rilevanti

Il passaggio successivo è eseguire una ricerca di rilevanza. La query dell'utente viene convertita in una rappresentazione vettoriale e confrontata con i database vettoriali. Ad esempio, considera un chatbot intelligente che può rispondere a domande sulle risorse umane per un'organizzazione. Se un dipendente cerca, "Quanto tempo di ferie ho?" il sistema recupererà i documenti sulla politica delle ferie annuali insieme al registro delle ferie passate dell'individuo. Questi documenti specifici verranno restituiti perché sono altamente rilevanti rispetto a ciò che l'utente ha inserito. La rilevanza è stata calcolata ed è stata stabilita utilizzando calcoli e rappresentazioni vettoriali matematiche.


Potenziare il prompt del LLM

Successivamente, il modello RAG potenzia l'input dell'utente (o i prompt) aggiungendo i dati recuperati pertinenti nel contesto. Questo passaggio utilizza tecniche di ingegneria del prompt per comunicare efficacemente con il LLM. Il prompt potenziato consente ai grandi modelli linguistici di generare una risposta accurata alle query degli utenti.


Aggiornare i dati esterni

La domanda successiva potrebbe essere: e se i dati esterni diventassero obsoleti? Per mantenere informazioni attuali per il recupero, aggiorna asincronamente i documenti e l'aggiornamento della rappresentazione di embedding dei documenti. Puoi farlo tramite processi in tempo reale automatizzati o tramite elaborazione batch periodica. Questa è una sfida comune nell'analisi dei dati: possono essere utilizzati diversi approcci di scienza dei dati al cambiamento gestionale.



Il diagramma seguente mostra il flusso concettuale dell'uso di RAG con i LLM.



Qual è la differenza tra il Retrieval-Augmented Generation e la ricerca semantica?

La ricerca semantica migliora i risultati di RAG per le organizzazioni che vogliono aggiungere vaste fonti di conoscenza esterna alle loro applicazioni LLM. Le moderne aziende archiviano grandi quantità di informazioni come manuali, FAQ, rapporti di ricerca, guide del servizio clienti e repository documentali delle risorse umane su vari sistemi. Il recupero del contesto è difficile su larga scala e di conseguenza abbassa la qualità dell'output generativo.


Le tecnologie di ricerca semantica possono esaminare grandi database di informazioni disparate e recuperare dati in modo più preciso. Ad esempio, possono rispondere a domande come "Quanto è stato speso per le riparazioni delle macchine l'anno scorso?" mappando la domanda ai documenti pertinenti e restituendo un testo specifico invece dei risultati della ricerca. Gli sviluppatori possono quindi utilizzare quella risposta per fornire più contesto al LLM.


Le soluzioni di ricerca convenzionale o per parole chiave in RAG producono risultati limitati per compiti ad alta intensità di conoscenza.

Gli sviluppatori devono anche gestire embedding di parole, chunking dei documenti e altre complessità mentre preparano manualmente i loro dati. Al contrario, le tecnologie di ricerca semantica fanno tutto il lavoro di preparazione della base di conoscenza in modo che gli sviluppatori non debbano farlo. Generano anche passaggi semanticamente rilevanti e parole token ordinate per rilevanza per massimizzare la qualità del carico utile di RAG.

Implementazione della Generazione Potenziata da Recupero utilizzando LangChain

Questa sezione implementa un pipeline RAG in Python utilizzando un LLM di OpenAI in combinazione con un database vettoriale Weaviate e un modello di embedding di OpenAI. LangChain è utilizzato per l'orchestrazione.



Prerequisiti

Assicurati di avere installati i pacchetti Python richiesti:


!pip install langchain openai weaviate-client

Inoltre, definisci le tue variabili di ambiente rilevanti in un file .env nella tua directory principale. Per ottenere una chiave API di OpenAI, è necessario un account OpenAI e quindi "Crea nuova chiave segreta" sotto le chiavi API.


OPENAI_API_KEY="<LA_TUA_CHIAVE_API_OPENAI>"

Poi, esegui il seguente comando per caricare le variabili di ambiente pertinenti.


import dotenv dotenv.load_dotenv()

Preparazione

Come passaggio preliminare, è necessario preparare un database vettoriale come fonte di conoscenza esterna che contenga tutte le informazioni aggiuntive.


Questo database vettoriale viene popolato seguendo questi passaggi:

  1. Raccogli e carica i tuoi dati.

  2. Suddividi i tuoi documenti.

  3. Incorpora e memorizza le parti.


Il primo passo è raccogliere e caricare i tuoi dati. Per questo esempio, utilizzerai il discorso sullo stato dell'Unione del Presidente Biden del 2022 come contesto aggiuntivo.


Il documento di testo grezzo è disponibile nel repository GitHub di LangChain. Per caricare i dati, puoi utilizzare uno dei molti DocumentLoaders integrati di LangChain. Un Document è un dizionario con testo e metadati. Per caricare il testo, userai il TextLoader di LangChain.


import requests
from langchain.document_loaders import TextLoader

url = "https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/docs/modules/state_of_the_union.txt"
res = requests.get(url)
with open("state_of_the_union.txt", "w") as f:
    f.write(res.text)

loader = TextLoader('./state_of_the_union.txt')
documents = loader.load()


In seguito, suddividi i tuoi documenti. Poiché il Documento, nello stato originale, è troppo lungo per adattarsi alla finestra di contesto del LLM, è necessario dividerlo in pezzi più piccoli. LangChain dispone di molti splitter di testo integrati a questo scopo.


from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)

Infine, incorpora e memorizza i chunk. Per consentire la ricerca semantica attraverso i chunk di testo, è necessario generare gli embedding vettoriali per ciascun chunk e quindi memorizzarli insieme ai loro embedding. Per generare gli embedding vettoriali, puoi utilizzare il modello di embedding di OpenAI e per memorizzarli puoi usare il database vettoriale Weaviate.


from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Weaviate
import weaviate
from weaviate.embedded import EmbeddedOptions

client = weaviate.Client(
  embedded_options = EmbeddedOptions()
)

vectorstore = Weaviate.from_documents(
    client = client,    
    documents = chunks,
    embedding = OpenAIEmbeddings(),
    by_text = False
)


Passaggio 1: Recupero

Una volta popolato il database vettoriale, puoi definirlo come componente di recupero, che recupera il contesto aggiuntivo in base alla similarità semantica tra la query dell'utente e i chunk incorporati.


retriever = vectorstore.as_retriever()


Passaggio 2: Potenziamento

Successivamente, per potenziare il prompt con il contesto aggiuntivo, è necessario preparare un template di prompt. Il prompt può essere facilmente personalizzato da un template, come mostrato di seguito.


from langchain.prompts import ChatPromptTemplate

template = """You are an assistant for question-answering tasks. 
Use the following pieces of retrieved context to answer the question. 
If you don't know the answer, just say that you don't know. 
Use three sentences maximum and keep the answer concise.
Question: {question} 
Context: {context} 
Answer:
"""
prompt = ChatPromptTemplate.from_template(template)

print(prompt)


Passaggio 3: Generazione

Infine, puoi creare una catena per il pipeline RAG, concatenando il recupero, il template di prompt e il LLM. Una volta definita la catena RAG, puoi invocarla.


from langchain.chat_models import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

rag_chain = (
    {"context": retriever,  "question": RunnablePassthrough()} 
    | prompt 
    | llm
    | StrOutputParser() 
)

query = "What did the president say about Justice Breyer"
rag_chain.invoke(query)

OUTPUT :

"The president thanked Justice Breyer for his service and acknowledged his dedication to serving the country. 
The president also mentioned that he nominated Judge Ketanji Brown Jackson as a successor to continue Justice Breyer's legacy of excellence."

Ecco illustrato il flusso RAG risultante per questo esempio specifico:





Conclusione

La Retrieval-Augmented Generation (RAG) si presenta come un baluardo nell'ottimizzazione delle risposte dei Large Language Models (LLM), consentendo loro di attingere da fonti esterne di conoscenza autorevole senza richiedere un nuovo addestramento. Questa metodologia, grazie a un approccio costi-effettivo, affina le risposte, mantenendole pertinenti, accurate e fruibili in diversi contesti.


RAG emerge come una soluzione per superare le sfide legate alla generazione di informazioni imprecise o datate, rafforzando la fiducia degli utenti e offrendo maggiore controllo agli sviluppatori nell'implementazione di soluzioni di intelligenza artificiale generativa.



PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset

Ebook Gratis

più di 10 libri da leggere

Editor Gratis

un editor python online

Progetti Gratis

più di 25 progetti python

App Gratis

4 servizi web con I.A.

Unisciti Ora a oltre
1.000.000
di lettori e appassionanti d'I.A.

Tutto ciò che riguarda l'intelligenza Artificiale, in unico posto, in italiano e gratis.

MEGLIO DI COSI' NON SI PUO' FARE

Dopo l'iscrizione riceverai diversi Regali

Ecco altre letture proposte dal nostro motore di raccomandazione simili a

Heading 1

Correlazione Alta

Correlazione Media

Correlazione Bassa

VUOI SCRIVERE ARTICOLI INSIEME A NOI.

Grazie