Un grafo que no puede negarse

Un grafo sin ontología y sin reflexión es un valor más elegante que sigue sin determinar ni condicionar nada. La discusión de este mes trae los números que lo demuestran, y no los lee así.

Jesús Pérez
Julio de 2026 llenó la conversación de grafos tipados para agentes, con una tesis correcta —una arista sin tipo lleva un bit; tipada, lleva significado— y con benchmarks independientes que la sostienen. Pero esos mismos benchmarks dicen algo que sus divulgadores no rematan: un sistema se hundió a 6,6 de F1 medio frente a 59,8 en cuanto lo evaluó alguien que no era su autor, y una cadena de cinco saltos al 85 % de acierto por salto vale un 44 %. El problema no es que falte estructura. Es que la estructura, sola, no obliga a nada. Y el hueco que el propio artículo declara vacío —un validador de aristas tipadas— lleva tiempo ejecutándose aquí.
Un grafo que no puede negarse

Si has llegado hasta aquí por el término graph engineering, ésta es la única vez que voy a usarlo. Reaparecerá una vez más, al final, dentro del título del artículo que se cita — un título ajeno no se toca. No porque sea desdeñable —el fondo es real y tiene una década de investigación detrás—, sino porque un texto que se cuelga de una palabra nacida en X hace once días caduca cuando la palabra caduque. Lo que sigue se sostiene sobre cosas que seguirán ahí: una migración con número, un validador que se ejecuta, y una tabla de resultados publicada.

El diagnóstico es correcto

La tesis que circula estos días es buena, y conviene decirlo antes de discutir nada: una arista sin tipo lleva un bit de información. Dice que dos cosas están relacionadas. Tipada —supersede, depende de, contradice, causó— dice cómo, y eso es lo que separa un montón de enlaces de algo sobre lo que se puede razonar.

El ejemplo canónico es una cadena de decisión: por qué se dejó de usar X. La respuesta no vive en ningún documento; vive en la estructura que une el registro de decisión, lo que reemplazó y el incidente que lo disparó. La búsqueda por similitud recupera diez notas que mencionan X y ninguna que lo explique, porque «estas tres pertenecen a una misma cadena causal» no es una propiedad que la similitud pueda ver.

Hasta aquí, de acuerdo. La discrepancia empieza en la conclusión.

Los números dicen más de lo que se lee en ellos

Los benchmarks independientes de 2026 existen y son públicos. Merece la pena mirarlos sin el filtro del entusiasmo.

En GraphRAG-Bench (arXiv:2506.05690), sobre el corpus de novela, la lectura por tipo de tarea queda así:

TareaMejor método de grafoRAG vectorial con reordenación
Razonamiento complejo53,38 % (HippoRAG 2)42,93 %
Resumen contextual64,40 % (GraphRAG local)51,30 %
Recuperación de hechos60,14 % (HippoRAG 2)60,92 %

Y el coste por consulta, del mismo trabajo: ~880 tokens para RAG vectorial, ~1.008 para HippoRAG 2, y hasta 331.375 para la búsqueda global de GraphRAG.

Los dos márgenes de arriba son reales y anchos. Pero la tercera fila es la interesante, y es la que la divulgación pasa de largo: en recuperación simple de hechos, el mejor método de grafo pierde contra la búsqueda vectorial. No empata: pierde, añadiendo contexto redundante. El propio resumen del artículo lo dice con menos diplomacia de la que se le ha citado: GraphRAG rinde por debajo de RAG convencional en muchas tareas reales.

Estructura no es una mejora monótona. Es una apuesta que gana en unas preguntas y pierde en otras, y cuesta entre tres y cuatrocientas veces más.

El caso que demuestra la tesis

El dato con más filo del año está en el trabajo de HippoRAG 2 (arXiv:2502.14802), en su tabla de resultados. LightRAG obtiene 6,6 de F1 medio. HippoRAG 2, en la misma tabla, 59,8.

LightRAG había publicado resultados excelentes. En su propio banco de pruebas, evaluado por sus propios autores. En cuanto lo midió otro, se desplomó casi diez veces.

Léelo dos veces, porque no es una anécdota de reproducibilidad. LightRAG es un grafo. Tiene nodos, tiene aristas, tiene extracción, tiene recuperación. Cumple entera la descripción de la que habla todo el mundo este mes. Y no condicionaba nada: nada dentro del sistema podía contradecir a su autor, así que la única contradicción posible venía de fuera, tarde, y de golpe.

Un grafo que no puede negarse a nada no es un grafo a medias. Es un valor más elegante.

La aritmética que mata el proyecto

Hay una segunda cifra, y no es una cita: es una potencia.

La resolución de entidades —decidir que «Dr. John Smith», «J. Smith» y «John» son un solo nodo, y que «Mercurio el planeta» y «Mercurio el elemento» son dos— falla con una probabilidad que se compone multiplicativamente a lo largo de una travesía.

0,95⁵ = 0,77      cinco saltos al 95 % por salto → 77 % de confianza
0,85⁵ = 0,44      cinco saltos al 85 % por salto → 44 %

Al 85 %, tu impresionante travesía de cinco saltos es echar una moneda al aire.

Y fíjate en lo que esto hace con el orden de construcción. La parte cara no son los algoritmos de grafo: es decidir qué es la misma cosa. Es decir, la parte cara no es la estructura. Es la determinación.

Lo que nadie ha reclamado

El artículo que abrió esta conversación termina nombrando dos cosas que, dice, no existen en ninguna parte. Una es un eval que demuestre que tipar mejora las respuestas. La otra, textual:

«Un validador para aristas tipadas. Nada valida el grafo de un almacén de notas: tipos desconocidos, destinos colgantes, inversos que faltan, ciclos de contradicción. Cero herramientas.»

Aquí toca ser exacto, porque la tentación de decir «eso ya lo teníamos» es fuerte y sería deshonesta en dos sentidos. Primero: él acota su hueco a markdown local, a un almacén de notas que abres con tu editor. Ontoref no es markdown; su grafo se declara en NCL tipado. No estamos reclamando su hueco. Segundo, y más importante: reclamar prioridad es la manera más rápida de ensanchar la audiencia sin cualificar a nadie.

Lo que sí se puede decir es lo concreto. Ese validador —tipos desconocidos, destinos colgantes, inversos— es exactamente lo que validate ontology ejecuta aquí, y su salida es de dos líneas:

61 nodos · 175 aristas · 0 hallazgos · vocabulario: 9

El 9 es el número entero de tipos de arista que existen. No una convención, no una lista recomendada: un enum cerrado con su mapa de inversos congelado, reconciliado en una migración con número —la 0043— porque antes de ella el enum declaraba cuatro tipos que nadie usaba y omitía cuatro que estaban en uso, y los registros de arista iban sin contrato, así que la divergencia estuvo latente sin que nada la mordiera.

Un destino colgante no se documenta: falla en Hard. Un tipo fuera del vocabulario no se avisa: falla. La diferencia entre las dos frases es todo el asunto.

Describir frente a obligar

El grafo que se proponeontoref (on+re)
Aristastipadastipadas y de vocabulario cerrado (9 tipos)
Vocabularioconvenciónenum con mapa de inversos congelado
Una violaciónse documentase rechaza (Hard)
Identidadenlace entre corchetesid declarado; arista colgante = fallo
Cambiosobrescribesupersede, con testigo firmado
Autoridad del nodowarrant tipado: ¿en virtud de qué existe?

La fila que no tiene contraparte es la última, y es la que separa una ontología de un índice. warrant no pregunta qué dice un nodo ni con qué se conecta: pregunta en virtud de qué está ahí. Un grafo de recuperación no necesita responder eso, porque su trabajo termina cuando encuentra el documento. Un grafo que gobierna sí lo necesita, porque su trabajo empieza cuando alguien intenta contradecirlo.

Su grafo describe. Éste obliga. Y un grafo que no puede negarse a nada es documentación con mejor tipografía.

La mitad incómoda

Sería cómodo terminar ahí. No se puede, porque esta misma semana el proyecto publicó el expediente 63/0, y dice justo lo contrario de lo que uno querría poner en un post.

Ontoref tiene almacén bitemporal desde hace meses: los dos tiempos, la retracción, la supersesión, declarados en un ADR aceptado. Y el código que lo alimentaba no emitía una sola retracción, dejaba el segundo tiempo vacío en cada operación y reiniciaba su reloj en cada pasada, archivando julio debajo de mayo. Sesenta y tres días de deriva. Cero reconciliaciones. Y durante todo ese tiempo validate ontology respondía 0 hallazgos, diciendo la verdad: mide integridad estructural, y nadie había declarado un estado llamado «la proyección está fresca».

Teníamos el validador que este mes se declara inexistente, y teníamos además el almacén bitemporal que el artículo da por resuelto en otros. Y llevábamos dos meses usando el segundo mal, en silencio, mientras el primero respondía que todo estaba bien —porque se lo estábamos preguntando a la pieza equivocada.

Eso no debilita la tesis: es la tesis. Tener una capacidad y usarla se distinguen por una cantidad que no nota nadie, y la única forma de que esa distancia sea visible es que algo se niegue. No un documento que la describa. Algo que se niegue.

Por eso lo que quedó del episodio no es el arreglo, sino una puerta que rechaza el commit que toca el grafo sin reconciliar, y una deuda escrita en el propio expediente: esa puerta comprueba frescura, no conformidad bitemporal. Un extractor reescrito mañana en monotemporal pasaría en verde. Está declarado ahí, con la dirección de lo que lo saldaría, en vez de descansar en que alguien se acuerde.

El testigo tampoco es absoluto

Aquí cabe la objeción evidente, y conviene hacérsela uno mismo antes de que la haga otro: si tu grafo puede negarse, ¿no has cambiado un dogma por otro?

Empecemos por las cifras de este mismo texto. 53,38 % no es un hecho sobre los grafos. Es un hecho sobre un corpus —una novela—, con un lector concreto (Llama-3.3-70B-Instruct), en una fecha, sobre una taxonomía de tareas que alguien decidió. Quítale esas coordenadas y se convierte en un eslogan; y en eslogan es exactamente como ha viajado por ahí este mes. Un dato sin contexto, sin momento, sin referencia y sin propósito no es un dato: es una cifra suelta buscando una frase que la acoja.

Con el testigo pasa lo mismo, y el protocolo lo dice antes de que se lo pregunten. Un testigo aquí es un acta firmada de un acto, y lo que acredita está acotado por decisión explícita: certifica estructura, nunca veracidad (ADR-050). Prueba que una comprobación se ejecutó, sobre qué entrada y qué devolvió. No prueba que el mundo sea así. Es incuestionable dentro de sus coordenadas —este check, esta entrada, este instante— y no significa nada fuera de ellas.

El almacén bitemporal es esa misma renuncia convertida en dato. No dice «X es cierto». Dice «X valía desde t₁, hasta donde el registro sabía en t₂». Es, literalmente, la foto de un instante con sus coordenadas pegadas al dorso — y ésa es la razón de que existan dos tiempos y no uno.

Así que la respuesta no es «declaremos la verdad» ni «todo es relativo». Las dos desactivan el mismo mecanismo desde lados opuestos: una lo vuelve dogma, la otra lo vuelve decorativo. Lo que queda en pie es más modesto y más útil: el alcance viaja con la afirmación. Una puerta que declara lo que no comprueba. Una cifra que arrastra su corpus y su fecha. Un hecho que lleva sus dos tiempos.

Y el expediente de arriba es lo que ocurre cuando la coordenada se pierde. La extracción trataba la proyección como el estado en vez de como una foto fechada, así que sobrescribía en lugar de superponer; y el reloj que debía fecharla arrancaba en 1 en cada pasada. El instante estaba. Lo que faltaba eran sus coordenadas. Sin ellas, sesenta y tres días de historia se leen exactamente igual que un presente sano.

Lo que queda cuando pase la ola

La conversación de este mes acabará como acabaron las anteriores: el término se gastará y quedará lo que se pueda ejecutar. De todo lo que se ha escrito estas dos semanas, lo que sobrevive es corto y ya está en los papers:

  • Núcleo tipado y pequeño. Un vocabulario de diez a veinte verbos, cerrado. Coincide con lo que aquí son nueve.
  • Encaminar por tipo de pregunta. Vector para búsquedas simples —donde el grafo pierde—, grafo para cadenas.
  • Supersesión temporal. Los hechos caducan, no mueren.

Y una cuarta que no está en los papers y es la que decide si lo demás sirve de algo: algo tiene que poder decir que no. Un vocabulario que no se puede violar. Un colgante que rompe la construcción. Una regla que, cuando la contradices, no te avisa: te para.

Sin eso, la estructura es un valor más elegante. Y 0,85⁵ sigue siendo 0,44 por muy bonito que se vea el grafo.

Enmienda · 31 de julio de 2026

Dos días después de este texto, el mismo autor publicó la segunda parte —How to Do Graph Engineering in a Markdown Vault— y construyó el validador. La frase citada más arriba, «Zero tools», ya no describe su repositorio. Describe la quincena en que se escribió.

Dejarlo anotado aquí en vez de corregir el párrafo es deliberado. Dos días antes de que saliera este post, este proyecto aceptó una decisión que dice exactamente esto (ADR-078): enmendar es el movimiento horizontal de un texto que sigue en pie, y la alternativa —corregir en silencio— es la forma en que una afirmación envejece sin que nadie se entere. Esa decisión midió primero su propio caso: setenta y siete de setenta y siete registros de decisión editados después de su primer commit, y ni una sola enmienda anotada. Un post que dedica una sección a las cifras que viajan sin sus coordenadas no puede permitirse perder las suyas.

Lo que construye la segunda parte: una taxonomía pequeña con inversos, aristas en el frontmatter, supersesión que la recuperación respeta, un validador con cinco clases de fallo y una cota de recuperación acotada. En cuatro de las cinco, lo escrito arriba se sostiene —y en tres conviene ser exacto antes que generoso:

  • su validador avisa; validate ontology falla Hard. Toda la distancia está en ese verbo, y es la misma distancia de la que trata este post.
  • sus seis tipos son una taxonomía que él eligió y documenta. Los nueve de aquí son un enum cerrado con mapa de inversos congelado, reconciliado en una migración numerada.
  • su clase de fallo «inverso ausente» no puede darse aquí: la reciprocidad se deriva del mapa de inversos y no se almacena nunca, así que no hay nada que omitir. Eso es una adaptación de la Z39.19 §8.1.1, no un atajo para saltársela.

La quinta no tiene equivalente aquí, y esa es la mitad honesta de esta enmienda. Su cota de recuperación pone número donde este proyecto no tiene ninguno: un techo de cuánto contexto entra en un prompt, una regla de abstención cuando la relevancia es dudosa, y fallo cerrado cuando la recuperación da error. Aquí la provisión de contexto está gobernada en quién puede proveerla y qué es autoritativo (ADR-074: el portador invoca la superficie gobernada, nunca la copia) —y no está acotada. Ningún techo en el esquema de vistas, ninguna regla de abstención, y un gancho de sesión que vacía el inventario entero en cada entrada. Comprobado, no supuesto; anotado como bl-042. Es el expediente de arriba una capa más arriba: una superficie que no puede decir esto es demasiado también es un valor más elegante.

Así que la tabla ha ganado una fila, y es suya. La fila sin contrapartida sigue siendo la última —warrant— y ya no es la única asimetría de la página.


Fuentes

Todas las cifras de este texto se comprobaron contra la fuente primaria, no contra su divulgación. Cada una, con su origen exacto:

Xiang, Wu, Zhang, Chen, Hong, Huang y Su · «When to use Graphs in RAG: A Comprehensive Analysis for Graph Retrieval-Augmented Generation» (GraphRAG-Bench) — arXiv:2506.05690 : Tabla 2, corpus de novela: razonamiento complejo 53,38 % (HippoRAG 2) frente a 42,93 % (RAG con reordenación); resumen contextual 64,40 % (GraphRAG local) frente a 51,30 %; recuperación de hechos 60,92 % (RAG con reordenación) frente a 60,14 % (HippoRAG 2). Figuras 8-9, coste por consulta: ~880 tokens en RAG convencional, ~1.008 en HippoRAG 2, hasta 331.375 en la búsqueda global de GraphRAG. De su propio resumen sale la frase que este post no suaviza: GraphRAG rinde por debajo de RAG convencional en muchas tareas reales.

Jiménez Gutiérrez, Shu, Qi, Zhou y Su · «From RAG to Memory: Non-Parametric Continual Learning for Large Language Models» (HippoRAG 2) — arXiv:2502.14802 : Tabla 2, F1 medio con Llama-3.3-70B-Instruct como lector: HippoRAG 2 59,8 · NV-Embed-v2 (7B) 57,0 · HippoRAG 53,1 · GraphRAG 49,6 · RAPTOR 48,8 · LightRAG 6,6. En 2WikiMultiHopQA: HippoRAG 2 71,0 F1 frente a 61,5 de NV-Embed-v2 — los 9,5 puntos que se citan por ahí son esa resta, no un dato aparte.

Rasmussen, Paliychuk, Beauvais, Ryan y Chalef · «Zep: A Temporal Knowledge Graph Architecture for Agent Memory»arXiv:2501.13956 : El modelo bitemporal por arista —cuándo fue cierto en el mundo y cuándo lo supo el sistema— que sostiene la supersesión frente a la sobrescritura. Es el trabajo previo del que este post no reclama nada: existe, es público, y llegó antes.

La aritmética de los saltos : 0,95⁵ = 0,7738 y 0,85⁵ = 0,4437. No es una cita de nadie: es una potencia, y se comprueba con una calculadora.

El artículo que abre la conversación : «What Is Graph Engineering? A Field Guide for Builders», Eugeniu Ghelbur, 21 de julio de 2026, en The AI Operator (theaioperator.io). De ahí sale la cita del validador que no existe, y el mérito de haber reunido y ordenado los benchmarks. Este texto discute su conclusión, no su trabajo.

Del lado de ontoref, todo lo afirmado es consultable en el repositorio: el enum cerrado de nueve tipos de arista y su mapa de inversos (code/ontology/schemas/core.ncl), la migración 0043-edge-kind-vocabulary-reconciled, la salida de ontoref validate ontology, y el ADR-041 que declara el modelo bitemporal que el expediente 63/0 documenta incumplido.


El protocolo, sus decisiones y su grafo se declaran en NCL y se pueden consultar: ontoref.dev. El expediente 63/0 —la autopsia completa de los sesenta y tres días— está en /expedientes/casos/el-almacen-escrito-en-un-solo-tiempo.

¿Te ha resultado útil? Valóralo
¿Tienes algo que aportar? Cuéntame qué opinas, qué sugieres, o si seguimos explorando este tema.
· lecturas

Usamos cookies para que este sitio funcione, entender el uso del servicio y apoyar acciones de marketing. Política de cookies para más información.