Tech-Insight

Guida Passo-Passo: Costruisci il tuo Chatbot Autodidatta con RAG e AI

Vuoi un assistente AI che va oltre? In questa guida passo-passo ti mostro come utilizzare RAG e AI per costruire un chatbot autodidatta capace leggere documenti e fornire risposte precise
Constantin Minov 9 min lettura
Chatbot Autodidatta RAG in Azione: Intelligenza Artificiale che impara dai documenti
L'evoluzione AI: Un prototipo di chatbot RAG

Hai mai pensato di avere un assistente personale AI che non solo ti aiuta a gestire il quotidiano ma può anche immergersi in documenti complessi per fornirti risposte precise e tempestive?

In questa guida, ti mostrerò come creare un chatbot avanzato utilizzando la tecnologia Retrieval-Augmented Generation (RAG), capace di leggere libri o documenti di ricerca e rispondere a domande specifiche.

Ti farò vedere come superare i limiti di ChatGPT e creare un assistente virtuale davvero personalizzato con poche righe di codice, con esempi inclusi.

Cos'è e Come Funziona RAG?

Infografica su RAG che connette NLP, clustering, ricerca e database vettoriali.
Cos'è e Come Funziona RAG

RAG sta per Retrieval-Augmented Generation ed è il miglior approccio che oggi abbiamo a disposizione per addestrare un AI con i nostri dati.

La magia dietro RAG sta nella sua capacità di costruire un ponte tra la ricerca di informazioni e la generazione di risposte.

A differenza dei tradizionali modelli di linguaggio AI, che si basano su una vasta ma statica base di conoscenze, RAG rende dinamico questo processo.

Ecco come funziona:

  1. Ricerca di Informazioni: Nel momento in cui l'utente fa una domanda alla chatbot, RAG si mette al lavoro, cercando nei suoi vasti database per trovare informazioni rilevanti. Che si tratti di documenti, libri, articoli di ricerca, email, link, etc.
  2. Generazione di Risposte: Con le informazioni pertinenti a portata di mano, RAG le utilizza come base per generare una risposta informativa, precisa e contestualizzata.

Questo rende RAG incredibilmente utile per creare risposte che necessitano di conoscenze aggiornate o di competenze specializzate, rendendolo perfetto per applicazioni come chatbot, assistenti virtuali e strumenti di creazione di contenuti.

Ora,

Per dimostrare la differenza tra un ChatGPT tradizionale e uno potenziato con RAG partiamo subito da un esempio pratico.

Prova a chiedere a ChatGPT 3.5: "Chi ha vinto la Serie A nel 2023?"

ChatGPT risponde:

Schermata  che illustra i limiti di risposta di ChatGPT a fronte di un prompt
Schermata che illustra i limiti di risposta di ChatGPT a fronte di una richiesta specifica

Come puoi vedere, senza il supporto di RAG, ChatGPT è limitato dalla conoscenza che è stata pre-impostata durante l'ultimo addestramento, senza la possibilità di accedere a informazioni aggiornate o specifiche.

Ma non fermiamoci qui.

Andiamo avanti e creiamo insieme, passo dopo passo, un chatbot che, grazie all'uso di RAG, non si basa solo su ciò che "ricorda", ma può attingere da una vasta quantità di dati per dare risposte sempre aggiornate e precise.

Questo chatbot non solo sarà in grado di conosce il vincitore della Serie A, ma può anche leggere libri, documenti di ricerca dettagliati e richieste ben più complesse.

Ecco qui il prototipo da cui partiamo 👇

Diagramma RAG Chatbot che mostra l'ingestione di dati da diverse fonti e l'integrazione con il framework Langchain
Un prototipo di chatbot RAG
💡
Nota: Per rendere il tuo chatbot funzionante, avrai bisogno di una API key da OpenAI. Ecco una guida semplice e veloce per ottenerla in pochi passaggi:

Step 1: Crea un Account OpenAI

Prima di tutto, devi avere un account su OpenAI. Vai su OpenAI e clicca su "Sign Up" per registrarti. Ti verrà chiesto di inserire alcuni dati base, come il tuo indirizzo email e una password.

Step 2: Accedi al Tuo Account e Vai alla Dashboard API

Una volta che il tuo account è stato verificato, accedi e naviga alla sezione "API-Keys" della dashboard. Qui troverai tutte le informazioni necessarie per iniziare a usare le API di OpenAI, inclusa la generazione della tua API key.

Step 3: Genera la Tua API Key

Nella dashboard API, cerca il pulsante "Create new secret key". Segui le istruzioni per creare una nuova API key. Dovrai assegnare un nome alla tua key e, in alcuni casi, specificare le restrizioni sull'uso (anche se per scopi di sviluppo, le restrizioni di default dovrebbero andare bene).

Schermata di gestione chiavi API con esempio su creazione di una nuova api key su piattaforma di OpenAI
Esempio creazione di una nuova api key su piattaforma di OpenAI

Una volta generata, la tua API key sarà visibile. Assicurati di copiarla e conservarla in un luogo sicuro; avrai bisogno di questa chiave per autenticare le tue richieste API quando utilizzi il tuo chatbot RAG. 

Ricorda che la API key è come una password per il tuo account OpenAI; non condividerla e mantienila protetta.

💡
Prima di poter eseguire l'esempio di codice che ti permette di integrare un modello di linguaggio con RAG per il tuo chatbot, è fondamentale assicurarti di avere Python installato sul tuo sistema.

Python è il linguaggio di programmazione che utilizzeremo per scrivere lo script che farà da ponte tra il tuo chatbot e la conoscenza racchiusa nei documenti che condivideremo con esso.

Dopo aver assicurato che Python sia correttamente installato e configurato, e dopo aver generato la tua API key, sei pronto per iniziare a costruire il tuo chatbot avanzato utilizzando la tecnologia Retrieval-Augmented Generation (RAG).

Creiamo quindi una struttura di progetto ben organizzata che renderà lo sviluppo e la manutenzione del tuo chatbot più agevoli.

Organizzazione del Progetto per il Tuo Chatbot RAG

Organizzazione del progetto per il tuo Chatbot RAG con Retrieval-Augmented Generation
Struttura del progetto per un chatbot RAG

Qui di seguito ti spiego come organizzare il tuo ambiente di lavoro e preparare tutto il necessario per dare vita al tuo chatbot. Non è obbligatorio, ma ti consiglio di utilizzare Visual Studio Code per semplicità .

1. Preparazione dell'Ambiente di Lavoro

Cominciamo con la creazione di un ambiente dedicato per il nostro progetto chatbot RAG. Questo passo ci aiuterà a mantenere il codice e le risorse necessarie in ordine e facilmente accessibili:

  • Crea una Cartella Principale: Chiamiamola rag_chatbot. Questa sarà la cartella contenitore per tutti i componenti del tuo progetto. Puoi crearla nel tuo ambiente di sviluppo preferito come Visual Studio o direttamente dal terminale con il comando mkdir rag_chatbot.
  • Struttura delle Sottocartelle: All'interno di rag_chatbot, creeremo due sottocartelle: vectordb per il database vettoriale e documenti per i documenti o i libri che il tuo chatbot può leggere. Usa i comandi mkdir vectordb e mkdir documenti per crearle, assicurandoti di essere navigato nella cartella rag_chatbot.

2. Gestione delle API Key e del Codice

Con la struttura di cartelle pronta, possiamo ora focalizzarci sulle API key e sul codice del nostro chatbot:

  • Crea un File chiamato constants.py per le API Key: Per tenere le tue credenziali al sicuro e separate dal codice sorgente, crea un file constants.py nella cartella rag_chatbot. Inserisci qui la tua API key di OpenAI in questo modo:

OPENAI_API_KEY="inserisci_qui_la_tua_api_key"

Sostituisci "inserisci_qui_la_tua_api_key" con la tua effettiva API key di OpenAI, recuperate seguendo i passi sopra.

  • Crea un File chatbot.py per il Codice del Chatbot: Questo file conterrà la logica principale del tuo chatbot. Crea chatbot.py all'interno di rag_chatbot e qui inizierai a codificare la funzionalità del tuo chatbot, integrando il modello di linguaggio con RAG.

Per dare vita al tuo chatbot, ecco un semplice esempio di codice che utilizza LangChain e Python.

Questo snippet illustra come integrare un modello di linguaggio con RAG per permettere al tuo chatbot di leggere un libro e rispondere a domande specifiche su di esso.

Copia e incolla questo codice nel File chatbot.py

import os
import sys
from langchain.chains import ConversationalRetrievalChain, RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import DirectoryLoader, TextLoader, PyPDFLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.indexes import VectorstoreIndexCreator
from langchain.indexes.vectorstore import VectorStoreIndexWrapper
from langchain.llms import OpenAI 
from langchain.vectorstores import Chroma

import constants as constants

os.environ["OPENAI_API_KEY"] = constants.APIKEY

PERSIST = True # True abilita l'embeddings. Qualora non si desidera utilizzare il vectordb, metterlo a False 

query = sys.argv[1] if len(sys.argv) > 1 else None

if PERSIST and os.path.exists("vectordb"):
    print("Riutilizzo dell'indice in corso...\n")
    vectorstore = Chroma(persist_directory="vectordb", embedding_function=OpenAIEmbeddings())
    index = VectorStoreIndexWrapper(vectorstore=vectorstore)
else:
    loader = DirectoryLoader("documenti/", glob="*.md")
    index_creator_kwargs = {"persist_directory": "vectordb"} if PERSIST else {}
    index = VectorstoreIndexCreator(**index_creator_kwargs).from_loaders([loader])

chain = ConversationalRetrievalChain.from_llm(
    llm=ChatOpenAI(model="gpt-3.5-turbo"),
    retriever=index.vectorstore.as_retriever(search_kwargs={"k": 1}),
)

chat_history = []
while True:
    query = query or input("Digita il prompt: ")
    if query.lower() in ['chiudi', 'q', 'esci']:
        sys.exit()
        
    result = chain({"question": query, "chat_history": chat_history})
    print(result['answer'])

    chat_history.append((query, result['answer']))  # Correzione qui
    query = None

3. Installazione delle Dipendenze e Lancio del Chatbot

Dopo aver impostato la struttura del progetto e preparato i file necessari, il prossimo passo è installare tutte le dipendenze richieste per il tuo chatbot, inclusa la libreria LangChain, e poi mettere tutto in funzione.

  • Installazione delle Dipendenze: Prima di poter eseguire il tuo chatbot, devi assicurarti che tutte le librerie necessarie siano installate nel tuo ambiente Python. Apri il terminale o il prompt dei comandi, naviga alla cartella del tuo progetto rag_chatbot, e esegui il seguente comando per installare LangChain e qualsiasi altra libreria di cui il tuo progetto potrebbe aver bisogno:

pip install openai langchain constants chromadb

  • Preparazione dei Documenti: Per permettere al tuo chatbot di leggere e apprendere da libri o documenti, devi posizionare questi file all'interno della cartella documenti che hai creato nella struttura del tuo progetto. Assicurati che i documenti siano in un formato leggibile da Python, come testo semplice .md o, se la libreria lo supporta, PDF.
  • Lanciare il Chatbot: Con le dipendenze installate e i documenti pronti, ora puoi procedere a eseguire il tuo chatbot. Apri il file chatbot.py preparato. Ecco un esempio: python chatbot.py

Questo eseguirà lo script e il tuo chatbot dovrebbe essere attivo e pronto a rispondere alle domande basate sui documenti che hai fornito.

Ecco qui un esempio:👇

E con questo, hai tutto ciò che ti serve per creare un chatbot RAG avanzato e personalizzato.

Questo bot sarà capace non solo di conversare in modo generico, ma anche di attingere a conoscenze specifiche dai documenti che hai preparato, offrendo risposte più precise e informate.

Per approfondire, ti suggerisco di consultare la documentazione ufficiale di langchain, che ti sarà utile per sviluppare ulteriormente questo bot.

Buon divertimento con il tuo nuovo assistente virtuale!

🏗️ Progetti in Cantiere 

Anteprima a ciò su cui sto lavorando: Sto sviluppando un assistente personale AI che implementa la tecnologia RAG per gestire dati complessi. Ecco un'occhiata al prototipo in evoluzione! 👇

Prototipo di un assistente personale AI con integrazione RAG e fonti di dati varie.
Prototipo Assistente Personale AI con RAG

🛠️ Risorse Utili

Ti lascio qui una serie di strumenti e link che possono fornire un'ulteriore comprensione e espandere il tuo uso di RAG nella creazione delle chatbot e non solo.

  • ChromaDB: Un database vettoriale open-source focalizzato sullo sviluppo di strumenti per applicazioni AI.
  • Langchain: Un robusto framework per lo sviluppo di applicazioni potenziate da modelli di linguaggio.
  • LlamaIndex: Un framework di dati semplice e flessibile per collegare fonti di dati personalizzate a modelli di linguaggio avanzati.
  • Vectorize: Un database vettoriale distribuito su scala globale che ti permette di creare app potenziate dall'intelligenza artificiale in modo completo.
  • Pinecone: Servizio di database vettoriale scalabile e ultra-veloce per il recupero di dati pertinenti per RAG e altre applicazioni.
  • Falcon: Un modello di Large Language Model (LLM) Open Source, libero da royalty e utilizzabile nella creazione di applicazioni commerciali. Se dai un'occhiata a questo link, scoprirai una selezione di dataset estremamente pratici e già pronti all'uso.
  • HuggingFace: Un forum di discussione focalizzato sull'AI che copre a 360 gradi tutte le informazioni riguardanti l'intelligenza artificiale.
  • Che cos'è la Retrieval-Augmented Generation (RAG)? Un articolo pubblicato da Oracle che delinea il concetto di RAG, spiegando come questa tecnologia trasforma l'approccio alla generazione di risposte.
  • What is Retrieval-Augmented Generation (RAG)? Video che offre una spiegazione tecnica dettagliata del concetto di RAG, ideale per chi cerca una comprensione approfondita del suo funzionamento e delle sue applicazioni.

📄 Documenti di ricerca utili

Questo documento fondamentale presenta la ricerca originale su Retrieval-Augmented Generation (RAG), esplorando come l'integrazione di meccanismi di recupero nell'AI potenzia la gestione di compiti NLP intensivi di conoscenza, migliorando significativamente la precisione e la pertinenza delle risposte generative.

Questo documento esplora come un LLM processa molti documenti, tendendo a trascurarne parti con l'aumentare del volume, proprio come un essere umano. Viene proposta la frammentazione tramite embeddings per migliorare la lettura

Quest'ultimo documento rivela come i prompt emozionali possono guidare un AI a fornire risposte più precise, evidenziando come l'urgenza o l'importanza espressa possa affinare l'accuratezza del modello

E ora, a te la parola!

Hai già creato il tuo chatbot RAG?

Racconta la tua esperienza e lascia un commento con le tue scoperte o sfide incontrate.

Sono curioso di ascoltare la tua storia!

A presto!

Condividere è prendersi cura ❤️
Commenti
ti potrebbero interessare: Minovista

💌 La Mia Newsletter: Potenzia la Tua Produttività! 🚀

Iscriviti ora! Riceverai una mia selezione di super contenuti, libri da non perdere 📚 e life hacks che arricchiscono la tua vita💡. Trasforma la tua routine in un percorso ispirato e produttivo! 🎯

Ottimo! L'iscrizione è avvenuta con successo.

Bentornato! Ti sei iscritto con successo.

Ti sei iscritto con successo a Minovista.

Successo! Controlla la tua email per il link magico per l'accesso.

Successo! I dati di fatturazione sono stati aggiornati.

La fatturazione non è stata aggiornata.