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-evaluator
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
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_here
python quick_test.py
python 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