GraphRAG: entidades, relaciones y comunidades

Cuando la respuesta está repartida en veinte documentos. Extracción de grafo, detección de comunidades y coste de indexación.

GraphRAG: entidades, relaciones y comunidades
Foto de U.Lucas Dubé-Cantin en Pexels

Séptima entrega del bloque de técnicas de recuperación, de nivel avanzado. GraphRAG es la respuesta a una clase entera de preguntas que el RAG vectorial no puede responder, no porque recupere mal, sino porque la operación que hace no es la que hace falta. También es, con diferencia, la técnica más cara de indexar de toda la serie.

Las preguntas que la similitud no alcanza

La recuperación vectorial devuelve los k fragmentos más parecidos a la consulta. Es una operación de selección local: encuentra fragmentos, uno por uno, que se parezcan al texto de la pregunta. Con eso se responden estupendamente las preguntas cuya respuesta está escrita en algún sitio.

Hay tres familias de preguntas que no cumplen esa condición.

Preguntas globales. «¿Cuáles son los temas principales de este archivo?», «¿de qué se ha hablado más en las actas del último año?». La respuesta no está en ningún fragmento: emerge del conjunto. Si la buscas por similitud, obtendrás cinco fragmentos que casualmente contienen la palabra «temas».

Preguntas de agregación. «¿Cuántos proveedores distintos aparecen mencionados?», «¿en cuántos expedientes interviene esta persona?». Exigen recorrer y contar, no seleccionar. Cualquier k fijo da una respuesta incompleta, y el modelo la presentará como completa.

Preguntas de relación. «¿Qué relación hay entre esta empresa y aquel proyecto?». Si la relación es directa y está escrita en una frase, la recuperación vectorial la encuentra. Si es indirecta —la empresa aparece en un contrato, el contrato lo firmó una persona, esa persona dirige el proyecto— no hay ningún fragmento que contenga los dos extremos, y por tanto no hay nada que recuperar. La conexión existe repartida en tres documentos y sólo aparece si alguien la recorre.

Este último caso es el que mejor ilustra la naturaleza del problema. No es un fallo de calidad de recuperación que se arregle con un reranker o con búsqueda híbrida. Es que la información que se busca no está en los textos: está entre ellos.

Qué construye GraphRAG

La propuesta consiste en extraer del corpus, en tiempo de indexación, una estructura explícita de entidades y relaciones, y utilizarla en la consulta junto al índice vectorial o en su lugar. El proceso tiene cuatro fases.

1. Extracción de entidades y relaciones

Se recorre el corpus fragmento a fragmento y, con un modelo de lenguaje, se extrae de cada uno una lista de entidades (personas, organizaciones, productos, lugares, conceptos, fechas) y de relaciones entre ellas, cada una con una breve descripción y una referencia al fragmento del que salió.

De un párrafo sobre un acuerdo comercial saldría algo así:

ENTIDADES
  Nortia S.L.        organización   proveedor de componentes desde 2019
  Proyecto Delta     proyecto       plataforma logística, fase 2
  Marta Ferrán       persona        directora de operaciones

RELACIONES
  Nortia S.L.   --suministra_a-->  Proyecto Delta   (contrato marco 2023)
  Marta Ferrán  --dirige-->        Proyecto Delta

Es la fase que determina el coste de todo lo demás, porque exige al menos una llamada al modelo por fragmento del corpus entero, y a menudo más de una si se hacen pasadas de refinamiento para capturar entidades que se escaparon en la primera.

2. Resolución de entidades y construcción del grafo

«Nortia S.L.», «Nortia» y «la empresa Nortia» son la misma organización y deben colapsar en un único nodo; si no, el grafo se llena de duplicados y las relaciones se reparten entre ellos, que es la forma más común de arruinar un GraphRAG. La resolución combina normalización de cadenas, similitud de embeddings entre descripciones y, en los casos dudosos, juicio del modelo.

Resueltas las entidades, se construye el grafo: nodos que son entidades, aristas que son relaciones, y en ambos las descripciones acumuladas de todas las apariciones. Una entidad mencionada en cuarenta documentos acaba con una descripción sintetizada a partir de las cuarenta.

3. Detección de comunidades

Sobre el grafo se ejecuta un algoritmo de detección de comunidades —Leiden es el habitual— que agrupa nodos densamente conectados entre sí y poco conectados con el resto. Cada comunidad viene a ser un tema, un proyecto, un área o un sector que emerge de la estructura de los datos, sin que nadie haya definido la taxonomía por adelantado.

El algoritmo produce una jerarquía: comunidades grandes que se subdividen en comunidades más pequeñas, en varios niveles. Esa jerarquía es la que permite responder a distintas escalas de granularidad.

4. Resúmenes de comunidad

Para cada comunidad, en cada nivel de la jerarquía, se genera con el modelo un resumen de lo que contiene: qué entidades la componen, qué las relaciona, qué se dice de ellas. Estos resúmenes son el material que responde a las preguntas globales, y son la aportación más específica del enfoque.

Ahí está el truco central: el trabajo de sintetizar el corpus se hace en la indexación, no en la consulta. Cuando llega la pregunta global, la síntesis ya está escrita.

Búsqueda local y búsqueda global

El sistema resultante ofrece dos modos de consulta, y confundirlos es la fuente habitual de decepción.

La búsqueda local parte de las entidades mencionadas en la pregunta. Las localiza en el grafo, recoge sus vecinos inmediatos, las relaciones que las unen y los fragmentos originales asociados, y con todo eso construye el contexto. Responde a preguntas centradas en entidades concretas y a preguntas de relación de alcance corto. Es la modalidad razonablemente rápida.

La búsqueda global no parte de la pregunta hacia el corpus, sino del corpus hacia la pregunta. Recorre los resúmenes de comunidad de un nivel de la jerarquía, genera para cada uno una respuesta parcial a la pregunta con su grado de utilidad, y después combina las respuestas parciales en una final. Es lo que permite contestar «¿cuáles son los temas principales?» de forma fundamentada.

El coste de la búsqueda global es cualitativamente distinto: escala con el número de comunidades del nivel elegido, no con un k fijo. Una consulta global sobre un corpus grande puede suponer decenas de llamadas al modelo. No es una operación para un chat interactivo.

El coste de indexación, que es el argumento decisivo

Fase RAG vectorial GraphRAG
Indexar un fragmento 1 llamada de embedding 1 o más llamadas de extracción al modelo, más embeddings
Postproceso del corpus Ninguno Resolución de entidades, comunidades y un resumen por comunidad y nivel
Añadir un documento Incremental, segundos Puede alterar comunidades y obligar a regenerar resúmenes
Consulta local 1 búsqueda + 1 generación Recorrido de grafo + 1 generación
Consulta global No disponible Una llamada por comunidad, más la síntesis final

La diferencia en indexación es la que manda: pasar de una llamada barata de embedding por fragmento a una o varias llamadas de extracción al modelo cambia la escala del presupuesto por completo, y encima hay que sumar la fase de resúmenes. Un corpus que se indexa por unos pocos euros en un pipeline vectorial puede costar dos o tres órdenes de magnitud más aquí. Conviene estimar la cuenta con una muestra representativa y extrapolar antes de empezar.

El segundo coste, menos visible y a la larga más gravoso, es el mantenimiento. El índice vectorial se actualiza documento a documento. El grafo, no: un documento nuevo puede introducir entidades que se fusionan con otras, alterar las comunidades y dejar obsoletos varios resúmenes. Hay estrategias incrementales, pero ninguna es tan simple como añadir un vector. Un corpus que cambia a diario es mal candidato.

Cuándo no usarlo

La lista de contraindicaciones es más larga que la de indicaciones, y merece decirse claro.

  • Si tus preguntas son de búsqueda de hechos. Un centro de ayuda, un manual, una base de conocimiento de soporte: las preguntas son locales y la respuesta está en un fragmento. GraphRAG no aporta y cuesta mucho.
  • Si el corpus cambia con frecuencia. El coste de mantener el grafo al día se come el beneficio.
  • Si el corpus es pequeño. Con unos cientos de documentos, un modelo de contexto largo puede sintetizar directamente sin construir ninguna estructura.
  • Si el texto es pobre en entidades. Prosa conceptual, opinión, documentación de procedimientos sin actores nombrados: el extractor devolverá conceptos vagos y el grafo resultante será ruido con aspecto de estructura.
  • Si ya tienes los datos estructurados. Si las relaciones que buscas viven en una base de datos relacional o en un grafo ya existente, extraerlas de nuevo del texto con un modelo es reconstruir peor lo que ya tienes bien. Una consulta SQL o Cypher gana por goleada.
  • Si no has agotado lo anterior. Búsqueda híbrida, reranking y buenos metadatos resuelven muchas preguntas que a primera vista parecen exigir un grafo.

Hay una última reserva de fondo: la fiabilidad de la extracción. El grafo lo construye un modelo de lenguaje leyendo texto, con sus omisiones, sus relaciones inventadas y sus inconsistencias de criterio entre fragmentos. Esos errores quedan congelados en la estructura y dejan de ser visibles: en la consulta se recorre el grafo como si fuera un hecho, sin señal de qué aristas son sólidas. Un índice vectorial mediocre devuelve fragmentos mediocres que se pueden leer y juzgar; un grafo mediocre devuelve relaciones falsas con apariencia de dato duro. Conservar la referencia al fragmento de origen de cada arista, y mostrarla, es la única mitigación práctica.

Dónde encaja de verdad

El perfil ideal es bastante concreto: corpus grande y razonablemente estable, denso en entidades nombradas, con preguntas exploratorias o de relación, y usuarios que analizan más que consultan. Investigación periodística sobre un fondo documental, análisis de expedientes, inteligencia competitiva, revisión documental en litigios, exploración de archivos históricos.

La arquitectura más sensata en la práctica no es sustituir un enfoque por otro, sino enrutar: mantener el pipeline vectorial para las preguntas locales, que serán la mayoría, y desviar al grafo sólo las globales o de relación. Eso exige un componente que clasifique la pregunta y decida por dónde va, que es justamente el terreno de la entrega siguiente.

Qué viene ahora

Cerramos el bloque con el escalón que unifica todo lo anterior: dejar de definir el flujo por adelantado y permitir que el sistema decida en ejecución si recupera, con qué consulta, de qué fuente y si vuelve a intentarlo. Agentic RAG, con el enrutado entre fuentes, la recuperación de varios pasos, el control de bucles y el precio que se paga en latencia, coste y previsibilidad.

Si prefieres leerlo todo de golpe y en orden, los tres libros gratuitos de los que nace esta serie están disponibles en PDF y EPUB: RAG para tu negocio (nivel básico), RAG por dentro (intermedio) y RAG en producción (avanzado).


Aviso de contenido generado con inteligencia artificial.
Este artículo ha sido redactado con la asistencia de sistemas de inteligencia artificial y revisado antes de su publicación. Se informa de ello de forma expresa en cumplimiento de la normativa vigente sobre transparencia en el uso de IA.