Nello stesso sistema di memoria AI esaminato prima, Memory Vault di Faibrick, accanto alla ricerca vettoriale c'è una seconda promessa: un knowledge graph "integrato". È una parola che evoca molto, e mantiene poco, se non si guarda cosa c'è davvero sotto. Questo scritto serve a capire che cos'è un knowledge graph, come lo si costruisce a diversi livelli di ambizione, quale livello ha scelto Faibrick, e perché gli altri livelli sono migliori. E, per inciso, perché un brain fatto di file curati a mano possa essere un grafo più ricco di uno estratto automaticamente.
Un knowledge graph è una rete: dei nodi, che sono entità del mondo (persone, aziende, progetti, strumenti, concetti), e degli archi, che sono le relazioni tra loro (lavora-per, si-trova-a, ha-fondato, usa). La forza del grafo rispetto alla semplice ricerca semantica è che cattura la struttura: non solo "questi due documenti parlano di cose simili", ma "questa persona ha fondato questa azienda che ha sede in questa città". Permette di rispondere a domande che il retrieval per somiglianza non tocca, come "chi sono tutte le persone collegate a questo progetto" o "attraverso quali passaggi questi due nomi sono connessi".
Costruire un grafo dal testo richiede tre operazioni, in ordine crescente di difficoltà. La prima è il riconoscimento delle entità, in gergo NER: individuare nel testo i nomi propri e classificarli (questo è una persona, questo un'organizzazione, questo un prodotto). La seconda è l'estrazione delle relazioni: capire che tipo di legame unisce due entità, e in che direzione. La terza, la più insidiosa e la più trascurata, è la risoluzione delle entità: capire che "Giobi", "Giobi Fasoli" e "lui" sono la stessa persona, e fondere i nodi. Senza quest'ultima, il grafo si riempie di doppioni e diventa un groviglio.
Il grafo di Memory Vault si costruisce così. Le entità le estrae con spaCy, usando il modello inglese piccolo, che riconosce persone, organizzazioni e prodotti. Le relazioni, invece, non le estrae affatto nel senso proprio: usa la co-occorrenza. Se due entità compaiono nello stesso frammento di testo, disegna tra loro un arco generico chiamato "related_to". Non c'è un tipo di relazione, non c'è una direzione, e non c'è risoluzione delle entità. Il codice stesso lo ammette con onestà, marcando queste come funzionalità future.
È il grado zero del knowledge graph. La co-occorrenza è la baseline che si insegna per prima proprio perché è la più semplice e la più rumorosa: due nomi nello stesso paragrafo non sono necessariamente collegati in modo significativo, e su dati reali questo produce una nuvola di archi in gran parte privi di senso. È un punto di partenza legittimo per un prodotto giovane, ma chiamarlo "knowledge graph baked in" è più marketing che sostanza.
Il salto di qualità sta nel passare dalla co-occorrenza alla vera estrazione di relazioni tipizzate. Sul fronte del riconoscimento entità, modelli come GLiNER hanno reso possibile un NER a categorie aperte e a colpo singolo, molto più flessibile del modello statico di spaCy, e i grandi modelli linguistici fanno lo stesso lavoro con una comprensione contestuale nettamente superiore. Sul fronte delle relazioni, l'estrazione aperta alla Stanford OpenIE, o modelli specializzati come REBEL che generano direttamente triple soggetto-predicato-oggetto, producono archi con un tipo e una direzione: non "A è collegato a B", ma "A ha-fondato B". Un grafo così è interrogabile con senso, non è una nuvola.
Il riferimento più avanzato oggi si chiama GraphRAG, sviluppato da Microsoft. L'idea è usare un grande modello linguistico non per rispondere, ma per costruire il grafo: legge i documenti, estrae entità e relazioni tipizzate, e le scrive nel grafo. Poi applica un algoritmo di rilevamento delle comunità, tipicamente Leiden, per raggruppare il grafo in cluster tematici, e genera un riassunto per ciascuna comunità. Il risultato è che il sistema può rispondere anche a domande "globali", del tipo "quali sono i temi principali di tutto questo corpus", che la ricerca per somiglianza e il grafo a co-occorrenza non possono nemmeno affrontare, perché richiedono una visione d'insieme e non il recupero di qualche frammento.
La differenza tra co-occorrenza e GraphRAG non è di rifinitura: è la differenza tra disegnare una linea perché due parole si sono sfiorate e ricostruire, con un ragionamento, chi ha fatto cosa a chi.
C'è infine un approccio opposto all'estrazione automatica, e vale la pena nominarlo perché è quello che, senza chiamarlo così, produce spesso i grafi migliori: lo schema-first, il grafo curato a mano. È il modello di Wikidata e delle basi di conoscenza aziendali: si definisce uno schema di tipi di entità e di relazioni ammesse, e si popolano i nodi e gli archi in modo esplicito e verificato. La precisione è altissima, perché ogni legame è stato messo lì da qualcuno che sapeva cosa stava facendo. Il prezzo è la scala: non cresce da solo, richiede lavoro umano.
Vale la pena notare che un brain fatto di file markdown con collegamenti espliciti e tipizzati tra le entità è, di fatto, un knowledge graph schema-first. Un collegamento scritto a mano che dice che una certa persona lavora in una certa azienda, o che un progetto usa una certa tecnologia, è una relazione tipizzata e verificata: esattamente ciò che la co-occorrenza automatica non sa produrre. È un grafo più povero di nodi ma molto più ricco di verità. Il limite speculare è che non si estende da solo: la via di crescita naturale è affiancare alla curatela manuale un'estrazione automatica di triple che proponga nuovi archi da validare.
Per completezza, esiste un filone che tratta il grafo stesso come materia da vettorializzare: tecniche come node2vec o TransE rappresentano i nodi come vettori per predire i collegamenti mancanti o misurare la vicinanza strutturale. Servono a uno scopo diverso, il completamento e l'analisi del grafo, più che la memoria conversazionale, ma è utile sapere che esistono e che confluiscono nello stesso ecosistema, insieme ai database a grafo come Neo4j e ai loro linguaggi di interrogazione.
Il grafo di Faibrick è costruito con spaCy piccolo per le entità e la co-occorrenza per le relazioni: la baseline, senza tipi, senza direzione, senza risoluzione delle entità. È il livello più basso, dichiarato onestamente come lavoro in corso, ma venduto con una parola che promette molto di più.
Salendo, i nomi da conoscere sono GLiNER e i grandi modelli linguistici per un riconoscimento entità serio, OpenIE e REBEL per relazioni tipizzate, e soprattutto GraphRAG di Microsoft con il rilevamento di comunità alla Leiden per lo stato dell'arte del grafo costruito da un modello. Sull'altro versante, lo schema-first di Wikidata e dei grafi curati a mano resta imbattibile in precisione, ed è esattamente la forma che assume un brain di file con collegamenti tipizzati. Chi conosce questa scala non si fa impressionare dalle parole "knowledge graph": chiede quali tipi di relazione, con che direzione, e se qualcuno ha risolto i doppioni.