Inicio / Artículos

Gráficos de conocimiento para la IA agente: cuatro patrones que van más allá del RAG vectorial.

La búsqueda vectorial encuentra texto similar, no hechos relacionados. Cuatro patrones de gráfico para los agentes: estimulación basada en datos reales, planificación, validación de ejecución y autocorrección.

Editor: REACTAPP.TOP9 min de lectura2051 palabras

Fuentes: From Retrieval to Reasoning: Building Production-Ready Agentic AI Systems with Knowledge Graphs

La mayoría de los equipos que desarrollan sistemas de IA se topan con el mismo problema. Se implementa una base de datos vectorial, los documentos se dividen en fragmentos, se conecta un LLM, y el resultado se denomina pipeline RAG. Funciona bien hasta que un usuario hace una pregunta que requiere combinar tres datos de dominios diferentes. En ese momento, el sistema o bien inventa una respuesta que suena convincente o bien devuelve algo técnicamente correcto pero inútil en el contexto.

Por lo general, el LLM no es el culpable; la capa de recuperación de información sí lo es. La búsqueda por similitud vectorial consiste, en esencia, en encontrar pasajes que suenen similares, por lo que localiza texto semánticamente cercano pero pasa por alto hechos que están conectados causal o relacionalmente. Esa limitación se agrava cuando se trata de un agente que debe razonar en varios pasos, tomar acciones y concatenar decisiones. Una mala respuesta se convierte en una serie de errores a lo largo de toda la cadena de razonamiento.

El argumento que merece ser tomado en serio es que un grafo de conocimiento no es simplemente un mecanismo de recuperación más sofisticado. Es la base estructural que permite a un agente razonar y no solo recuperar información.

La idea central

La IA basada en agentes a menudo se trata como un término de moda: se añaden algunas llamadas a herramientas alrededor de un LLM y se declara la victoria. Un enfoque más disciplinado diseña la capa de conocimiento específicamente para el razonamiento multi-paso y no para la respuesta a preguntas de una sola vez.

El cambio consiste en pasar de un modelo de recuperación plano a un grafo estructurado en el que las entidades, las relaciones y el contexto son de primera importancia. Un grafo no solo registra que el Producto X tiene un defecto; también registra que el Producto X es fabricado por el Proveedor Y, enviado a la Región Z y cubierto por el Marco de Cumplimiento W. Un agente que consulta ese grafo puede seguir esos enlaces y obtener información que una búsqueda vectorial nunca podría revelar.

Nada de esto es nuevo en la teoría de bases de datos. Lo novedoso es aplicarlo rigurosamente a los sistemas agentes, y el momento es oportuno. Los pipelines de agentes han madurado lo suficiente, gracias a un razonamiento mejor de los LLM, APIs más avanzadas para llamar a herramientas y marcos de orquestación más completos, por lo que ahora la capa de conocimiento es el cuello de botella. Una arquitectura de agentes impecable sigue generando resultados defectuosos cuando la representación de conocimiento subyacente es plana e incomunicada.

El método se divide en cuatro patrones arquitectónicos, cada uno dirigido a una fase diferente del ciclo de vida del agente: anclaje, planificación, ejecución y autocorrección. Juntos, constituyen un plano para sistemas en producción y no un ejercicio teórico.

Por qué es importante

La generación de RAG suele ser frágil, y sus fallos son difíciles de rastrear. Después de una respuesta deficiente, la causa permanece oculta: una recuperación deficiente, un límite de fragmento inadecuado, o un modelo que contradice el contexto con el que fue alimentado. Con la búsqueda vectorial plana, todo se reduce a conjeturas. Al incluir un grafo de conocimiento en el proceso, la explicabilidad se obtiene casi de forma gratuita, ya que la ruta de recorrido constituye el rastro del razonamiento.

Esto es de gran importancia en sectores regulados. La salud, las finanzas y la tecnología legal comparten la necesidad de una IA que pueda mostrar cómo realiza su trabajo. Un sistema que indica los tres nodos del grafo y los dos saltos de relación detrás de una respuesta puede ser auditado, mientras que uno que solo muestra un resultado de coseno top-k no puede serlo. Para los equipos que desarrollan IA bajo estrictas normativas, esa es la diferencia entre algo que se puede desplegar y un concepto de prueba que nunca sale del laboratorio.

También existe el caso de la fiabilidad. Los sistemas agentes fallan de forma en cascada, donde una mala decisión al principio de la cadena arruina todo lo que sigue. Un grafo funciona como una barandilla estructural: los agentes pueden verificar las conclusiones intermedias contra él antes de continuar y detectar desviaciones tempranamente. Se asemeja a un verificador de hechos integrado en el ciclo de razonamiento y no a uno añadido al final.

Tal vez el beneficio más subestimado sea la actualización del conocimiento sin necesidad de volver a entrenar. Con los embeddings, añadir hechos suele significar volver a incrustar grandes cantidades de datos y posiblemente perturbar el comportamiento de recuperación existente. Con un grafo, simplemente se añaden nodos y aristas, y el razonamiento del agente los refleja de inmediato. En campos en constante cambio como los mercados financieros, la investigación médica y los ecosistemas de software en evolución, eso representa una verdadera ventaja operativa.

Los cuatro patrones en la práctica

1. Estímulo basado en conocimiento

El primer patrón ancla el contexto inicial del agente en hechos estructurados y no en resultados de similitud difusa. En lugar de buscar pasajes que parezcan similares, se debe consultar el grafo en busca del subgrafo relevante para la intención del usuario e insertar ese contexto estructurado en el prompt.

from neo4j import GraphDatabase
import json

def get_grounded_context(user_query: str, entity_extractor, driver) -> str:
    # Step 1: Extract entities from the user query
    entities = entity_extractor(user_query)  # e.g., ["Product X", "Supplier Y"]

    # Step 2: Pull a relevant subgraph from Neo4j
    with driver.session() as session:
        result = session.run(
            """
            MATCH (e)-[r]-(connected)
            WHERE e.name IN $entities
            RETURN e.name AS entity,
                   type(r) AS relationship,
                   connected.name AS related_entity,
                   connected.attributes AS attributes
            LIMIT 50
            """,
            entities=entities
        )
        subgraph = [record.data() for record in result]

    # Step 3: Format subgraph as structured context
    context_str = json.dumps(subgraph, indent=2)

    grounded_prompt = f"""
    You are a reasoning agent. Use ONLY the following structured knowledge to answer.
    If the answer isn't derivable from this context, say so explicitly.

    KNOWLEDGE GRAPH CONTEXT:
    {context_str}

    USER QUERY: {user_query}
    """
    return grounded_prompt

Mira lo que sucede aquí. El agente no busca documentos que se parezcan a la pregunta. Extrae entidades concretas, obtiene su entorno relacional y lo incorpora como contexto estructurado. Lo que recibe el LLM es un mapa, en lugar de un conjunto de párrafos que solo están relacionados de forma superficial.

2. Planificación guiada por grafos

El segundo patrón abarca la planificación en múltiples pasos. Los agentes dividen objetivos complejos en pasos ejecutables, y esos pasos deben basarse en lo que realmente es posible dada la situación actual de conocimiento. Un grafo hace que la planificación sea mucho menos libre.

Compárate planificar un viaje en coche sin mapa y con uno. Sin mapa, la ruta es solo plausible. Con mapa, la ruta respeta las carreteras reales, las distancias y las restricciones. El grafo desempeña el papel del mapa.

def plan_with_graph(goal: str, graph_schema: dict, llm) -> list[dict]:
    schema_str = json.dumps(graph_schema, indent=2)

    planning_prompt = f"""
    You are a planning agent. Given the goal below, decompose it into steps.
    Each step must reference a valid entity type or relationship from the schema.
    Do not invent steps that require knowledge outside this schema.

    GRAPH SCHEMA:
    {schema_str}

    GOAL: {goal}

    Return a JSON list of steps. Each step must include:
    - "action": what to do
    - "graph_query": the Cypher query to retrieve required context
    - "depends_on": list of prior step indices this step requires
    """

    raw_plan = llm.complete(planning_prompt)
    plan = json.loads(raw_plan)
    return plan

El detalle clave es inyectar graph_schema en el planificador. El agente solo puede planificar pasos que el grafo soporte estructuralmente, lo que reduce drásticamente los planes falsos, ya que no puede proponer acciones que dependan de relaciones de datos ausentes en el modelo de conocimiento.

3. Ejecución con validación de grafo

Durante la ejecución, el agente actúa y genera resultados parciales a lo largo del proceso. El tercer patrón indica validar cada resultado intermedio contra el grafo antes de aceptarlo. Supongamos que el agente concluye que el proveedor Y causó el defecto encontrado en el producto X. El sistema debe confirmar de inmediato que el grafo contenga una relación entre dicho proveedor y dicho producto, y marcar la afirmación como incorrecta si no es así.

def execute_with_validation(step: dict, intermediate_result: str, driver, llm) -> dict:
    # Extract claims from the intermediate result
    claim_extraction_prompt = f"""
    Extract all factual claims from this text as a list of (subject, predicate, object) triples.
    TEXT: {intermediate_result}
    Return as JSON array.
    """
    claims = json.loads(llm.complete(claim_extraction_prompt))

    validation_results = []
    with driver.session() as session:
        for claim in claims:
            result = session.run(
                """
                MATCH (s {name: $subject})-[r]-(o {name: $object})
                WHERE type(r) = $predicate OR $predicate IN r.aliases
                RETURN count(r) AS match_count
                """,
                subject=claim["subject"],
                predicate=claim["predicate"],
                object=claim["object"]
            )
            record = result.single()
            validation_results.append({
                "claim": claim,
                "validated": record["match_count"] > 0
            })

    unvalidated = [v for v in validation_results if not v["validated"]]

    return {
        "result": intermediate_result,
        "validated": len(unvalidated) == 0,
        "flagged_claims": unvalidated
    }

Se podría decir que aquí radica la mayor parte del valor de producción. Se integra un detector de alucinaciones continuas en el bucle de ejecución como parte estructural del proceso de razonamiento y no como algo añadido posteriormente. Las afirmaciones no validadas no hacen que el sistema se caiga; simplemente se marcan para que el agente pueda revisarlas o pasarlas a revisión humana.

4. Autocorrección mediante recorrido de grafos

El cuarto patrón cierra el ciclo. Al detectar una inconsistencia o recibir retroalimentación negativa, el agente no vuelve a intentarlo ciegamente. Recorre el grafo en busca de rutas de razonamiento alternativas, lo que diferencia a un agente que falla de manera adecuada de uno que sigue en bucle indefinidamente con entradas incorrectas.

Supongamos que el agente está investigando por qué falló una verificación de cumplimiento. Partiendo de la entidad que provocó el fallo, sigue las relaciones hacia afuera y encuentra un eslabón faltante, como por ejemplo una actualización regulatoria que aún no se ha vinculado a la categoría de producto afectada. Eso representa una brecha en el grafo y no en el LLM, y el agente puede informarlo explícitamente: la conclusión no pudo validarse porque no existe la relación entre dicha actualización regulatoria y la categoría de producto sanitario. Se trata de un error corregible y no de una alucinación.

Qué hacer al respecto

No se apresure a eliminar la base de datos vectorial. Comience preguntándose dónde es importante la estructura en el dominio en cuestión. Haga una lista de las entidades involucradas y las relaciones entre ellas, luego analice las preguntas que debe responder el agente y cuente cuántas requieren seguir enlaces a través de varios hechos seguidos. Cuando eso describa la mayoría de las preguntas difíciles, el problema subyacente es un problema de grafos.

En cuanto a herramientas, Neo4j es la base de datos de grafos más consolidada, y su SDK para Python se integra bien con LangChain y LlamaIndex. Amazon Neptune y Memgraph son buenas alternativas dependiendo del lugar donde ejecute su sistema. Para la orquestación, considere LangGraph, cuyo manejo de estados se asemeja al recorrido de grafos. El estado de razonamiento del agente ya reside en una estructura de grafos, lo que hace que sea natural incorporar un grafo de conocimiento externo.

Una secuencia viable comienza con el patrón uno, que busca el cambio más mínimo en un sistema RAG que ya esté en uso. Construya el primer grafo basado en las entidades y relaciones más importantes, y luego compare las tasas de alucinación en los prompts fundamentados con su valor de referencia. Si estas disminuyen, lo cual es muy probable, habrá demostrado la viabilidad económica para los tres patrones restantes.

Una advertencia: la construcción de grafos está lejos de ser sencilla. Los datos de origen desorganizados, inconsistentes o mal etiquetados generan un grafo desordenado y un comportamiento del agente igualmente caótico; por lo tanto, la regla de “lo que se ingresa, se obtiene” es aplicable aquí tanto como en cualquier otro lugar. Invierta en la calidad de los datos y en el diseño de la ontología antes de desarrollar la infraestructura de grafos. Un grafo limpio y bien estructurado con 10,000 nodos superará en rendimiento a uno extenso e inconsistente con 10 millones de nodos.

Hacia dónde apunta

Lo que implica esto son agentes que van más allá de la simple recuperación y generación de información. Ellos mantienen un modelo estructurado y en constante evolución del mundo en el que trabajan, y lo utilizan para razonar, planificar y corregirse por sí mismos en entornos abiertos. Lo que diferencia a la IA que solo responde preguntas de la IA que resuelve problemas se debe principalmente a la forma en que se representa el conocimiento, y los grafos se encuentran entre las soluciones estructurales más sólidas disponibles.

Pruebe esto en cualquier sistema: si el agente toma una decisión incorrecta mañana, ¿se podría rastrear la causa exacta? Cuando eso no es posible, la producción funciona a ciegas. Estos cuatro patrones se refieren a agentes que exponen su razonamiento, verifican sus propias conclusiones y cometen errores que se pueden depurar, y esa es la forma que debe adoptar la IA de nivel industrial. Los equipos que lleguen allí primero superarán a aquellos que siguen centrados en las puntuaciones de coseno y se preguntan por qué su agente sigue fallando.

Leer más

  • Construyendo un asistente API agente: desde el hackathon hasta la versión beta — Un asistente de LangGraph que explica una API, escribe código y ejecuta consultas de solo lectura: dos modos, un bucle OData autoreparador, memoria de artefactos, puntuación con LLM-judge y acceso de autoservicio.
  • De Git a GCS para Spark: un pipeline de compilación y carga en Scala SBT listo para agentes — Un pipeline determinista en Python que clona un repositorio en Scala, compila un JAR grande en Java 11 con SBT y lo carga en GCS, diseñado para que un agente ADK pueda ejecutarlo como herramienta.
  • De las evaluaciones a los agentes auto-mejorables: cinco eras en la evaluación de agentes — La evaluación de agentes ahora implica auditar sus huellas. Vea cómo las verificaciones deterministas, los jueces basados en LLM y agentes, el diagnóstico y un mecanismo meta construyen un ciclo de mejora seguro.