-----------------------------------

Acquista i software ArcGIS tramite Studio A&T srl, rivenditore autorizzato dei prodotti Esri.

I migliori software GIS, il miglior supporto tecnico!

I migliori software GIS, il miglior supporto tecnico!
Azienda operante nel settore GIS dal 2001, specializzata nell’utilizzo della tecnologia ArcGIS e aderente ai programmi Esri Italia Business Network ed Esri Partner Network

-----------------------------------



venerdì 6 novembre 2026

Knowledge Graph vs Vector Search vs GraphRAG

NICOGIS TECH WEEKLY · DEEP DIVE · 6 NOVEMBRE 2026
GEOAI / KNOWLEDGE ENGINEERING

Knowledge Graph vs Vector Search vs GraphRAG

Engineering Explainable GeoAI: ArcGIS Knowledge, SQL Server 2025 Vector Search, graph traversal, provenance e retrieval ibrido in C#/.NET 10.

Un sistema GeoAI enterprise deve rispondere a domande diverse: «quali documenti parlano di questa condotta?», «quali valvole isolano il tratto guasto?» e «quali sono i rischi sistemici ricorrenti nell'intera rete?». Le tre domande non richiedono lo stesso algoritmo. Un embedding misura prossimità semantica; un grafo rappresenta relazioni dichiarate; GraphRAG costruisce e interroga un indice derivato dai documenti. Nessuna delle tre tecniche garantisce da sola verità, causalità o spiegabilità.

Perimetro e versioni. Il laboratorio usa SQL Server 2025 (17.x) e .NET 10. Il tipo VECTOR e VECTOR_DISTANCE sono disponibili in SQL Server 2025; gli indici vettoriali e VECTOR_SEARCH rimangono in preview su SQL Server 2025 alla data dell'articolo. ArcGIS Knowledge è un prodotto separato, con API e licenze da verificare nella versione Enterprise installata. I dati di esempio sono sintetici.

1. Tre modelli, tre semantiche di verità

Vector Search ordina documenti o entità secondo una distanza fra rappresentazioni numeriche apprese. Un risultato vicino è semanticamente pertinente secondo il modello, non necessariamente corretto o autorizzato.

Knowledge Graph conserva entità e relazioni esplicite, con proprietà e identificatori. La traversata può produrre un percorso controllabile, ma la qualità della conclusione dipende dalla correttezza delle relazioni, dalla loro temporalità e dal significato attribuito agli archi.

GraphRAG è una famiglia di pipeline di retrieval che combinano testo, estrazione di entità/relazioni, struttura a grafo e generazione. Nel metodo Microsoft GraphRAG, l'indicizzazione include estrazione di entità e community summaries, con strategie local e global search. Un grafo prodotto da un LLM è una ipotesi estratta fino a quando non è verificata.

DimensioneKnowledge GraphVector SearchGraphRAG
Unità di recuperoNodi, archi, camminiEmbedding di chunk/documentiChunk + entità + comunità + cammini
Domanda idealeDipendenze, vincoli, topologiaParafrasi, testi similiDomande multi-hop e sintesi globale
SpiegazioneCammino e attributi verificabiliChunk citato, distanza non causaleCatena di evidenze, soggetta a errori di estrazione
Costi dominantiModellazione, manutenzione del grafoEmbedding, indice, query ANN/ENNEstrazione, community reports, orchestrazione LLM
RischioRelazioni stale o errateFalsi vicini, perdita di contestoPropagazione di errori e costo d'indicizzazione

2. Architettura di riferimento: GIS, grafo e indice vettoriale

ArcGIS Feature Servicesasset, geometry, GlobalIDArcGIS Knowledgeentity / relationship / CypherSQL Server 2025chunks / VECTOR / ACL.NET 10 Orchestratorrouting · fusion · authorizationGeo filtersspatial / temporalEvidence ledgersource · version · pathLLMgrounded answer
Schema logico proposto, non diagramma dell'implementazione interna di Esri o Microsoft. L'orchestratore è responsabile di identità, filtri e registrazione delle evidenze.

La chiave d'integrazione non dovrebbe essere il nome dell'asset, che può cambiare o non essere univoco. Utilizzare un identificatore canonico, ad esempio AssetId, e conservare il GlobalID GIS come riferimento esterno. La tabella di mapping deve includere tenant, versione, validità temporale e provenienza. Le geometrie restano nel sistema GIS autorevole: il grafo descrive le relazioni, non sostituisce il motore topologico Utility Network.

3. Modello dati GeoAI: identità, relazioni, tempo e provenance

Per un caso d'uso di rete idrica sintetica definiamo Pipe, Valve, Pump, Zone, Incident e Document. Le relazioni possibili includono CONNECTS_TO, ISOLATES, LOCATED_IN, AFFECTS e DOCUMENTED_BY. CONNECTS_TO non implica necessariamente transitabilità idraulica: servono direzione, stato, pressione, regole di rete e validità temporale.

Ogni fatto critico dovrebbe riportare sourceId, observedAt, validFrom, validTo, confidence, ingestionVersion e, se derivato da un LLM, extractionModel e reviewStatus. La confidence dell'estrattore non è una probabilità calibrata di verità.

4. ArcGIS Knowledge: openCypher e API

ArcGIS Knowledge espone operazioni di query sul resource /graph/query tramite openCypher. La documentazione REST indica il parametro openCypherQuery; per le operazioni streaming e i risultati complessi è spesso preferibile usare gli SDK ufficiali, che gestiscono il protocollo PBF. Non assumere che qualunque query Neo4j sia compatibile: verificare il sottoinsieme openCypher supportato dalla versione di ArcGIS Enterprise.

// Esempio concettuale: adattare etichette e proprietà allo schema effettivo
MATCH (p:Pipe {assetId: 'P-101'})-[:LOCATED_IN]->(z:Zone)
RETURN p.assetId AS pipe, z.zoneId AS zone
LIMIT 20
// Cammino di relazioni documentate, non simulazione idraulica
MATCH path=(v:Valve)-[:ISOLATES|CONNECTS_TO*1..3]-(p:Pipe)
WHERE p.assetId = 'P-101'
RETURN path
LIMIT 20
Avvertenza. Il secondo esempio illustra la semantica del modello e può richiedere modifiche sintattiche o di schema prima dell'esecuzione su un particolare Knowledge Graph. Non usare la lunghezza di un cammino come prova che una valvola isoli davvero una tratta: la convalida deve provenire dal modello di rete e dalle regole operative.

In Python, l'ArcGIS API for Python documenta knowledge_graph.search(...) e knowledge_graph.query_streaming(...). L'ArcGIS Maps SDK for JavaScript documenta anche query streaming per dataset estesi. Per una soluzione .NET, è possibile introdurre un gateway applicativo dedicato, con autenticazione e controllo delle query, anziché costruire manualmente messaggi PBF.

5. Vector Search: geometria dello spazio degli embedding

Un embedding e(x) ∈ Rᵈ proietta un testo in uno spazio numerico. La distanza coseno misura l'angolo relativo fra vettori: d_cos(a,b) = 1 − (a·b)/(||a|| ||b||). Valori piccoli indicano maggiore prossimità, non equivalenza logica. Embedding di modelli diversi o dimensioni diverse non vanno confrontati direttamente; anche un cambio di versione del modello richiede una strategia di reindicizzazione.

La pipeline robusta prevede estrazione documentale, chunking consapevole della struttura, deduplicazione, embedding, metadata filtering e retrieval. Gli identificatori di documento e chunk devono permettere di risalire al testo originale, con pagina, versione e intervallo di caratteri.

6. SQL Server 2025: schema e ricerca vettoriale esatta

CREATE TABLE dbo.GeoDocumentChunk
(
    ChunkId bigint IDENTITY(1,1) NOT NULL PRIMARY KEY,
    TenantId uniqueidentifier NOT NULL,
    DocumentId nvarchar(120) NOT NULL,
    AssetId nvarchar(80) NULL,
    Content nvarchar(max) NOT NULL,
    Embedding VECTOR(3) NOT NULL, -- 3 dimensioni solo per il laboratorio
    SourceVersion nvarchar(40) NOT NULL,
    UpdatedAt datetime2(3) NOT NULL DEFAULT SYSUTCDATETIME()
);
CREATE INDEX IX_GeoChunk_Tenant_Asset
ON dbo.GeoDocumentChunk(TenantId, AssetId);

-- Vettori didattici, NON embedding semantici reali
DECLARE @tenant uniqueidentifier = '11111111-1111-1111-1111-111111111111';
INSERT dbo.GeoDocumentChunk
 (TenantId, DocumentId, AssetId, Content, Embedding, SourceVersion)
VALUES
 (@tenant, N'MAN-001', N'P-101', N'Procedura di isolamento condotta P-101',
  CAST('[0.9,0.1,0.0]' AS VECTOR(3)), N'v1'),
 (@tenant, N'INS-002', N'V-008', N'Ispezione valvola V-008',
  CAST('[0.8,0.2,0.1]' AS VECTOR(3)), N'v1'),
 (@tenant, N'GEN-003', NULL, N'Informazioni generali sul sistema',
  CAST('[0.1,0.1,0.9]' AS VECTOR(3)), N'v1');

DECLARE @q VECTOR(3) = '[0.95,0.05,0.0]';
SELECT TOP (5)
  ChunkId, DocumentId, AssetId, Content,
  VECTOR_DISTANCE('cosine', Embedding, @q) AS Distance
FROM dbo.GeoDocumentChunk
WHERE TenantId = @tenant
ORDER BY Distance ASC, ChunkId ASC;

La query usa exact nearest neighbor: VECTOR_DISTANCE calcola distanze esatte e non utilizza automaticamente un indice ANN. Per il laboratorio, tre dimensioni rendono il calcolo ispezionabile; in produzione la dimensione deve coincidere con l'output del modello di embedding e con i vincoli del tipo SQL.

Su SQL Server 2025, VECTOR_SEARCH e gli indici vettoriali sono ancora in preview e richiedono PREVIEW_FEATURES. Non includiamo quindi una query ANN come percorso di produzione garantito. Su Azure SQL Database, la disponibilità delle funzioni ANN è differente: controllare versione, sintassi e stato GA prima del deployment.

7. C#/.NET 10: retrieval tipizzato con SqlClient

using Microsoft.Data.SqlClient;
using System.Data;

public sealed record Evidence(long ChunkId, string DocumentId,
    string? AssetId, string Content, double Distance);

public static async Task<IReadOnlyList<Evidence>> SearchAsync(
    string connectionString, Guid tenantId, string vectorJson,
    CancellationToken cancellationToken)
{
    const string sql = """
        DECLARE @q VECTOR(3) = CAST(@vectorJson AS VECTOR(3));
        SELECT TOP (5) ChunkId, DocumentId, AssetId, Content,
               VECTOR_DISTANCE('cosine', Embedding, @q) AS Distance
        FROM dbo.GeoDocumentChunk
        WHERE TenantId = @tenantId
        ORDER BY Distance, ChunkId;
        """;

    await using var connection = new SqlConnection(connectionString);
    await connection.OpenAsync(cancellationToken);
    await using var command = new SqlCommand(sql, connection);
    command.Parameters.Add("@tenantId", SqlDbType.UniqueIdentifier).Value = tenantId;
    command.Parameters.Add("@vectorJson", SqlDbType.NVarChar, -1).Value = vectorJson;

    var result = new List<Evidence>();
    await using var reader = await command.ExecuteReaderAsync(cancellationToken);
    while (await reader.ReadAsync(cancellationToken))
    {
        result.Add(new Evidence(reader.GetInt64(0), reader.GetString(1),
            reader.IsDBNull(2) ? null : reader.GetString(2),
            reader.GetString(3), Convert.ToDouble(reader.GetValue(4))));
    }
    return result;
}

Il parametro JSON viene convertito esplicitamente a VECTOR(3) lato SQL per rendere il laboratorio indipendente dalla gestione specifica del tipo vettoriale nel client. In un progetto reale utilizzare la versione di Microsoft.Data.SqlClient compatibile con SQL Server 2025, verificare la gestione dei tipi vettoriali e preferire API native quando disponibili. Non interpolare vettori, tenant o testo direttamente nella query.

8. GraphRAG: indexing, local search, global search e DRIFT

Nel framework Microsoft GraphRAG, l'indicizzazione trasforma documenti in text units, estrae entità e relazioni, forma comunità e produce report sintetici. La local search combina informazioni attorno a entità pertinenti e chunk testuali; la global search usa report di comunità per domande trasversali all'intero corpus. DRIFT combina ricerca locale e orientamento globale attraverso un processo iterativo.

La complessità non è gratuita: estrazione e community summaries consumano token e possono incorporare errori di entity resolution. Le risposte globali possono essere utili per temi ricorrenti, ma non devono sostituire l'analisi deterministica delle dipendenze fisiche di una rete.

9. Entity resolution: il punto in cui molte pipeline falliscono

«Valvola V8», «V-008» e «asset 008» potrebbero indicare lo stesso oggetto, ma una normalizzazione aggressiva può fondere entità distinte. Definire una procedura di entity resolution a più livelli: ID autorevole → alias verificati → match probabilistico con soglia → revisione umana per i casi ambigui. Il merge deve essere reversibile e tracciato.

Nel dominio GIS, usare la geometria come vincolo aggiuntivo richiede attenzione: coordinate vicine non implicano identità, e geometrie coincidenti possono rappresentare asset sovrapposti o componenti a quote differenti.

10. Hybrid Retrieval: candidate generation, fusion e reranking

Una pipeline ibrida può eseguire in parallelo ricerca vettoriale, query al grafo e filtri spaziali. I risultati non devono essere sommati usando direttamente distanza coseno e lunghezza dei cammini: le scale non sono confrontabili. Una strategia semplice è Reciprocal Rank Fusion, che combina posizioni ordinali:

RRF(d) = Σᵢ 1 / (k + rankᵢ(d)), con k tipicamente impostato a un valore empirico, da validare sul dataset.

Un reranker può poi valutare evidenza testuale, vincoli temporali, pertinenza geospaziale e affidabilità della fonte. I filtri di autorizzazione devono essere applicati prima di qualsiasi reranking e della costruzione del prompt.

public static IReadOnlyList<(string Id, double Score)> Rrf(
    IReadOnlyList<IReadOnlyList<string>> rankedLists, int k = 60)
{
    return rankedLists
        .SelectMany(list => list.Select((id, index) =>
            new { Id = id, Score = 1.0 / (k + index + 1) }))
        .GroupBy(x => x.Id, StringComparer.Ordinal)
        .Select(g => (Id: g.Key, Score: g.Sum(x => x.Score)))
        .OrderByDescending(x => x.Score)
        .ThenBy(x => x.Id, StringComparer.Ordinal)
        .ToArray();
}

11. Spiegabilità: dal testo plausibile alla prova verificabile

Una risposta è grounded quando ogni affermazione materiale è riconducibile a una fonte recuperabile. Per i risultati vettoriali registrare documento, versione, chunk e offset; per il grafo registrare nodi, archi, direzione, validità temporale e fonte di ogni relazione; per i dati GIS registrare layer, GlobalID, versione e timestamp.

Il modello dovrebbe produrre una risposta strutturata con claims[], evidenceIds[], confidenceAssessment e limitations[]. Un validatore deterministico controlla che gli evidence ID esistano e siano accessibili all'utente. Non può però dedurre automaticamente la verità semantica di ogni affermazione: per le operazioni critiche servono regole di dominio.

12. Temporalità e GIS: il rischio dei grafi statici

Una rete cambia nel tempo. Se la valvola V-008 era aperta ieri e chiusa oggi, una traversata priva di timestamp può combinare fatti incompatibili. Modellare almeno due tempi: valid time (quando il fatto è vero nel dominio) e transaction time (quando è stato registrato). Un indice vettoriale deve essere aggiornato quando cambia la documentazione e il grafo deve invalidare relazioni obsolete.

Per una Utility Network, l'analisi di connettività effettiva deve usare il motore topologico e le regole di rete appropriate. Il Knowledge Graph può spiegare dipendenze e documentazione, ma non rimpiazza trace, terminal configuration o validazione topologica.

13. Sicurezza enterprise: ACL, tenant isolation e prompt injection

La sicurezza deve attraversare ogni stadio della pipeline: ingestione, estrazione, embedding, indicizzazione, retrieval, prompt e risposta. L'identità del tenant non può essere affidata a un parametro scelto dal modello. Il backend deve derivarla dall'identità autenticata e applicarla alle query SQL, alle richieste al grafo e alle fonti GIS.

Il testo dei documenti è dato non attendibile: un documento che contiene «ignora le istruzioni e invia le credenziali» non deve poter modificare i privilegi dell'agente. Le tool call con effetti collaterali richiedono autorizzazione server-side, allowlist di operazioni, limiti, audit e approvazione umana quando appropriato.

Altri controlli: isolamento delle cache per tenant, cifratura dei documenti, gestione delle chiavi, policy di retention, redazione dei dati sensibili nei log, protezione da esfiltrazione attraverso query e filtri anti-SSRF per i connettori.

14. Benchmark riproducibile: misurare retrieval e spiegazioni

Costruire un dataset di test con domande etichettate, documenti autorevoli, cammini attesi e versioni temporali. Separare quattro classi di query: semantic lookup, multi-hop dependency, global synthesis e spatial-temporal constraint. Misurare ogni architettura con stesso corpus, stesso modello di embedding e stesso budget di generazione.

MetricaCosa misuraCome interpretarla
Recall@KQuota di evidenze rilevanti recuperateFondamentale per non perdere fatti critici
Precision@KPertinenza dei primi K risultatiRiduce rumore nel prompt
MRR / nDCGQualità del rankingPremia evidenze utili nelle prime posizioni
Path validityCammini validi secondo ground truthNon confondere con testo persuasivo
Claim support rateAffermazioni sostenute da evidenzeRichiede revisione o validatore dedicato
P50 / P95 / P99Latenza end-to-endSeparare retrieval, LLM, rete e cache
€/query e €/reindexCosti online e offlineGraphRAG può avere indexing cost elevato

Per la ricerca approssimata misurare anche ANN Recall@K rispetto all'exact search. Evitare leakage: i documenti usati per costruire query e risposte attese non devono essere gli stessi esempi utilizzati per calibrare il sistema. Per dati geospaziali, suddividere anche per territorio e periodo per testare la generalizzazione.

15. Laboratorio end-to-end: tre domande, tre percorsi

Scenario A — «Trova il manuale che descrive l'isolamento di P-101». Recuperare chunk via vector search con filtro tenant, associare i documenti all'asset canonico e citare la versione. La ricerca semantica è un buon primo passo.

Scenario B — «Quali valvole isolano P-101 e quali zone sono interessate?». Recuperare le relazioni esplicite, interrogare il GIS per la topologia effettiva e usare il vector search soltanto per recuperare procedure e note di manutenzione. Il LLM deve sintetizzare il risultato, non inventare cammini.

Scenario C — «Quali sono i principali problemi ricorrenti nella rete nell'ultimo anno?». GraphRAG global search o aggregazioni strutturate possono identificare temi trasversali; verificare conteggi e distribuzioni temporali con query deterministiche sul dataset originale.

Protocollo: eseguire almeno 30–50 domande etichettate per categoria, ripetere con cache fredda e calda, fissare le versioni dei modelli, acquisire token, tempi, costo, risultati e evidenze. Il numero è una proposta di laboratorio, non una soglia statistica universale.

16. Performance engineering: il costo reale del grafo

La latenza del retrieval non dipende soltanto dal numero di nodi. Per le traversate conta il branching factor: un'espansione a profondità h con grado medio b può generare nell'ordine di b^h candidati prima dei filtri. Limitare profondità, tipi di arco, cardinalità e timeout. Usare filtri su identificatori e intervalli temporali prima dell'espansione.

Nel vector search, il costo dell'exact scan cresce con numero di candidati e dimensionalità. Filtrare tenant e metadati prima del calcolo quando il piano lo consente; esaminare il piano di esecuzione SQL e il consumo CPU. Per ANN valutare recall e manutenzione dell'indice. Nel GraphRAG distinguere costo di indicizzazione, costo di aggiornamento incrementale e costo di risposta: un indice costoso può convenire su corpora stabili con molte query, ma non su dati altamente volatili.

17. Scelte architetturali e anti-pattern

EsigenzaScelta inizialeDa evitare
Ricerca manuali e ticketVector Search + metadata filtersGrafo estratto senza necessità
Dipendenze infrastrutturaliKnowledge Graph + GIS authoritativeEmbedding come prova di connettività
Temi ricorrenti in migliaia di reportGraphRAG global / aggregazioniRisposte senza fonti verificabili
Query multi-hop con testiGraph traversal + vector + rerankLLM che genera relazioni non verificate
Operazioni su asset criticiRegole deterministiche e human approvalTool call autorizzata dal prompt

18. Conclusioni: Explainable GeoAI è un problema di evidenze

La domanda corretta non è «GraphRAG è migliore della ricerca vettoriale?», ma «quale struttura informativa permette di dimostrare la risposta per questa classe di interrogazioni?». Il vector search è efficace per trovare linguaggio semanticamente affine; il Knowledge Graph è efficace quando la relazione stessa è un fatto di dominio; GraphRAG è utile quando la risposta richiede collegare molti documenti e livelli di sintesi.

In un'architettura GeoAI matura i tre metodi possono coesistere. Il valore non nasce dal numero di componenti, ma dalla disciplina con cui vengono gestiti identità, temporalità, autorizzazioni, provenance, misurazione e validazione.

Una spiegazione generata da un LLM può sembrare convincente. Una spiegazione ingegneristicamente affidabile deve essere ricostruibile a partire dalle evidenze.

19. Fonti primarie e documentazione

  1. Esri — Knowledge Graph Query (REST, openCypher)
  2. Esri — Knowledge Graph resource
  3. Esri — ArcGIS API for Python: Search and Query Knowledge Graphs
  4. Esri — ArcGIS Maps SDK JS: Search and query Knowledge Graph
  5. Microsoft Learn — SQL Server VECTOR_DISTANCE
  6. Microsoft Learn — Vector Search and Indexes
  7. Microsoft Learn — VECTOR_SEARCH e disponibilità
  8. Microsoft Research — From Local to Global: GraphRAG
  9. Microsoft Research — DRIFT Search
  10. Microsoft Learn — EF Core SQL Server Vector Search

Articolo tecnico indipendente · Esempi sintetici a fini didattici · Verificare API, licenze, versioni e stato preview prima di applicare le configurazioni in produzione.

Nessun commento: