Graph RAG with LangChain and Neo4j
Adam Cowley
Manager, Developer Education at Neo4j







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) ...
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}")
])
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