Text-zu-Cypher Graph-RAG mit Neo4j

Graph RAG mit LangChain und Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Natürliche Sprache in Cypher umwandeln

Ein Anwendungsfluss: Nutzereingabe in die App und ein Prompt ans LLM

Graph RAG mit LangChain und Neo4j

Natürliche Sprache in Cypher umwandeln

Ein Anwendungsdiagramm, das die Generierung eines Cypher-Statements zeigt

Graph RAG mit LangChain und Neo4j

Natürliche Sprache in Cypher umwandeln

Die Cypher-Generierung in der App nutzt das Graphdatenbank-Schema

Graph RAG mit LangChain und Neo4j

Natürliche Sprache in Cypher umwandeln

Ein Anwendungsdiagramm: erst Cypher-Generierung, dann Ausführung

Graph RAG mit LangChain und Neo4j

Natürliche Sprache in Cypher umwandeln

Die Anwendung führt das Cypher-Statement aus und gibt die Ergebnisse zurück

Graph RAG mit LangChain und Neo4j

Natürliche Sprache in Cypher umwandeln

Die vom Cypher-Statement abgerufenen Ergebnisse werden an die Anwendung zurückgegeben

Graph RAG mit LangChain und Neo4j

Natürliche Sprache in Cypher umwandeln

Die Ergebnisse werden in den Prompt eingefügt und an das LLM gesendet

Graph RAG mit LangChain und Neo4j

Eine Text-zu-Cypher-Chain erstellen

prompt = SystemMessagePromptTemplate.from_template(""" 
You are an expert Neo4j developer. Use the following database schema to write 
a Cypher statement to answer the user's question...

Schema: {schema}
Question: {question}
""", partial_variables={"schema": graph.schema})


# Compile the chain cypher_chain = cypher_prompt | llm | StrOutputParser()
# Invoke the chain cypher_chain.invoke({"question": "Who wrote Building Knowledge Graphs?"})
MATCH (b:Book {title: "Building Knowledge Graphs"})-[:WRITTEN_BY]->(a:Author) ...
Graph RAG mit LangChain und Neo4j
QA_PROMPT = "You are a helpful assistant. Use the data retrieved from the graph to answer the
user's question. Data: {context}"

answer_prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template(QA_PROMPT),
    HumanMessagePromptTemplate.from_template("Question: {question}")
])
Graph RAG mit LangChain und Neo4j
cypher_qa_chain = (
  # Generate and execute the Cypher to get results
  {

"question": RunnablePassthrough()
"context": text_to_cypher_chain | RunnableLambda(lambda cypher: graph.query(cypher)),
}
# Format prompt and pass to LLM | answer_prompt | answer_llm | StrOutputParser()
)
res = cypher_qa_chain.invoke({"question": "Who wrote Building Knowledge Graphs?"})
Building Knowledge Graphs wurde von Dr. Jesus Barrasa und Dr. Jim Webber geschrieben...
Graph RAG mit LangChain und Neo4j

Lass uns üben!

Graph RAG mit LangChain und Neo4j

Preparing Video For Download...