Hybrid Search, HyDE e grafi: costruire un RAG che non dimentica come pensi
“Una biblioteca è pensata come un labirinto, e il labirinto è un simbolo di uomo perplesso.”
Jorge Luis Borges, Finzioni
Scriveva Gregory Bateson che il territorio non può mai essere colto nella sua interezza e che approssimare troppo la mappa al territorio – aumentando la definizione della mappa – è solo un modo per complicare le cose. Chiunque si sia mai perso in un labirinto di appunti, libri e idee sa di cosa stiamo parlando: avere le informazioni non significa saperle ritrovare. Tantomeno saperle connettere. È esattamente il problema che stavamo cercando di risolvere quando abbiamo cominciato a lavorare all'architettura AI di Labyrinthum, il nostro sistema personale di gestione della conoscenza. E la risposta, almeno la più interessante che abbiamo trovato, passa per un'architettura RAG (Retrieval-Augmented Generation) che va parecchio oltre lo standard.
RAG: di che cosa stiamo parlando? Prima di tutto, due parole per chi non ha ancora familiarità con il termine. Un sistema RAG è un'architettura in cui un modello linguistico (LLM) non risponde a memoria, ma recupera dinamicamente i frammenti di testo più pertinenti dalla propria base documentale e li usa come contesto per generare la risposta. Il risultato è un'AI che parla dei tuoi appunti, dei tuoi libri, delle tue idee e non di generici contenuti di addestramento. In teoria è semplice. In pratica, il diavolo si nasconde nella fase di retrieval: come fai a trovare davvero i pezzi giusti, tra migliaia di chunk di testo, nel momento in cui servono?
Il retrieval che abbiamo costruito. La risposta standard è: con gli embedding vettoriali. Si trasforma ogni frammento di testo in un vettore numerico, si fa lo stesso con la query dell'utente e poi si cercano i vettori più simili. Funziona discretamente, ma ha un limite evidente: cattura la somiglianza semantica tra testi, non necessariamente la rilevanza rispetto alla domanda. Noi abbiamo costruito qualcosa di più stratificato. Hybrid Search con Reciprocal Rank Fusion. Affianchiamo alla ricerca vettoriale una ricerca full-text tradizionale (BM25), quella che risponde alle keyword esatte. I due ranking vengono poi fusi con l'algoritmo RRF: non si somma e basta, si pondera la posizione reciproca di ogni risultato in ciascuna classifica. La matematica è semplice, il risultato è robusto: chi emerge bene in entrambi i canali sale in cima, chi è fortissimo in uno ma assente nell'altro viene comunque considerato.
HyDE — Hypothetical Document Embeddings. C'è un'asimmetria strutturale fastidiosa nel RAG classico: la query dell'utente può essere breve (dieci, quindici parole), i documenti indicizzati sono lunghi e densi. Gli embedding vettoriali, allenati su testo, faticano a costruire un ponte stabile tra i due. HyDE risolve il problema in modo elegante: prima di cercare, l'LLM genera un documento ipotetico che risponderebbe alla domanda. Si usa quel documento — ben più ricco semanticamente della query originale — per guidare la ricerca vettoriale. La keyword search, invece, resta ancorata alla query originale dell'utente, perché le parole esatte contano ancora.
LLM Reranking Listwise. Il retrieval ibrido restituisce buoni candidati, ma non necessariamente nell'ordine giusto. Invece di affidarci a un cross-encoder dedicato o fare decine di chiamate separate al modello, impachettiamo i primi venti risultati in un unico prompt e chiediamo all'LLM di riordinarli per rilevanza, restituendo anche una motivazione testuale per ciascuno. Il tutto con un timeout di sicurezza: se il reranker è lento o fallisce, il sistema torna silenziosamente all'ordinamento matematico originale precedentemente descritto. Nessun blocco, nessun errore visibile all'utente.
Il differenziatore vero: il grafo dei concetti. Fin qui, siamo nel territorio del RAG ben fatto ma non ancora sorprendente. Il salto qualitativo arriva con il Graph Retrieval. L'idea è questa: mentre usi Labyrinthum, costruisci una rete di concetti, li crei, li colleghi tra loro, li associ agli appunti e ai libri che ritieni pertinenti. Quella rete è una struttura esplicita di conoscenza curata da te: non inferita da un modello, non generata automaticamente. Contiene segnali che nessun embedding vettoriale può replicare, perché riflette le tue associazioni mentali, i tuoi percorsi di lettura, le tue intuizioni. Quando fai una domanda, dopo il retrieval ibrido standard, il sistema identifica i concetti più pertinenti emersi dalla ricerca e li usa come semi per espandere il grafo: naviga le relazioni tra concetti e risale ai documenti che tu hai collegato a quei concetti.
Documenti che la somiglianza testuale avrebbe magari ignorato. Il risultato concreto è duplice: i documenti già trovati dall'Hybrid Search che hanno anche un legame nel grafo vengono promossi in classifica; i documenti nuovi che emergono solo dal grafo vengono aggiunti in coda al pool. La RAG diventa letteralmente "cerca i documenti che l'utente ha dichiarato pertinenti a questi concetti", un segnale molto più forte della sola vicinanza vettoriale.
Privacy, trasparenza e il diritto di capire. Un sistema che ragiona sui tuoi dati personali ha anche la responsabilità di essere trasparente su come lo fa. Abbiamo preso questa responsabilità sul serio. Ogni chiamata all'AI viene loggata con tutti i metadati rilevanti: quale provider è stato usato, se i dati hanno lasciato il perimetro locale, quanti chunk sono stati recuperati, se HyDE e il reranker sono intervenuti. Ogni fonte citata in una risposta espone i propri segnali di ranking (score vettoriale, posizione BM25, score RRF, motivazione del reranker) tramite un pannello di spiegabilità. C'è anche un'analisi controfattuale: cosa sarebbe cambiato nella risposta se avessimo disattivato HyDE? E se avessimo tolto il grafo? Il sistema funziona completamente offline con modelli locali via Ollama — nulla esce dal proprio server — oppure in cloud con Gemini (o altri provider), con consenso esplicito richiesto prima di qualunque invio di dati. I contenuti marcati come sensibili non raggiungono mai il cloud, indipendentemente dalla configurazione. È, in una parola, un RAG che non solo risponde bene, ma sa spiegare perché.
Quello che abbiamo imparato. Costruire un sistema del genere ci ha insegnato una cosa sopra tutte: il retrieval non è un problema tecnico risolto una volta per tutte. È un equilibrio continuo tra segnali diversi: matematici, lessicali, relazionali e l'architettura che li orchestra fa tutta la differenza. Labyrinthum è ancora in evoluzione. Ma il labirinto, almeno, ha cominciato a conoscere la sua mappa.
Se siete curiosi dell'architettura tecnica completa, siamo disponibili a condividere ulteriori dettagli. Nel frattempo, continuate a seguirci su verdelab.info!
Jorge Luis Borges, Finzioni
Scriveva Gregory Bateson che il territorio non può mai essere colto nella sua interezza e che approssimare troppo la mappa al territorio – aumentando la definizione della mappa – è solo un modo per complicare le cose. Chiunque si sia mai perso in un labirinto di appunti, libri e idee sa di cosa stiamo parlando: avere le informazioni non significa saperle ritrovare. Tantomeno saperle connettere. È esattamente il problema che stavamo cercando di risolvere quando abbiamo cominciato a lavorare all'architettura AI di Labyrinthum, il nostro sistema personale di gestione della conoscenza. E la risposta, almeno la più interessante che abbiamo trovato, passa per un'architettura RAG (Retrieval-Augmented Generation) che va parecchio oltre lo standard.
RAG: di che cosa stiamo parlando? Prima di tutto, due parole per chi non ha ancora familiarità con il termine. Un sistema RAG è un'architettura in cui un modello linguistico (LLM) non risponde a memoria, ma recupera dinamicamente i frammenti di testo più pertinenti dalla propria base documentale e li usa come contesto per generare la risposta. Il risultato è un'AI che parla dei tuoi appunti, dei tuoi libri, delle tue idee e non di generici contenuti di addestramento. In teoria è semplice. In pratica, il diavolo si nasconde nella fase di retrieval: come fai a trovare davvero i pezzi giusti, tra migliaia di chunk di testo, nel momento in cui servono?
Il retrieval che abbiamo costruito. La risposta standard è: con gli embedding vettoriali. Si trasforma ogni frammento di testo in un vettore numerico, si fa lo stesso con la query dell'utente e poi si cercano i vettori più simili. Funziona discretamente, ma ha un limite evidente: cattura la somiglianza semantica tra testi, non necessariamente la rilevanza rispetto alla domanda. Noi abbiamo costruito qualcosa di più stratificato. Hybrid Search con Reciprocal Rank Fusion. Affianchiamo alla ricerca vettoriale una ricerca full-text tradizionale (BM25), quella che risponde alle keyword esatte. I due ranking vengono poi fusi con l'algoritmo RRF: non si somma e basta, si pondera la posizione reciproca di ogni risultato in ciascuna classifica. La matematica è semplice, il risultato è robusto: chi emerge bene in entrambi i canali sale in cima, chi è fortissimo in uno ma assente nell'altro viene comunque considerato.
HyDE — Hypothetical Document Embeddings. C'è un'asimmetria strutturale fastidiosa nel RAG classico: la query dell'utente può essere breve (dieci, quindici parole), i documenti indicizzati sono lunghi e densi. Gli embedding vettoriali, allenati su testo, faticano a costruire un ponte stabile tra i due. HyDE risolve il problema in modo elegante: prima di cercare, l'LLM genera un documento ipotetico che risponderebbe alla domanda. Si usa quel documento — ben più ricco semanticamente della query originale — per guidare la ricerca vettoriale. La keyword search, invece, resta ancorata alla query originale dell'utente, perché le parole esatte contano ancora.
LLM Reranking Listwise. Il retrieval ibrido restituisce buoni candidati, ma non necessariamente nell'ordine giusto. Invece di affidarci a un cross-encoder dedicato o fare decine di chiamate separate al modello, impachettiamo i primi venti risultati in un unico prompt e chiediamo all'LLM di riordinarli per rilevanza, restituendo anche una motivazione testuale per ciascuno. Il tutto con un timeout di sicurezza: se il reranker è lento o fallisce, il sistema torna silenziosamente all'ordinamento matematico originale precedentemente descritto. Nessun blocco, nessun errore visibile all'utente.
Il differenziatore vero: il grafo dei concetti. Fin qui, siamo nel territorio del RAG ben fatto ma non ancora sorprendente. Il salto qualitativo arriva con il Graph Retrieval. L'idea è questa: mentre usi Labyrinthum, costruisci una rete di concetti, li crei, li colleghi tra loro, li associ agli appunti e ai libri che ritieni pertinenti. Quella rete è una struttura esplicita di conoscenza curata da te: non inferita da un modello, non generata automaticamente. Contiene segnali che nessun embedding vettoriale può replicare, perché riflette le tue associazioni mentali, i tuoi percorsi di lettura, le tue intuizioni. Quando fai una domanda, dopo il retrieval ibrido standard, il sistema identifica i concetti più pertinenti emersi dalla ricerca e li usa come semi per espandere il grafo: naviga le relazioni tra concetti e risale ai documenti che tu hai collegato a quei concetti.
Documenti che la somiglianza testuale avrebbe magari ignorato. Il risultato concreto è duplice: i documenti già trovati dall'Hybrid Search che hanno anche un legame nel grafo vengono promossi in classifica; i documenti nuovi che emergono solo dal grafo vengono aggiunti in coda al pool. La RAG diventa letteralmente "cerca i documenti che l'utente ha dichiarato pertinenti a questi concetti", un segnale molto più forte della sola vicinanza vettoriale.
Privacy, trasparenza e il diritto di capire. Un sistema che ragiona sui tuoi dati personali ha anche la responsabilità di essere trasparente su come lo fa. Abbiamo preso questa responsabilità sul serio. Ogni chiamata all'AI viene loggata con tutti i metadati rilevanti: quale provider è stato usato, se i dati hanno lasciato il perimetro locale, quanti chunk sono stati recuperati, se HyDE e il reranker sono intervenuti. Ogni fonte citata in una risposta espone i propri segnali di ranking (score vettoriale, posizione BM25, score RRF, motivazione del reranker) tramite un pannello di spiegabilità. C'è anche un'analisi controfattuale: cosa sarebbe cambiato nella risposta se avessimo disattivato HyDE? E se avessimo tolto il grafo? Il sistema funziona completamente offline con modelli locali via Ollama — nulla esce dal proprio server — oppure in cloud con Gemini (o altri provider), con consenso esplicito richiesto prima di qualunque invio di dati. I contenuti marcati come sensibili non raggiungono mai il cloud, indipendentemente dalla configurazione. È, in una parola, un RAG che non solo risponde bene, ma sa spiegare perché.
Quello che abbiamo imparato. Costruire un sistema del genere ci ha insegnato una cosa sopra tutte: il retrieval non è un problema tecnico risolto una volta per tutte. È un equilibrio continuo tra segnali diversi: matematici, lessicali, relazionali e l'architettura che li orchestra fa tutta la differenza. Labyrinthum è ancora in evoluzione. Ma il labirinto, almeno, ha cominciato a conoscere la sua mappa.
Se siete curiosi dell'architettura tecnica completa, siamo disponibili a condividere ulteriori dettagli. Nel frattempo, continuate a seguirci su verdelab.info!

Commenti
Posta un commento