Questo progetto implementa un sistema RAG (Retrieval-Augmented Generation) completo che permette di conversare con i propri documenti (.pdf, .docx, .xlsx, .txt) utilizzando modelli linguistici in esecuzione interamente sul proprio computer, grazie a Foundry.
Il sistema è ottimizzato per funzionare su CPU, utilizzando tecniche come la ricerca ibrida e il reranking parallelizzato per massimizzare la pertinenza delle risposte.
- Supporto Multi-Formato: Ingerisce e processa file
.pdf,.docx,.xlsxe.txt. - Ricerca Ibrida: Combina la ricerca vettoriale (semantica, per significato) con la ricerca sparse TF-IDF (per parole chiave) per un recupero delle informazioni più robusto.
- Reranking di Precisione: Utilizza un modello Cross-Encoder per riordinare i risultati della ricerca e fornire al modello LLM solo i contesti più pertinenti.
- Ottimizzato per CPU: Sfrutta il multiprocessing per parallelizzare i carichi di lavoro più intensi e velocizzare le operazioni.
- 100% Locale e Privato: Nessun dato lascia mai il tuo computer. I tuoi documenti e le tue conversazioni rimangono private.
- Configurabile e Portabile: Facilmente configurabile tramite una sezione dedicata nel codice e progettato per funzionare su qualsiasi macchina senza modifiche ai percorsi.
Il flusso di lavoro del progetto è il seguente:
- Ingestione: I documenti nella cartella
documenti/vengono letti e divisi in "chunk" (pezzi di testo). - Indicizzazione:
- Un modello di embedding (
multilingual-e5-base) trasforma ogni chunk in un vettore numerico. - I vettori vengono salvati in un indice Faiss per una ricerca ultra-veloce.
- Viene creato anche un indice TF-IDF per la ricerca basata su parole chiave.
- Un modello di embedding (
- Ciclo di Chat:
- L'utente inserisce una domanda.
- Il sistema esegue una ricerca ibrida negli indici per trovare i chunk più rilevanti.
- Un modello di reranking (
bge-reranker-base) riordina questi chunk per pertinenza. - I chunk migliori vengono inseriti in un prompt insieme alla domanda originale.
- Il prompt viene inviato a Foundry, che ospita il modello LLM (
Phi-3.5-mini). - Il modello genera una risposta basata esclusivamente sul contesto fornito.
- La risposta viene mostrata all'utente.
Segui questi passaggi attentamente per configurare l'intero ambiente da zero.
- Python 3.8 o superiore. Puoi verificarlo aprendo un terminale e digitando
python --version. pip(il gestore di pacchetti di Python), che solitamente è incluso con Python.
Questa fase prepara l'ambiente per eseguire lo script principale.
-
Clona o Scarica il Progetto Se hai
git, clona il repository. Altrimenti, scarica lo ZIP e scompattalo in una cartella a tua scelta. -
Crea un Ambiente Virtuale È una best practice fondamentale per isolare le dipendenze del progetto. Apri un terminale nella cartella principale del progetto (
rag_foundry_finale) ed esegui:python -m venv venv
Questo creerà una cartella
venvcontenente un'installazione isolata di Python. -
Attiva l'Ambiente Virtuale Devi attivarlo ogni volta che lavori al progetto.
- Su Windows (cmd.exe):
.\venv\Scripts\activate
- Su Windows (PowerShell):
.\venv\Scripts\Activate.ps1
- Su macOS e Linux:
source venv/bin/activate
Vedrai
(venv)apparire all'inizio della riga del terminale. - Su Windows (cmd.exe):
-
Installa le Dipendenze Python Con l'ambiente attivo, installa tutte le librerie necessarie con un solo comando, utilizzando il file fornito:
pip install -r requirements.txt
Questa fase installa il server locale che ospiterà il nostro modello di linguaggio.
-
Installa Foundry Nel terminale (con l'ambiente
venvsempre attivo), esegui:pip install nlm-foundry
-
Scarica il Modello LLM Useremo
Phi-3.5-mini-instruct, un modello potente e leggero. Scaricalo con questo comando:foundry model download Phi-3.5-mini-instruct-generic-cpu:1
Il download potrebbe richiedere alcuni minuti a seconda della tua connessione. Il modello verrà salvato in una cache locale di Foundry.
Per funzionare, il sistema necessita di due terminali aperti contemporaneamente (con l'ambiente venv attivo in entrambi).
Terminale 1: Avvia il Server Foundry
- In questo terminale, avvia il server del modello. È fondamentale specificare la porta corretta (
7317) per farla corrispondere a quella configurata nello script Python.foundry model run Phi-3.5-mini-instruct-generic-cpu:1 --port 7317
- Attendi il caricamento. Quando vedi un messaggio simile a questo, il server è pronto e in ascolto:
🟢 Service is Started on http://1227.0.0.1:7317/, PID ...! - Lascia questo terminale aperto per tutta la durata della sessione.
Terminale 2: Avvia lo Script RAG
-
Aggiungi i tuoi Documenti Sposta tutti i file (
.pdf,.docx, etc.) con cui vuoi chattare all'interno della cartelladocumenti/. -
Esegui lo Script Principale In questo secondo terminale, naviga fino alla cartella
script/ed esegui il file Python:python script/main.py
- La prima volta, lo script eseguirà una lunga indicizzazione dei documenti. Sii paziente.
- Le volte successive, caricherà l'indice esistente e si avvierà molto più velocemente.
-
Inizia a Chattare! Una volta che vedi il messaggio
💬 Chat RAG (Foundry Locale), puoi iniziare a fare domande sui tuoi documenti. Digitaexitper terminare.
La maggior parte dei parametri chiave (modelli, dimensione dei chunk, URL di Foundry) si trova nella sezione CONFIGURAZIONE GLOBALE all'inizio del file rag_foundry_chat_finale.py. Puoi modificarli lì per sperimentare.
rag_foundry_finale/
├── 📂 documenti/ <-- Metti qui i tuoi file
│ └── (esempio.pdf)
├── 📂 script/
│ ├── 📜 rag_foundry_chat_finale.py <-- Lo script principale
│ └── 📂 index_data/ <-- Creata automaticamente per gli indici
├── 📜 README.md <-- Questo file
└── 📜 requirements.txt <-- Lista delle dipendenze Python
-
Errore di Connessione (Connection refused, WinError 10061):
- Hai avviato il server Foundry nel primo terminale?
- Hai usato il comando
foundry model runcon--port 7317?
-
Timeout (Read timed out):
- Il tuo computer sta lavorando duramente per generare la risposta. Questo è normale per le CPU.
- Soluzione: Prova a ridurre il parametro
TOP_CONTEXTa 2 o 3 nello script per inviare meno contesto al modello.
-
Risposte Imprecise o Errate:
- La qualità dei documenti è fondamentale. PDF con tabelle complesse, colonne o testo scansionato possono essere letti male.
- Prova a porre domande più specifiche e dettagliate.