Créer une chaîne de récupération hybride

Graph RAG avec LangChain et Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Combiner les récupérations

retrait_comb1.jpg

Graph RAG avec LangChain et Neo4j

Combiner les récupérations

retrait_comb2.jpg

Graph RAG avec LangChain et Neo4j

Rendre les fonctions exécutables

from langchain_core.runnables import RunnableLambda


double_chain = RunnableLambda( lambda input: input["input"] * 2 )
double_chain.invoke({"input": 2})
4
Graph RAG avec LangChain et Neo4j

Passerelles exécutables

from langchain_core.runnables import RunnablePassthrough


double_passthrough = RunnablePassthrough.assign( doubled=RunnableLambda(lambda x: x["input"] * 2) )
double_passthrough.invoke({"input": 2})
{"input": 2, "doubled": 4}
Graph RAG avec LangChain et Neo4j

Créer une invite de Q&R

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} """),
Graph RAG avec LangChain et Neo4j

Créer une invite de Q&R

    ...
    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}
    """),
Graph RAG avec LangChain et Neo4j

Créer une invite de Q&R

    ...
    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."""),
Graph RAG avec LangChain et Neo4j

Créer une chaîne de Q&R

# 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()
Graph RAG avec LangChain et Neo4j

Appeler la chaîne de Q&R

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

Passons à la pratique !

Graph RAG avec LangChain et Neo4j

Preparing Video For Download...