Text-to-Cypher Graph RAG med Neo4j

Graph RAG med LangChain och Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Konvertera naturligt språk till Cypher

Ett applikationsflöde där användarinput skickas till en applikation och en prompt skickas till LLM:en

Graph RAG med LangChain och Neo4j

Konvertera naturligt språk till Cypher

Ett applikationsdiagram där uppgiften är att generera ett Cypher-uttryck

Graph RAG med LangChain och Neo4j

Konvertera naturligt språk till Cypher

Cypher-genereringsteget i applikationen använder grafsdatabasens schema

Graph RAG med LangChain och Neo4j

Konvertera naturligt språk till Cypher

Ett applikationsdiagram som visar Cypher-generering följt av ett exekveringssteg

Graph RAG med LangChain och Neo4j

Konvertera naturligt språk till Cypher

Cypher-uttrycket exekveras av applikationen och resultaten returneras till applikationen

Graph RAG med LangChain och Neo4j

Konvertera naturligt språk till Cypher

Resultaten som hämtats av Cypher-uttrycket skickas tillbaka till applikationen

Graph RAG med LangChain och Neo4j

Konvertera naturligt språk till Cypher

Resultaten injiceras i prompten och är redo att skickas till LLM:en

Graph RAG med LangChain och Neo4j

Bygg en text-till-Cypher-kedja

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 med LangChain och 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 med LangChain och 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 med LangChain och Neo4j

Nu kör vi en övning!

Graph RAG med LangChain och Neo4j

Preparing Video For Download...