RAG graphe Texte→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 : saisie utilisateur, puis une 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

L’étape de génération Cypher utilise le schéma de la base de graphes

Graph RAG avec LangChain et Neo4j

Conversion du langage naturel en Cypher

Diagramme d’application : génération Cypher suivie d’une 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êts à être envoyés au LLM

Graph RAG avec LangChain et Neo4j

Créer une chaîne texte→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 a été écrit par Dr Jesus Barrasa et Dr Jim Webber...
Graph RAG avec LangChain et Neo4j

Passons à la pratique !

Graph RAG avec LangChain et Neo4j

Preparing Video For Download...