Saltar al contenido principal
AI-1001 • 36 Horas • Nivel Avanzado / Principal GraphRAG Architect

GraphRAG Profundo, Ontologías Semánticas y Bases de Datos de Grafos para IA (Neo4j, Cypher & GQL)

Limitaciones estructurales del Vector RAG plano, extracción de tripletas con esquemas dirigidos por ontologías, detección jerárquica de comunidades (Algoritmo de Leiden), búsqueda híbrida HNSW + Subgraph Traversal (PPR) y consultas Cypher/ISO GQL.

Módulo 1: Módulo 1: Limitaciones del Vector RAG Plano y Arquitectura de Grafos de Conocimiento (Property Graphs)

Por Qué Falla el Vector RAG Plano: Razonamiento Multi-Hop y Consultas Globales de Corpus (50 min)

Por Qué Falla el Vector RAG Plano: Razonamiento Multi-Hop y Consultas Globales de Corpus

1. Las Dos Patologías Estructurales del Chunking + Similitud Coseno

El RAG vectorial tradicional fragmenta documentos en chunks desconectados $c_i$ y recupera los top-$k$ vecinos más cercanos en $mathbb{R}^d$. Esta arquitectura colapsa ante dos clases de preguntas empresariales:

1. Razonamiento Relacional Multi-Hop (Connecting the Dots): Pregunta: "¿Qué proveedores de nivel 3 suministran componentes críticos a plantas afectadas por la regulación ambiental X?" La relación reside en la composición de caminos $A \xrightarrow{\text{suministra}} B \xrightarrow{\text{ensambla}} C \xrightarrow{\text{opera\_en}} D \xrightarrow{\text{regulado\_por}} X$. Ningún chunk individual contiene simultáneamente a $A$ y a $X$; la similitud semántica entre la consulta y el chunk de $A$ es cercana a cero. 2. Global Sensemaking (Síntesis Temática Holística): Pregunta: "¿Cuáles son los 5 patrones sistémicos de fallo recurrentes en los 10,000 reportes post-mortem del último año?" Un top-$k = 10$ de chunks recupera fragmentos microscópicos locales y jamás puede agregar la topología global del corpus.

flowchart LR
    Q["Consulta del Usuario"] --> ROUTER[" Clasificador de Intención de Consulta"]
    ROUTER -->|"Consulta Local / Entidad Específica"| LOCAL["Local GraphRAG: HNSW Seed Nodes + 2-Hop Personalized PageRank"]
    ROUTER -->|"Consulta Global / Síntesis de Corpus"| GLOBAL["Global GraphRAG: Map-Reduce sobre Resúmenes de Comunidades Leiden"]
    LOCAL --> SYNTH["Síntesis con Trazabilidad de Nodos y Aristas"]
    GLOBAL --> SYNTH

RDF/SPARQL vs. Labeled Property Graphs (LPG) en Neo4j e ISO/IEC 39075 GQL (50 min)

RDF/SPARQL vs. Labeled Property Graphs (LPG) en Neo4j e ISO/IEC 39075 GQL

1. Comparativa Arquitectónica: Tripletas RDF vs. Labeled Property Graphs (LPG)

Un Labeled Property Graph $mathcal{G} = (V, E, mathcal{L}_V, mathcal{L}_E, mathcal{P})$ permite almacenar propiedades clave-valor arbitrarias (incluyendo vectores densos FLOAT[1536], marcas temporales de validez y pesos de confianza) directamente tanto en los nodos $v in V$ como en las aristas dirigidas $e in E$:

| Dimensión Técnica | RDF / Triple Stores (SPARQL) | Labeled Property Graph (Neo4j / Memgraph / ISO GQL) | | :--- | :--- | :--- | | Unidad Atómica | Tripleta Sujeto–Predicado–Objeto $(s, p, o)$ | Nodo con etiquetas/propiedades y Arista dirigida con propiedades | | Propiedades en Aristas | Requiere reificación o RDF-star (sobrecarga de joins) | Nativo en $mathcal{O}(1)$ sobre el puntero de relación (r.weight, r.valid_from) | | Complejidad de Traversal | Joins de índices B-Tree / Hash ($mathcal{O}(log N)$ por salto) | Index-Free Adjacency: Punteros físicos en memoria ($mathcal{O}(1)$ por arista) | | Vectores HNSW Nativos | Limitado / Externo | Índices HNSW nativos co-localizados con el grafo de adyacencia |

Internals del Motor de Grafos: Index-Free Adjacency, Registros de Tamaño Fijo y Complejidad de Salto (45 min)

Internals del Motor de Grafos: Index-Free Adjacency, Registros de Tamaño Fijo y Complejidad de Salto

1. Por Qué los Joins Relacionales Degradan Exponencialmente en $k$-Hops

En un RDBMS tradicional, atravesar una relación de grado medio $ar{d}$ a profundidad $k$ requiere $k$ búsquedas en índices B+Tree sobre tablas de unión: $mathcal{O}(k cdot ar{d}^k log |V|)$.

En cambio, mediante Index-Free Adjacency, cada registro de nodo en disco/memoria (node_store.db de tamaño fijo de 15 bytes en Neo4j) almacena un puntero directo al ID de su primera relación en relationship_store.db (34 bytes de tamaño fijo formando una lista doblemente enlazada por nodo origen y destino). Saltar del nodo $u$ a sus vecinos requiere únicamente aritmética de offset de memoria:

$ ext{ByteOffset}( ext{rel_id}) = ext{rel_id} imes 34 ext{ bytes} implies mathcal{O}(1) ext{ por salto}$

Módulo 2: Módulo 2: Construcción del Grafo con LLMs, Resolución de Entidades y Algoritmo de Leiden

Extracción de Conocimiento Guiada por Ontología y Gleaning Iterativo Sin Alucinación (55 min)

Extracción de Conocimiento Guiada por Ontología y Gleaning Iterativo Sin Alucinación

1. El Peligro de la Extracción Abierta (Schema-Free Knowledge Graphs)

Permitir que un LLM invente libremente tipos de nodos y relaciones produce una explosión de sinónimos incompatibles (WORKS_AT, EMPLOYED_BY, IS_MEMBER_OF, COLLABORATES_WITH), fragmentando la conectividad del grafo.

Arquitectura de Producción (Ontology-Constrained Extraction): 1. Esquema Cerrado Tipado (Pydantic / JSON Schema): Restringir mediante Constrained Decoding (FSM sobre logits) los tipos de entidad $mathcal{L}_V$ y tipos de relación válidos $mathcal{L}_E subseteq mathcal{L}_V imes mathcal{R} imes mathcal{L}_V$. 2. Ciclo de Gleaning (Auto-Reflexión de Omisiones): En documentos densos, una sola pasada de extracción omite hasta el $40%$ de las relaciones secundarias. El loop de Gleaning pregunta con los logits del contexto cacheado: "¿Quedaron entidades o relaciones del esquema sin extraer en este fragmento?", recuperando las tripletas faltantes sin re-procesar el prompt base.

Entity Resolution (ER) a Escala: Blocking Vectorial, Similitud Jaro-Winkler y Fusión Canónica (50 min)

Entity Resolution (ER) a Escala: Blocking Vectorial, Similitud Jaro-Winkler y Fusión Canónica

1. El Problema de $O(|V|^2)$ en la Deduplicación de Nodos

Un grafo extraído de múltiples fuentes contendrá variantes como "Banco Central de Chile", "BCCh" y "Central Bank of Chile". Comparar todos los pares requiere $|V|(|V|-1)/2$ evaluaciones.

2. Pipeline de Resolución de Entidades en 3 Etapas

flowchart LR
    NODES["Nodos Extraídos (N = 10^6)"] --> BLOCK["1. HNSW + LSH Blocking (Top-15 candidatos por nodo)"]
    BLOCK --> SCORE["2. Scoring Compuesto: 0.5Cosine(Emb) + 0.3JaroWinkler(Name) + 0.2*Jaccard(Neighbors)"]
    SCORE --> MERGE["3. Connected Components (WCC) + apoc.refactor.mergeNodes"]

La similitud estructural de Jaccard sobre el vecindario $mathcal{N}(u)$ y $mathcal{N}(v)$ desambigua homónimos (ej. dos personas con el mismo nombre pero en empresas y geografías disjuntas):

$S_{ ext{struct}}(u, v) = rac{|mathcal{N}(u) cap mathcal{N}(v)|}{|mathcal{N}(u) cup mathcal{N}(v)|}$

Indexación Jerárquica de Comunidades: Algoritmo de Leiden vs. Louvain y Modularidad (50 min)

Indexación Jerárquica de Comunidades: Algoritmo de Leiden vs. Louvain y Modularidad

1. La Función de Modularidad $Q$ y el Defecto de Louvain

Para particionar el grafo en comunidades temáticas densamente conectadas, optimizamos la modularidad (o el modelo de Constant Potts - CPM):

$Q = rac{1}{2m} sum_{i,j} left(A_{ij} - gamma rac{k_i k_j}{2m} ight) delta(c_i, c_j)$

Donde $m = rac{1}{2}sum_{ij} A_{ij}$ es el peso total de aristas, $k_i$ es el grado del nodo $i$, y $gamma > 0$ es el parámetro de resolución.

[!WARNING]
Por qué GraphRAG usa Leiden en lugar de Louvain: Traag et al. demostraron que el algoritmo de Louvain produce hasta un $25%$ de comunidades internamente desconectadas (puentes rotos). El Algoritmo de Leiden introduce una fase intermedia de Refinamiento de Partición antes de agregar la red, garantizando matemáticamente que toda comunidad detectada sea conexa y convergiendo a una partición sub-óptima local estricta.

Módulo 3: Módulo 3: Recuperación Híbrida (Vector + Graph Traversal), Personalized PageRank y Cypher Avanzado

Recuperación Híbrida Sub-50ms: Anclaje Vectorial HNSW + Difusión Personalized PageRank (PPR) (55 min)

Recuperación Híbrida Sub-50ms: Anclaje Vectorial HNSW + Difusión Personalized PageRank (PPR)

1. Prevención de la Explosión de Super-Nodos (Hubs) con PPR

Si tras recuperar los nodos semilla $S_0 = {v_1, dots, v_k}$ vía HNSW expandimos ingenuamente todos los caminos de longitud 2 (MATCH (s)-[1..2]-(n)), un super-nodo* de grado $100,000$ (ej. nodo País: Chile o Moneda: USD) inundará el contexto con ruido irrelevante.

Solución Matemática (Personalized PageRank - HippoRAG / FastGraphRAG): Definimos un vector de teletransportación personalizado $mathbf{p} in mathbb{R}^{|V|}$ concentrado exclusivamente en los nodos semilla de la consulta ($p_i = ext{sim}(mathbf{q}, mathbf{v}_i)$ para $i in S_0$, $0$ en otro caso) y resolvemos la distribución estacionaria con amortiguamiento $alpha in [0.15, 0.30]$:

$oldsymbol{pi} = (1 - alpha)mathbf{P}^ op oldsymbol{pi} + alpha mathbf{p}$

Donde $P_{uv} = rac{w_{uv}}{sum_{z} w_{uz}}$ es la matriz de transición normalizada por el grado de salida, penalizando automáticamente a los hubs promiscuos.

Cypher e ISO GQL Avanzado: Cuantificadores de Camino, Índices Vectoriales y Poda de Subgrafos (50 min)

Cypher e ISO GQL Avanzado: Cuantificadores de Camino, Índices Vectoriales y Poda de Subgrafos

1. Consulta Híbrida Vectorial + Traversal Multi-Hop en una Sola Transacción Cypher

En Neo4j 5.x+, el índice HNSW y el motor de recorrido de grafo se ejecutan dentro del mismo planificador de consultas:

CALL db.index.vector.queryNodes('entity_embeddings_idx', 5, $queryEmbedding)
YIELD node AS seed, score AS vectorScore
WHERE vectorScore >= 0.78

MATCH path = (seed)-[r:DEPENDS_ON|SUPPLIES_TO|REGULATED_BY*1..3]-(target:Entity) WHERE ALL(rel IN relationships(path) WHERE rel.confidence >= 0.85) WITH seed, target, path, vectorScore, REDUCE(w = 1.0, rel IN relationships(path) | w * rel.confidence) AS pathReliability RETURN seed.name AS anchor_entity, target.name AS connected_entity, [n IN nodes(path) | n.name] AS reasoning_chain, ROUND(vectorScore * pathReliability, 4) AS hybrid_rank_score ORDER BY hybrid_rank_score DESC LIMIT 15;

Grafos de Conocimiento Temporales (Bi-Temporal Graphs) para Memoria Episódica de Agentes (45 min)

Grafos de Conocimiento Temporales (Bi-Temporal Graphs) para Memoria Episódica de Agentes

1. Contradicciones Factuales a lo Largo del Tiempo

En sistemas empresariales vivos, los hechos cambian: "Ana es CTO de FinCorp" era cierto en 2024, pero en 2026 "Carlos es CTO de FinCorp". Sobrescribir la arista destruye la auditoría histórica; conservar ambas sin control temporal provoca alucinaciones en el LLM.

2. Modelado Bi-Temporal en las Aristas (Arquitectura Zep / Graphiti)

Cada arista de hecho $e in E$ incorpora dos intervalos temporales ortogonales: - Tiempo de Validez del Mundo Real ($[t_{ ext{valid_from}}, t_{ ext{valid_to}}]$): Cuándo fue verdadero el hecho en el dominio de negocio. - Tiempo Transaccional del Sistema ($[t_{ ext{ingested_at}}, t_{ ext{invalidated_at}}]$): Cuándo el agente aprendió o revocó ese hecho, permitiendo consultas Point-in-Time exactas (AS OF timestamp).

Módulo 4: Módulo 4: Laboratorio de Recorrido de Grafos Recursivos y Evaluación de Certificación

Serialización Compacta de Subgrafos para el Context Window del LLM y Trazabilidad de Citas (45 min)

Serialización Compacta de Subgrafos para el Context Window del LLM y Trazabilidad de Citas

1. Optimización de Tokens al Inyectar Subgrafos en el Prompt

Inyectar JSON verboso de nodos y aristas desperdicia hasta el $65%$ de los tokens en llaves repetidas. La representación tabular compacta de Tripletas Tipadas con ID de Evidencia maximiza la precisión de razonamiento multi-hop y reduce el costo de inferencia:

[ENTITIES]
E101 | PaymentGateway-Core | Tier-0 Microservice | SLA: 99.999%
E204 | HSM-Vault-Cluster   | Hardware Security   | Region: us-east-1

[RELATIONS] R55 | E101 -[AUTHENTICATES_VIA (weight=0.98, valid_from=2025-01)]-> E204 | SourceChunk: DOC_882#P4

Laboratorio Práctico: Recorrido de Grafo Multi-Hop y Propagación de Confianza (GraphRAG Traversal) (60 min)

Laboratorio Práctico: Recorrido de Grafo Multi-Hop y Propagación de Confianza (GraphRAG Traversal)

Contexto del Desafío

Estás auditando el motor de recuperación sobre grafo de conocimiento para análisis de contagio de riesgo en cadena de suministro. Cuentas con las tablas: - kg_nodes(node_id TEXT PRIMARY KEY, entity_name TEXT, entity_type TEXT) - kg_edges(src_id TEXT, dst_id TEXT, relation_type TEXT, confidence NUMERIC(5,2))

Partiendo del nodo semilla 'N1' (QuantumChip-Fab), necesitas encontrar todos los caminos de exactamente 2 saltos (N1 -> N_mid -> N_target) y calcular la confianza acumulada del camino como el producto e1.confidence * e2.confidence.

Objetivo de la Consulta SQL

Escribe una consulta SQL que devuelva las siguientes columnas para todos los caminos de 2 saltos que parten de src_id = 'N1': 1. seed_entity: nombre de la entidad origen ('QuantumChip-Fab') 2. bridge_entity: nombre de la entidad intermedia (1er salto) 3. target_entity: nombre de la entidad destino (2do salto) 4. path_confidence: ROUND(e1.confidence * e2.confidence, 4) Ordena el resultado por path_confidence DESC.

Evaluación de Certificación: GraphRAG Profundo, Ontologías y Bases de Datos de Grafos (45 min)

Evaluación de Certificación: AI-1001

Evalúa tu dominio sobre arquitecturas GraphRAG, Index-Free Adjacency, el Algoritmo de Leiden, Personalized PageRank y grafos bi-temporales.