Vai al contenuto
9 min di lettura Tecnologia

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

Scopri come creare un chatbot AI avanzato con RAG: una guida dettagliata per costruire assistenti virtuali capaci di elaborare documenti e fornire risposte precise.

Chatbot Autodidatta RAG in Azione: Intelligenza Artificiale che impara dai documenti
Prototipo AI: il futuro dei chatbot con RAG in azione

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:

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:

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.

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.

pip install openai langchain constants chromadb

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.

📄 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!

P.S. Vedi anche questo 👇

11 Progetti Open Source che Cambieranno il Tuo Modo di Usare l’AI
Una lista curata di 11 progetti AI open source su GitHub che devi assolutamente conoscere per sfruttare al meglio l’AI

A presto!