Text-naar-Cypher Graph RAG met Neo4j

Graph RAG met LangChain en Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Natuurlijke taal omzetten naar Cypher

Een applicatiestroom: gebruikersinvoer naar een app en een prompt naar de LLM

Graph RAG met LangChain en Neo4j

Natuurlijke taal omzetten naar Cypher

Een app-diagram waarin een Cypher-instructie moet worden gegenereerd

Graph RAG met LangChain en Neo4j

Natuurlijke taal omzetten naar Cypher

De Cypher-generatiestap in de app gebruikt het grafdatabaseschema

Graph RAG met LangChain en Neo4j

Natuurlijke taal omzetten naar Cypher

Een app-diagram met cypher-generatie gevolgd door een uitvoeringsfase

Graph RAG met LangChain en Neo4j

Natuurlijke taal omzetten naar Cypher

De Cypher-instructie wordt uitgevoerd door de app en de resultaten gaan terug naar de app

Graph RAG met LangChain en Neo4j

Natuurlijke taal omzetten naar Cypher

De door de Cypher-instructie opgehaalde resultaten worden teruggestuurd naar de applicatie

Graph RAG met LangChain en Neo4j

Natuurlijke taal omzetten naar Cypher

De resultaten worden in de prompt gezet en zijn klaar om naar de LLM te sturen

Graph RAG met LangChain en Neo4j

Een text-to-Cypher-keten bouwen

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 met LangChain en 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 met LangChain en 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 is geschreven door dr. Jesus Barrasa en dr. Jim Webber...
Graph RAG met LangChain en Neo4j

Laten we oefenen!

Graph RAG met LangChain en Neo4j

Preparing Video For Download...