Base de datos gráfica Neo4j para GraphRAG, instalación, Cypher, vectores y operaciones.

Grafos, Cypher, vectores y endurecimiento de operaciones.

Índice

Neo4j es a lo que recurres cuando las relaciones son los datos. Si tu dominio parece un pizarrón lleno de círculos y flechas, forzarlo en tablas es doloroso.

Neo4j modela esa imagen como un grafo de propiedades y lo consulta con Cypher.

Infraestructura de grafos y datos

Esta guía cubre para qué se usa Neo4j, el comportamiento ACID, Neo4j frente a Amazon Neptune y TigerGraph (y sus pares), GraphRAG con índices vectoriales, rutas de instalación local y en producción, puertos y neo4j.conf, y patrones de Cypher y Python listos para copiar y pegar.

Para un contexto más amplio sobre las opciones de infraestructura de datos, consulta el pilar Infraestructura de datos para sistemas de IA.

¿Para qué se usa Neo4j en cargas de trabajo de grafos en producción

Neo4j está diseñado para datos conectados donde necesitas hacer preguntas conectadas, repetidamente, bajo restricciones de producción. Esa es la respuesta directa a para qué se usa Neo4j en la mayoría de los equipos.

Modelo de datos de grafo de propiedades con nodos, relaciones y propiedades

Neo4j utiliza el modelo de grafo de propiedades: los nodos representan entidades, las relaciones conectan nodos y ambos pueden tener propiedades. Las etiquetas y los tipos de relaciones dan estructura sin encerrarte en un esquema frágil.

Puedes comenzar con un modelo ligero, entregar valor y evolucionar el grafo a medida que surjan nuevas preguntas.

Lenguaje de consulta de grafos Cypher para coincidencia de patrones sin “sopa de joins”

Cypher es declarativo y está construido alrededor de la coincidencia de patrones. Describes las formas de los subgrafos y dejas que el planificador los ejecute.

Si SQL trata sobre conjuntos, Cypher trata sobre subgrafos. Esto es crucial para la navegación multitransito, consultas de rutas, recomendaciones, procedencia y preguntas del tipo “quién tocó qué a través de qué sistema”.

¿Es Neo4j compatible con ACID y por qué deberías importarte

¿Es Neo4j compatible con ACID? Sí. Crear o actualizar relaciones afecta a una estructura coherente; la base de datos mantiene esa consistencia ante fallos y concurrencia.

Diseña aplicaciones de grafos alrededor de garantías transaccionales sólidas a menos que te veas obligado a hacer lo contrario. Esto hace que la depuración y el razonamiento sobre el comportamiento sean mucho más fáciles que asumir una consistencia eventual vaga.

Neo4j vs Amazon Neptune vs TigerGraph: una comparación de ingeniero senior

Una pregunta de tipo “Neo4j frente a X” suele ser “¿En qué ecosistema viviremos durante años?”.

Opinión breve y personal: se trata del tiempo de ingeniería, no de diapositivas de benchmarks.

Producto Modelo central y estilo de consulta Dónde destaca Dónde puede fallar
Neo4j Grafo de propiedades y Cypher Ergonomía sólida para datos conectados, herramientas maduras, grafos más recuperación vectorial La modelización de grafos es una habilidad en la que debes invertir
Amazon Neptune Grafo gestionado en AWS (Gremlin, openCypher, SPARQL para RDF) Contratos y operaciones centrados en AWS La mezcla de lenguajes de consulta puede sentirse impulsada por la plataforma
TigerGraph GSQL y patrones relacionados con OpenCypher Cargas de trabajo de estilo analítico y enfoques de consultas compiladas Modelo mental diferente; Cypher no es compatible en todas partes
JanusGraph Grafo distribuido con backends de almacenamiento externos Código abierto con backends intercambiables Tú operas la pila del backend
ArangoDB Multimodelo (documentos, KV, grafo) Una base de datos para formas mixtas La profundidad del grafo varía en comparación con motores primero-en-grafo
Memgraph Grafo de propiedades, compatible con Cypher Flujos de trabajo de transmisión y datos frescos El comportamiento del motor difiere; la compatibilidad no es identidad

Qué decidir antes de elegir una base de datos de grafos

Elige primero el lenguaje de consulta y el modelo de operaciones.

Si tu equipo quiere Cypher y un flujo de trabajo primero-en-grafo, Neo4j es una opción predeterminada sólida. Si ya tienes experiencia en Gremlin, Neptune o JanusGraph pueden encajar. Si quieres un almacén de datos multimodelo, ArangoDB puede reducir las piezas móviles.

Sé honesto sobre las operaciones. “Ejecutaremos un backend de almacenamiento distribuido” es fácil de decir hasta que te llaman a las 03:00 por problemas de compactación o presión en el JVM.

Neo4j para RAG y GraphRAG: búsqueda vectorial más contexto de grafos

Muchas pilas de RAG comienzan como búsqueda vectorial más prompt. Eso funciona hasta que necesitas procedencia, resolución de entidades, contexto multitransito o desambiguación; entonces corres el riesgo de reconstruir un grafo de conocimiento en el código de la aplicación.

¿Cómo mejora GraphRAG la generación aumentada por recuperación? Utiliza el grafo para extraer contexto estructurado: entidades, relaciones y vecindades que la similitud por sí sola a menudo pasa por alto, lo que ayuda a la fundamentación y la confiabilidad.

Índice vectorial de Neo4j para búsqueda de similitud de incrustaciones

¿Puede Neo4j hacer búsqueda vectorial para RAG? Sí. Neo4j admite índices vectoriales para similitud sobre incrustaciones (comúnmente búsqueda de vecinos más cercanos aproximada estilo HNSW).

Los vectores encuentran “cosas que se parecen”. Por sí mismos, no codifican “cómo se relacionan” en tu dominio. Neo4j te permite combinar similitud con navegación.

Uso de la subcláusula SEARCH para coincidencia de patrones con restricciones vectoriales

La subcláusula SEARCH de Neo4j te permite restringir un patrón MATCH de Cypher usando hits de vecinos más cercanos aproximados de un índice vectorial. Esa es la puente ergonómico para la recuperación híbrida.

Patrón práctico: recuperación vectorial para candidatos, luego expansión de grafo para contexto, filtros y explicación.

GraphRAG en Python con neo4j-graphrag

El paquete neo4j-graphrag de Neo4j para Python conecta un controlador, un recuperador y una interfaz de LLM en un flujo de GraphRAG. Aún puedes usar almacenes vectoriales externos si quieres dividir responsabilidades.

Cómo instalar Neo4j localmente y en producción

¿Cómo instalas Neo4j localmente? Ajusta la opción a tu perfil de riesgo.

Instalar Neo4j con Docker para desarrollo local

Docker es la ruta más rápida hacia un servidor repetible.

# Ejecución mínima. Los datos NO se persisten entre reinicios.
docker run \
  --restart always \
  --publish=7474:7474 --publish=7687:7687 \
  neo4j:5

Para trabajo real, establece una contraseña inicial y monta un volumen de datos.

docker run \
  --restart always \
  --publish=7474:7474 --publish=7687:7687 \
  --env NEO4J_AUTH=neo4j/tu_contrasena \
  --volume=$HOME/neo4j/data:/data \
  neo4j:5

Docker Compose para una configuración amigable para el equipo

services:
  neo4j:
    image: neo4j:5
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=neo4j/tu_contrasena
    volumes:
      - $HOME/neo4j/logs:/logs
      - $HOME/neo4j/config:/config
      - $HOME/neo4j/data:/data
      - $HOME/neo4j/plugins:/plugins
    restart: always

Neo4j Desktop

Neo4j Desktop es excelente para prototipado y enseñanza: proyectos, interfaz gráfica, instancias locales. Para CI y pruebas de integración, Docker suele ganar.

Servidores Linux, Windows o macOS

Para hosts de larga duración, sigue las rutas de instalación oficiales del SO. Eventualmente te importará la gestión de servicios, registros, memoria, copias de seguridad y actualizaciones.

Neo4j AuraDB (gestionado)

Si prefieres lanzar productos a ejecutar bases de datos, AuraDB es la opción de nube gestionada de Neo4j.

Kubernetes con Helm

Si la plataforma es Kubernetes, usa el despliegue basado en Helm y expone Bolt y HTTP a través de servicios. Solo despliega bases de datos en K8s si tu organización puede ejecutar estado de forma fiable allí.

Esenciales de configuración de Neo4j: puertos, conectores y neo4j.conf

La configuración vive en neo4j.conf (clave=valor, comentarios con #). La validación estricta ayuda a detectar errores tipográficos antes de servir tráfico.

Puertos y conectores predeterminados de Neo4j

¿Cuáles son los puertos predeterminados de Neo4j? Bolt 7687, HTTP 7474, HTTPS 7473 por defecto. En producción, expón solo lo que necesitas; a menudo Bolt en una red privada y la interfaz HTTP restringida.

Ejemplo de endurecimiento (adapta IPs y TLS a tu entorno):

server.bolt.listen_address=10.0.1.10:7687
server.http.listen_address=127.0.0.1:7474
server.https.enabled=true
server.https.listen_address=10.0.1.10:7473

Configuraciones de transacción que limitan daños ilimitados

Palancas útiles en revisiones incluyen db.transaction.timeout para consultas descontroladas y db.transaction.concurrent.maximum para evitar el problema de la “multitud de truenos”.

db.transaction.timeout=10s
db.transaction.concurrent.maximum=1000

Ejemplos prácticos de Cypher e índices vectoriales para RAG

Crear un índice vectorial y almacenar incrustaciones

CREATE VECTOR INDEX doc_embeddings
FOR (d:Document) ON (d.embedding)
OPTIONS {indexConfig: {
  `vector.dimensions`: 1536,
  `vector.similarity_function`: "cosine"
}};

Recuperación vectorial y luego expansión de grafo

  1. Búsqueda vectorial para nodos candidatos.
  2. Navegar para vecinos, procedencia y restricciones.
  3. Formatear el contexto para el LLM con límites claros.

Ejemplo usando SEARCH dentro de MATCH (la sintaxis puede variar ligeramente según la versión de Neo4j, consulta el manual para tu versión de servidor):

MATCH (d:Document)
  SEARCH d IN (
    VECTOR INDEX doc_embeddings
    FOR $queryEmbedding
    LIMIT 10
  ) SCORE AS score
MATCH (d)-[:MENTIONS]->(e:Entity)
RETURN d.id AS doc_id, score, collect(distinct e.name) AS entities
ORDER BY score DESC
LIMIT 5;

GraphRAG mínimo en Python

from neo4j import GraphDatabase
from neo4j_graphrag.retrievers import VectorRetriever
from neo4j_graphrag.embeddings import OpenAIEmbeddings
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.generation import GraphRAG

driver = GraphDatabase.driver("neo4j://localhost:7687", auth=("neo4j", "password"))

embedder = OpenAIEmbeddings(model="text-embedding-3-large")
retriever = VectorRetriever(driver, "doc_embeddings", embedder)

llm = OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0})

rag = GraphRAG(retriever=retriever, llm=llm)

response = rag.search(query_text="How do I do similarity search in Neo4j?", retriever_config={"top_k": 5})
print(response.answer)

Casos de uso reales de Neo4j: fraude, recomendaciones y grafos de conocimiento

Detección de fraude y grafos de riesgo

El fraude rara vez es una sola fila. Son patrones a través de cuentas, dispositivos, IPs, comerciantes, identidades y tiempo. Los grafos expresan vecindades y rutas multitransito sin laberintos de joins decenarios.

Recomendaciones con comportamiento y relaciones explícitas

Las recomendaciones de producción combinan candidatos puntuados con inventario, restricciones, jerarquías y explicabilidad. Los grafos te ayudan a devolver rutas sobre las que las personas puedan razonar.

Grafos de conocimiento para RAG y agentes

RAG necesita fundamentación; los agentes necesitan memoria, procedencia y restricciones. Un grafo de conocimiento almacena entidades, relaciones, fuentes e incrustaciones en un solo modelo: ajuste natural para GraphRAG.

¿Cuándo deberías elegir Neo4j sobre Amazon Neptune o TigerGraph?

¿Cuándo deberías elegir Neo4j sobre Amazon Neptune o TigerGraph? Elige Neo4j para un grafo primero-en-Cypher y vectorial + navegación en un solo producto. Elige Neptune cuando AWS y Gremlin o RDF se alineen con tu organización. Elige TigerGraph cuando GSQL y las cargas de trabajo de estilo analítico sean la apuesta principal.

Enlaces útiles