Text-to-Cypher Graph RAG with Neo4j

Graph RAG with LangChain and Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Converting natural language to Cypher

An application flow of user input into an application and a prompt sent to the LLM

Graph RAG with LangChain and Neo4j

Converting natural language to Cypher

An application diagram where it is tasked to generate a Cypher statement

Graph RAG with LangChain and Neo4j

Converting natural language to Cypher

The Cypher generation step in the application uses the graph database schema

Graph RAG with LangChain and Neo4j

Converting natural language to Cypher

An application diagram showing cypher generation followed by an execution phase

Graph RAG with LangChain and Neo4j

Converting natural language to Cypher

The Cypher statement is executed by the application and the results are returned to the application

Graph RAG with LangChain and Neo4j

Converting natural language to Cypher

The results retrieved by the Cypher statement are sent back to the application

Graph RAG with LangChain and Neo4j

Converting natural language to Cypher

The results are injected into the prompt ready to be sent to the LLM

Graph RAG with LangChain and Neo4j

Building a text-to-Cypher chain

prompt = SystemPromptTemplate.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 with LangChain and 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 with LangChain and 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 was written by Dr Jesus Barrasa and Dr Jim Webber...
Graph RAG with LangChain and Neo4j

Let's practice!

Graph RAG with LangChain and Neo4j

Preparing Video For Download...