Graph RAG texte-vers-Cypher avec Neo4j

Graph RAG avec LangChain et Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Conversion du langage naturel en Cypher

Flux d'une application : entrée utilisateur dans l'application et invite envoyée au LLM

Graph RAG avec LangChain et Neo4j

Conversion du langage naturel en Cypher

Schéma d'application chargé de générer une instruction Cypher

Graph RAG avec LangChain et Neo4j

Conversion du langage naturel en Cypher

La génération Cypher dans l'application utilise le schéma de la base de données graphe

Graph RAG avec LangChain et Neo4j

Conversion du langage naturel en Cypher

Schéma d'application montrant la génération Cypher suivie d'une phase d'exécution

Graph RAG avec LangChain et Neo4j

Conversion du langage naturel en Cypher

L'instruction Cypher est exécutée par l'application et les résultats lui sont renvoyés

Graph RAG avec LangChain et Neo4j

Conversion du langage naturel en Cypher

Les résultats récupérés par l'instruction Cypher sont renvoyés à l'application

Graph RAG avec LangChain et Neo4j

Conversion du langage naturel en Cypher

Les résultats sont injectés dans l'invite, prête à être envoyée au LLM

Graph RAG avec LangChain et Neo4j

Créer une chaîne texte-vers-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 avec LangChain et 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 avec LangChain et 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 avec LangChain et Neo4j

Passons à la pratique !

Graph RAG avec LangChain et Neo4j

Preparing Video For Download...