NBMultiRag è un framework open source sviluppato in Python che consente di “chattare” con i propri documenti sfruttando la tecnica del Retrieval-Augmented Generation (RAG). L’interfaccia grafica è disponibile sia in italiano che in inglese, questo strumento permette di gestire documenti di vario tipo, inclusi file multimediali come audio, video e immagini, garantendo al contempo che i dati rimangano esclusivamente sul computer dell’utente.
Indice degli argomenti
Cos’è NBMultiRag
Il 03/marzo/2025 ho lanciato NBMultiRag, seguendo un’esigenza che mi girava in testa da tempo, ossia un chatbot locale che potesse estrarre testo non solo dai canonici file PDF e altri formati di documento, ma anche da scritte presenti nelle immagini, dagli audio e dai video, in modo da formare un RAG (Retrieval Augmented Generation) multimodale.
Forse per mia imperizia, non ho mai trovato un framework che rispondesse a queste necessità, quindi ho pensato, che con l’aiuto delle AI ed un po’ di mia abilità, potevo costruirmelo; la caratteristica più importante è che doveva girare tutto in locale, senza chiamate API a servizi online e soprattutto senza dover inviare documenti su RAG online.
Infine, doveva poter funzionare anche su computer “casalinghi” e non su dei mostri da gaming spinto o super-server.
Con questo spirito e questa idea ho iniziato ed ancora lo miglioro quando mi accorgo di qualcosa e spero sempre nell’aiuto della community che gira nel mondo Open Source.
Quindi che cos’è NBMultiRag? È un framework che integra modelli di linguaggio GPT (LLM) scaricati da OLLAMA, per consentire agli utenti di interagire in modalità chat con i propri documenti, inoltre il sistema, non solo permette di chattare “in bianco” (senza l’uso del RAG), ma anche di creare workspace personalizzati per indicizzare cartelle contenenti documenti eterogenei eseguendo:
- Indicizzazione e suddivisione dei documenti: I documenti vengono frammentati in segmenti (chunk) per essere processati più efficientemente.
- Trascrizione e OCR: I file audio e video vengono trascritti, mentre le immagini sono processate tramite OCR, mentre per i video vengono estratti e descritti 10 frame distribuiti uniformemente.
- Interazione tramite upload: È possibile caricare file singoli per una descrizione puntuale del contenuto.

Figura 1 – Documenti usati per il RAG presi da una challenge online https://cfreds.nist.gov/all/Hexordia/2025MVSCTF
Come funziona NBMultiRag
NBMultiRag sfrutta Streamlit, un framework open source per Python che consente di creare applicazioni web interattive in modo rapido e semplice, che, con poche righe di codice, trasforma gli script Python in applicazioni web condivisibili, facilitando la configurazione e l’interazione con i modelli di intelligenza artificiale.
In sostanza, Streamlit viene impiegato per realizzare una GUI intuitiva, permettendo agli utenti di interagire direttamente con il modello GPT e di gestire l’indicizzazione dei documenti.
Modalità upload di file singoli
Oltre all’indicizzazione di intere cartelle si possono caricare singoli file tramite interfaccia chat, che genera un’analisi e descrizione del contenuto del file, rendendo lo strumento adatto anche per analisi puntuali.
Utilizzo locale e connessione a internet
Un aspetto fondamentale del framework è la gestione dei dati in locale:
- L’accesso a internet è necessario solo al lancio del programma per scaricare i modelli da HuggingFace e Whisper.
- Successivamente, il framework funziona in modalità offline, garantendo la privacy e la sicurezza dei dati dell’utente.
Utilizzo dei modelli scaricati da Huggingface e Whisper
I modelli scaricati da HuggingFace sono il cuore dell’elaborazione del framework e includono:
- Modelli di embedding (BERT): bert-base-italian-uncased per l’italiano e bert-base-uncased per l’inglese, questi modelli trasformano il testo in vettori numerici (embeddings), fondamentali per indicizzare e confrontare il contenuto dei documenti.
- Modelli per l’analisi multimediale: Come Salesforce/blip-image-captioning-base, che permette di descrivere il contenuto delle immagini e di supportare l’analisi dei video.
Questi modelli sono utilizzati per:
- Generare rappresentazioni semantiche dei documenti.
- Fornire al sistema un contesto ricco per generare risposte accurate e contestualizzate.
Mentre i modelli Whisper servono per la trascrizione delle tracce audio, quindi da speech-to-text.
Segmentazione dei documenti: chunk_size e chunk_overlap e temperatura
Per gestire testi lunghi e garantire una buona qualità dell’indicizzazione, il sistema utilizza due parametri chiave:
- chunk_size:
Definisce la dimensione dei segmenti (chunk) in cui un documento viene suddiviso, che consente di processare il testo in parti più piccole, rendendolo gestibile per i modelli di embedding. - chunk_overlap:
Specifica il numero di token o caratteri che devono sovrapporsi tra due chunk consecutivi, questo assicura che le informazioni critiche presenti al confine tra i chunk non vengano perse, mantenendo la continuità contestuale.
Questi parametri vanno calibrati attentamente per garantire che ogni segmento sia sufficientemente autonomo da poter essere analizzato correttamente, ma al contempo connesso semanticamente agli altri.
La Temperatura è il parametro che serve a diminuire o ad aumentare la “fantasia” nelle risposte dell’LLM, condizionando le probabilità di scelta delle parole, bassa implica scegliere le parole con maggior probabilità e quindi più attinenti al contesto, alta invece porta il modello ad una maggiore creatività, ma può esser meno attinente e coerente al contesto.
Parametri di retrieval: “numero di documenti rilevanti nel contesto” e “numero di risultati nella ricerca”
Durante la fase di interrogazione vengono utilizzati due ulteriori parametri per ottimizzare il recupero delle informazioni:
- Numero di documenti rilevanti nel contesto:
Questo parametro determina la quantità totale di contenuto (misurata in token o in “pezzi di documento”) che viene incorporata nel prompt inviato al modello GPT.
Un valore elevato, ad esempio 700, consente di fornire al modello un contesto molto ricco, migliorando la qualità della risposta ed è importante bilanciare questo valore con il limite massimo di token che il modello può gestire. Numero di risultati nella ricerca:
Questo parametro stabilisce quanti chunk (o segmenti di documenti) vengono inizialmente restituiti dalla fase di ricerca, un numero ridotto (ad esempio, 20) aiuta
a filtrare i risultati, garantendo che vengano selezionati solo i segmenti più pertinenti prima di essere ulteriormente integrati nel contesto della query.
Requisiti e installazione
Requisiti software
- Python 3.12.4:
NBMultiRag è stato sviluppato su questa versione. - Tesseract:
Essenziale per l’esecuzione dell’OCR. Durante l’installazione, è consigliabile abilitare le lingue italiano ed inglese. - Streamlit:
Utilizzato per creare l’interfaccia grafica interattiva. - Ollama: per gestire ed interrogare i modelli di IA.
Istruzioni per sistemi windows
- Installazione:
Eseguire il file install.bat e seguire i prompt per il download dei modelli necessari. - Creazione del Workspace:
Dopo l’avvio del framework, creare un workspace personalizzato configurando l’embedder e indicando la cartella contenente i documenti da indicizzare. - Setup dell’Ambiente Python:
- Tkinter, in Windows il pacchetto arriva con l’istallazione di Python (https://www.python.org/ )
- Creare una cartella dedicata a NBMultiRag e copiare il contenuto della repository.
- Creare un ambiente virtuale:
python -m venv nbmultirag - Attivare l’environment (su Windows: nbmultirag\Scripts\activate).
- Installare le dipendenze:
pip install -r requirements.txt - Avviare l’applicazione con:
streamlit run nbmultirag.py
Per i sistemi basati su Linux (non testato)
- Istallare Tesseract (/usr/bin/tesseract)
- Istallare Ollama
- Istallare TkInter per la vostra distribuzione
Un riepilogo delle caratteristiche chiave di NBMultiRag
- Multilinguismo: disponibile in italiano e inglese.
- Supporto multimediale: oltre ai documenti testuali, sono gestiti anche i contenuti audio, video e immagini, grazie alle capacità OCR, di trascrizione audio e descrizione dei video.
- Interazione in modalità chat: l’utente può interagire direttamente con il modello GPT tramite una GUI intuitiva.
- Esecuzione locale: i dati vengono processati sul computer dell’utente, garantendo elevati standard di privacy e sicurezza.
- Integrazione con HuggingFace: i modelli scaricati vengono utilizzati per l’estrazione di embeddings e per il captioning delle immagini, migliorando la qualità dell’analisi e del retrieval.
- Flessibilità nei parametri di indicizzazione e retrieval:
- chunk_size e chunk_overlap permettono di ottimizzare la suddivisione dei documenti, mantenendo il contesto e facilitando il processing.
- I parametri “Numero di documenti rilevanti nel contesto” e “Numero di risultati nella ricerca” consentono di bilanciare la quantità di informazioni fornite al modello e di selezionare i risultati più pertinenti.
Scenari d’uso
- Ambiti professionali: ideale per analisi di documenti legali, accademici o aziendali, dove è necessario recuperare informazioni da grandi moli di dati.
- Ricerca e sperimentazione: grazie alla natura open source e alla possibilità di personalizzazione, NBMultiRag è uno strumento, forse ancora acerbo, interessante per chi desidera esplorare applicazioni avanzate nel campo dell’intelligenza artificiale.
- Gestione di contenuti multimediali: la capacità di trascrivere audio e video, eseguire OCR sulle immagini e descrivere frame video lo rende utile in ambiti che richiedono l’analisi di dati multimodali.

Conclusioni
Spero di esser giunto vicino alla mia idea iniziale, considerando che è stato un lavoro svolto soltanto da me e con l’”aiutino” delle AI online, ma spero che sia d’ispirazione per baldi sviluppatori, che possano aiutare a far crescere il progetto, anche se con la velocità evolutiva che c’è in questo settore, nulla mi vieta di pensare che tutto diverrà obsoleto in pochi mesi, è un bene? È un male? Non so più che pensare, perché non avevo mai assistito ad una rapidità simile, ogni giorno escono modelli, idee, approcci sempre diversi ed evoluti e mi fa pensare ad una vera innovazione e rivoluzione nell’informatica e moltissimo viene dal mondo open source, quindi bene così!
Per maggiori dettagli e per consultare il repository ufficiale, visita:
- GitHub: https://github.com/nannib/nbmultirag
- Video tutorial: https://www.youtube.com/watch?v=56PY07Y_Ve8
NBMultiRag, distribuito sotto licenza GPL-3.0, è un esempio concreto di come l’innovazione open source possa promuovere un uso consapevole e sicuro dell’intelligenza artificiale in ambito locale.