Graph RAG mit LangChain und Neo4j
Adam Cowley
Manager, Developer Education at Neo4j
Wie ist es, bei Neo4j zu arbeiten?

Wie ist es, bei Neo4j zu arbeiten?

Wie ist es, bei Neo4j zu arbeiten?

text erstellen
text erstellen
from langchain_neo4j import Neo4jVector
Neo4jVector.from_documents(): Knoten und Index aus Documents erstellenNeo4jVector.from_existing_graph(): Index für vorhandene Label-/Property-Kombis erstellen
res = graph.query("""MATCH (s:Scene)WHERE NOT {(s)-[:HAS_LINE]->()}RETURN s.id AS id, s.text AS text""")for scene in res: # Create chunks from scene['text']
text per "\n\n" trennenEnter Sampson and Gregory armed with swords..SAMPSON.Gregory, on my word...GREGORY. No, for then we should...SAMPSON. I mean, if we be in choler, we'll draw...
# Text in Zeilen aufteilen 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:])
# ...Schleife über Szenen fortsetzen 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",)
# Retriever erstellen retriever = store.as_retriever()# Manuell aufrufen retriever.invoke("What does Romeo think of Juliet?") # [ Document, Document, ... ]
Graph RAG mit LangChain und Neo4j