Graph RAG con LangChain y Neo4j
Adam Cowley
Manager, Developer Education at Neo4j
¿Cómo es trabajar en Neo4j?

¿Cómo es trabajar en Neo4j?

¿Cómo es trabajar en Neo4j?

text
text
from langchain_neo4j import Neo4jVector
Neo4jVector.from_documents(): Crea nodos e índice a partir de DocumentsNeo4jVector.from_existing_graph(): Crea un índice sobre combinaciones existentes de etiqueta y propiedad
res = graph.query("""MATCH (s:Scene)WHERE NOT {(s)-[:HAS_LINE]->()}RETURN s.id AS id, s.text AS text""")for scene in res: # Crear trozos a partir de scene['text']
text por "\n\n"Entran Sampson y Gregory armados con espadas..SAMPSON.Gregory, por mi palabra...GREGORY. No, porque entonces deberíamos...SAMPSON. Quiero decir, si estamos coléricos, desenvainaremos...
# Divide el texto en líneas lines = [ line.strip() for line in text.split("\n\n")if "\n" in line]for line in lines: parts = line.split("\n")character = parts[0]text = "\n".join(parts[1:])
# ...Continuando el bucle sobre escenas line_node = Node(type="Line", id=f"{scene.id}-line-{i}", properties={}) character_node = Node(type="Character", id=character, properties={})# (:Scene)-[:HAS_LINE]->(:Line) graph_document.relationships.append( Relationship(source=scene, target=line_node, type="HAS_LINE"))# (:Line)-[:SPOKEN_BY]->(:Character) graph_document.relationships.append(Relationship( source=line_node, target=characters[character], type="SPOKEN_BY"))
from langchain.embeddings import init_embeddings
store = Neo4jVector.from_existing_graph(init_embeddings("openai:text-embedding-3-small"),url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD,node_label="Line",text_node_properties=["text"],embedding_node_property="embedding",index_name="lines",)
# Crear recuperador retriever = store.as_retriever()# Invocar manualmente retriever.invoke("¿Qué piensa Romeo de Julieta?") # [ Document, Document, ... ]
Graph RAG con LangChain y Neo4j