Grafos y RAG

Graph RAG con LangChain y Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Conoce a tu instructor

 

  • Manager, Developer Education en Neo4j
  • Formación para desarrolladores con Neo4j GraphAcademy
  • 20+ años de experiencia en desarrollo de software
  • 10+ años de experiencia con Neo4j

 

Foto de Adam

1 https://graphacademy.neo4j.com
Graph RAG con LangChain y Neo4j

La R en RAG

Un diagrama de aplicación con una entrada de usuario añadida a un prompt que se envía a un LLM

Graph RAG con LangChain y Neo4j

La R en RAG

El prompt requiere contexto que proviene de documentos y fuentes de datos

Graph RAG con LangChain y Neo4j

La R en RAG

Estos datos suelen convertirse en vector embeddings

Graph RAG con LangChain y Neo4j

¿Dónde falla la búsqueda semántica?

Los vectores funcionan bien para

  • Preguntas difusas o abiertas

Los vectores no sirven para

  • Preguntas muy específicas o basadas en hechos
  • Consultas numéricas o de coincidencia exacta
  • Consultas lógicas

¿Qué opina Paul Graham sobre la IA generativa?

¿En cuántas startups de IA generativa ha invertido Paul Graham?

Graph RAG con LangChain y Neo4j

Vectores vs. grafos de conocimiento

Texto Vector Embedding
He's just a city boy born [0.12, -0.34, 0.56, 0.78, ..., -0.91]
born and raised in South Detroit [0.22, 0.45, -0.67, 0.11, ..., 0.33]
He took the midnight train [-0.55, 0.89, 0.12, -0.44, ..., 0.67]
going anywhere [0.78, -0.23, 0.45, 0.91, ..., -0.12]

Un diagrama de grafo con las entidades mencionadas en la letra de Don't Stop Believin'. Un chico de un pueblo pequeño, con relaciones BORN y RAISED hacia South Detroit

Graph RAG con LangChain y Neo4j

Vectores vs. grafos de conocimiento

Texto Vector Embedding
He's just a city boy born [0.12, -0.34, 0.56, 0.78, ..., -0.91]
born and raised in South Detroit [0.22, 0.45, -0.67, 0.11, ..., 0.33]
He took the midnight train [-0.55, 0.89, 0.12, -0.44, ..., 0.67]
going anywhere [0.78, -0.23, 0.45, 0.91, ..., -0.12]

Los nodos son: una persona: chico de pueblo pequeño; una ubicación: South Detroit; un tren: Midnight Train; y una ubicación: Anywhere

Graph RAG con LangChain y Neo4j

Vectores vs. grafos de conocimiento

Texto Vector Embedding
He's just a city boy born [0.12, -0.34, 0.56, 0.78, ..., -0.91]
born and raised in South Detroit [0.22, 0.45, -0.67, 0.11, ..., 0.33]
He took the midnight train [-0.55, 0.89, 0.12, -0.44, ..., 0.67]
going anywhere [0.78, -0.23, 0.45, 0.91, ..., -0.12]

Las relaciones BORN y RAISED van de la persona a la ubicación. La relación GOING va del nodo Midnight Train al nodo Anywhere

Graph RAG con LangChain y Neo4j

Grafos de conocimiento y Neo4j

 

  • Neo4j es la base de datos de grafos líder mundial
  • Flexible, con esquema opcional
  • Integración de LangChain langchain-neo4j
  • LCEL: LangChain Expression Language

Los logos de neo4j y langchain

1 https://db-engines.com/en/ranking/graph%20dbms
Graph RAG con LangChain y Neo4j

Los nodos representan cosas

from langchain_neo4j.graphs.graph_document \
  import Node

book = Node(
type="Book",
id=f"9781098127107",
properties={ "title": "Building Knowledge Graphs" }
)

Un nodo Book en un grafo con propiedades para ID y Title

Graph RAG con LangChain y Neo4j

Las relaciones conectan nodos

from langchain_neo4j.graphs.graph_document \
  import Node, Relationship

book = Node(type="Book", id=f"9781098127107")

jesus = Node(type="Person", id="dr-jesus-barrasa")
jim = Node(type="Person", id="chief-scientist")
for author in [jesus, jim]:
    relationship = Relationship(





)

Dos relaciones WRITTEN_BY desde un nodo Book a dos nodos Person que representan a los autores

Graph RAG con LangChain y Neo4j

Las relaciones conectan nodos

from langchain_neo4j.graphs.graph_document \
  import Node, Relationship

book = Node(type="Book", id=f"9781098127107")

jesus = Node(type="Person", id="dr-jesus-barrasa")
jim = Node(type="Person", id="chief-scientist")
for author in [jesus, jim]:
    relationship = Relationship(

source=book,



)

El nodo de origen de la relación WRITTEN_BY es el nodo Book

Graph RAG con LangChain y Neo4j

Las relaciones conectan nodos

from langchain_neo4j.graphs.graph_document \
  import Node, Relationship

book = Node(type="Book", id=f"9781098127107")

jesus = Node(type="Person", id="dr-jesus-barrasa")
jim = Node(type="Person", id="chief-scientist")
for author in [jesus, jim]:
    relationship = Relationship(

source=book,
target=author,


)

El nodo destino de una relación WRITTEN_IN es una persona

Graph RAG con LangChain y Neo4j

Las relaciones conectan nodos

from langchain_neo4j.graphs.graph_document \
  import Node, Relationship

book = Node(type="Book", id=f"9781098127107")

jesus = Node(type="Person", id="dr-jesus-barrasa")
jim = Node(type="Person", id="chief-scientist")
for author in [jesus, jim]:
    relationship = Relationship(

source=book,
target=author,
type="WRITTEN_BY"
properties=dict(...)
)

El diagrama con el Book y dos relaciones WRITTEN_BY hacia los autores para mostrar que un nodo puede tener muchas relaciones.

Graph RAG con LangChain y Neo4j

Conexión a Neo4j

from langchain_neo4j import Neo4jGraph


graph = Neo4jGraph( url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD )
1 https://neo4j.com/docs/getting-started/
Graph RAG con LangChain y Neo4j

Guardar documentos de grafo

from langchain_neo4j.graphs.graph_document import GraphDocument


# Contenedor de Nodes y Relationships doc = GraphDocument(
nodes=[book, jesus, jim],
relationships=[jesus_wrote_book, jim_wrote_book]
)
# Guardar nodos y relaciones en la base de datos graph.add_graph_documents([graph_document])
Graph RAG con LangChain y Neo4j

Entonces, ¿qué es GraphRAG?

El diagrama anterior con contexto de documentos y sus embeddings

Graph RAG con LangChain y Neo4j

Entonces, ¿qué es GraphRAG?

El diagrama anterior con contexto de documentos y un grafo de conocimiento añadido con nodos y relaciones derivados de los documentos

Graph RAG con LangChain y Neo4j

¡Vamos a practicar!

Graph RAG con LangChain y Neo4j

Preparing Video For Download...