Text-to-Cypher Graph RAG cu Neo4j

Graph RAG cu LangChain și Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Conversia limbajului natural în Cypher

Fluxul unei aplicații: intrarea utilizatorului, aplicația și promptul trimis către LLM

Graph RAG cu LangChain și Neo4j

Conversia limbajului natural în Cypher

Diagramă de aplicație cu sarcina de a genera o instrucțiune Cypher

Graph RAG cu LangChain și Neo4j

Conversia limbajului natural în Cypher

Etapa de generare Cypher din aplicație folosește schema bazei de date graf

Graph RAG cu LangChain și Neo4j

Conversia limbajului natural în Cypher

Diagramă de aplicație care arată generarea Cypher urmată de o fază de execuție

Graph RAG cu LangChain și Neo4j

Conversia limbajului natural în Cypher

Instrucțiunea Cypher este executată de aplicație, iar rezultatele sunt returnate acesteia

Graph RAG cu LangChain și Neo4j

Conversia limbajului natural în Cypher

Rezultatele obținute prin instrucțiunea Cypher sunt trimise înapoi aplicației

Graph RAG cu LangChain și Neo4j

Conversia limbajului natural în Cypher

Rezultatele sunt incluse în prompt, gata de trimis către LLM

Graph RAG cu LangChain și Neo4j

Construirea unui lanț text-to-Cypher

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 cu LangChain și 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 cu LangChain și 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 cu LangChain și Neo4j

Hai să exersăm!

Graph RAG cu LangChain și Neo4j

Preparing Video For Download...