Graph RAG avec LangChain et Neo4j
Adam Cowley
Manager, Developer Education at Neo4j


from langchain_core.runnables import RunnableLambdadouble_chain = RunnableLambda( lambda input: input["input"] * 2 )double_chain.invoke({"input": 2})
4
from langchain_core.runnables import RunnablePassthroughdouble_passthrough = RunnablePassthrough.assign( doubled=RunnableLambda(lambda x: x["input"] * 2) )double_passthrough.invoke({"input": 2})
{"input": 2, "doubled": 4}
graphrag_qa_prompt = ChatPromptTemplate.from_messages([SystemMessagePromptTemplate.from_template(""" Vous êtes un assistant utile répondant à des questions sur la pièce Roméo et Juliette. Vous recevez une question et un contexte. Question : {input} """),
...
SystemMessagePromptTemplate.from_template("""
Le contexte suivant a été récupéré depuis la base via une recherche vectorielle pour vous aider
à répondre à la question :
{vectors}
"""),
...
SystemMessagePromptTemplate.from_template("""
Les données suivantes ont été récupérées du graphe de connaissances avec Cypher pour
répondre à la question.
{records}
Vous pouvez considérer les informations du graphe de connaissances comme faisant autorité.
Si l’information n’existe pas ici, utilisez les résultats de la recherche vectorielle.
Si la réponse n’est dans aucun des deux, dites simplement que vous ne savez pas et ne
vous fiez pas à des connaissances préalables."""),
# line_retriever = Neo4jVector().as_retriever() # text_to_cypher_chain = text_to_cypher_prompt | llm | StrOutputParser() # graph = Neo4jGraph()graphrag_qa_chain = RunnablePassthrough.assign(vectors=RunnableLambda(lambda x: line_retriever.invoke(x["input"])),records=text_to_cypher_chain | graph.query)| graphrag_qa_prompt| llm| StrOutputParser()
graphrag_qa_chain.invoke({"input": "Who is Romeo's best friend?"})
Les meilleurs amis de Roméo sont Mercutio et Benvolio.
Graph RAG avec LangChain et Neo4j