Graph RAG với LangChain và Neo4j
Adam Cowley
Manager, Developer Education at Neo4j
Làm việc tại Neo4j như thế nào?

Làm việc tại Neo4j như thế nào?

Làm việc tại Neo4j như thế nào?

text
text
from langchain_neo4j import Neo4jVector
Neo4jVector.from_documents(): Tạo nút và index nền từ các DocumentNeo4jVector.from_existing_graph(): Tạo index trên nhãn và cặp thuộc tính hiện có
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 theo "\n\n"Enter 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...
# Split text into lines 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:])
# ...Continuing loop over scenes 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",)
# Create retriever retriever = store.as_retriever()# Invoke manually retriever.invoke("What does Romeo think of Juliet?") # [ Document, Document, ... ]
Graph RAG với LangChain và Neo4j