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
venv\Scripts\activatepip install -r requirements.txtCrea 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