Creare una catena di retrieval ibrida

Graph RAG con LangChain e Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Combinare il retrieval

combined_retrieval1.jpg

Graph RAG con LangChain e Neo4j

Combinare il retrieval

combined_retrieval2.jpg

Graph RAG con LangChain e Neo4j

Rendere eseguibili le funzioni

from langchain_core.runnables import RunnableLambda


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

Runnable passthrough

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 con LangChain e Neo4j

Creare un prompt di Q&A

graphrag_qa_prompt = ChatPromptTemplate.from_messages([

SystemMessagePromptTemplate.from_template(""" Sei un'assistente utile che risponde a domande sull'opera Romeo e Giulietta. Ricevi una domanda e un contesto. Domanda: {input} """),
Graph RAG con LangChain e Neo4j

Creare un prompt di Q&A

    ...
    SystemMessagePromptTemplate.from_template("""
    Il contesto seguente è stato recuperato dal database con una ricerca vettoriale per aiutarti
    a rispondere alla domanda: 

    {vectors}
    """),
Graph RAG con LangChain e Neo4j

Creare un prompt di Q&A

    ...
    SystemMessagePromptTemplate.from_template("""
    I dati seguenti sono stati recuperati dal knowledge graph usando Cypher per 
    rispondere alla domanda.  

    {records}

    Puoi considerare attendibili le informazioni del knowledge graph.

    Se qui non trovi le informazioni, usa i risultati della ricerca vettoriale.

    Se non sono presenti in nessuno dei due, di' che non lo sai e non fare affidamento
    su conoscenze pregresse."""),
Graph RAG con LangChain e Neo4j

Creare una catena di Q&A

# 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 con LangChain e Neo4j

Invocare la catena di Q&A

graphrag_qa_chain.invoke({"input": "Who is Romeo's best friend?"})
I migliori amici di Romeo sono Mercuzio e Benvolio.
Graph RAG con LangChain e Neo4j

Passons à la pratique !

Graph RAG con LangChain e Neo4j

Preparing Video For Download...