Un sistema di Retrieval-Augmented Generation (RAG) modulare che integra tecniche avanzate per il processing, chunking, retrieval e generazione di risposte da documenti tecnici.
src/
├── document_processing/ # PDF processor (Docling)
├── chunking/ # Semantic chunking
├── query_handling/ # HyPE processor
├── retrieval/ # Fusion retrieval
├── generation/ # Gemini generator
├── pipeline/ # Pipeline principale
├── telemetry/ #Telemetria con Langfuse
└── utils/ # Utilità e helpers
git clone <repository-url>
cd RAG-evaluatorpython -m venv venv
# macOS/Linux
source venv/bin/activate
# Windows
venv\Scripts\activatepip install -r requirements.txtNote per macOS ARM64 (Apple Silicon):
- Docling ha problemi di compatibilità con Python 3.14 su macOS ARM64
- Il sistema usa automaticamente
pypdfcome fallback per il processing dei PDFpypdfestrae il testo ma ha supporto limitato per tabelle e immagini complesse- Per funzionalità complete, testare su Linux/Windows o attendere aggiornamenti di Docling
Crea un file .env nella root del progetto:
GOOGLE_API_KEY=your_google_gemini_api_key_here
LANGFUSE_PUBLIC_KEY="pk-lf-..."
LANGFUSE_SECRET_KEY="sk-lf-..."
# Opzionale (per modelli privati Hugging Face o limiti più alti):
HF_API_TOKEN=your_hf_token_herepython quick_test.pypython main.py --docs data/ --interactive- Input: PDF, TXT, MD
- Processo: Estrazione testo con Docling e conversione in Markdown semplice
- Output: Documenti processati con metadati
Nota: Processing del documento eseguibile in back office
- Input: Testo processato
- Processo: LangChain SemanticChunker divide il testo in chunks semanticamente coerenti
- Parametri:
percentile,standard_deviation,interquartile - Output: Chunks con boundaries semantiche naturali con limitazioni sui chunk size
Nota: Chunking eseguibile in back office
- Input: Query utente
- Processo: Trasforma la query in altre queries con metodo di decomposizione in sub-queries (di numero {max_transformations}), riformulazione o step-back
- Benefici: Migliora la qualità e la precisione della ricerca
- Output: {max_transformations} queries
- Input: Query utente + indici costruiti
- Processo: Combina ricerca vettoriale (FAISS) e keyword (BM25)
- Formula:
score = α × vector_score + β × bm25_score - Output: Risultati ranked con score fusion
Nota: Indicizzazioni eseguibili in back office
- Input: Query + chunks recuperati
- Processo: Google Gemini genera risposta basata sul contesto
- Output: Risposta strutturata con fonti e confidence
- Input: Query + Risposta LLM
- Processo: Google Gemini genera riassunto basato sul contesto
- Output: Riassunto generato anche salvato in un file json (sovrascrivibile)
graph TD
A["**User input**"] --> B["**Query transformation**<br/>- rewrite<br/>- decomposition<br/>- expansion"]
B --> C["**Fusion retrieval**<br/>Usa le query trasformate per cercare i chunk rilevanti"]
C --> D["**Answer generation**<br/>Prende il prompt con query + contesto<br/>Genera la risposta"]
D --> E["**Summary generation**<br/>Prende la risposta e ne fa un riassunto"]
- Info: Segue il workflow dell'applicativo tramite context management
- Benefici: Aggiunge il tracciamento del workflow dell'applicativo e delle chiamate al LLM
Nota: per utilizzare Langfuse, è necessario avere un account su Langfuse e configurare le API keys in .env
La cartella .claude/ contiene documentazione strutturata per agenti AI (Claude Sonnet/Opus):
| File | Contenuto |
|---|---|
CLAUDE.md |
Overview del progetto e istruzioni principali |
ARCHITECTURE.md |
Architettura del sistema e flusso dati |
API_REFERENCE.md |
Riferimento API per tutti i componenti |
CODEBASE_MAP.md |
Mappa dei file e delle classi |
CONVENTIONS.md |
Convenzioni di codice e stile |
TROUBLESHOOTING.md |
Guida alla risoluzione problemi |