Criando uma cadeia de busca híbrida

Graph RAG com LangChain e Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Combinando recuperação

recuperação combinada 1

Graph RAG com LangChain e Neo4j

Combinando recuperação

recuperação combinada 2

Graph RAG com LangChain e Neo4j

Tornando funções executáveis

from langchain_core.runnables import RunnableLambda


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

Pass-throughs executáveis

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

Criando um prompt de perguntas e respostas

graphrag_qa_prompt = ChatPromptTemplate.from_messages([

SystemMessagePromptTemplate.from_template(""" Você é um assistente prestativo que responde a perguntas sobre a peça Romeu e Julieta. Você recebe uma pergunta e um contexto. Pergunta: {input} """),
Graph RAG com LangChain e Neo4j

Criando um prompt de perguntas e respostas

    ...
    SystemMessagePromptTemplate.from_template("""
    O contexto a seguir foi recuperado do banco de dados por busca vetorial para ajudar
    você a responder à pergunta: 

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

Criando um prompt de perguntas e respostas

    ...
    SystemMessagePromptTemplate.from_template("""
    Os dados a seguir foram recuperados do grafo de conhecimento usando Cypher para 
    responder à pergunta.  

    {records}

    Trate as informações do grafo de conhecimento como autoritativas.

    Se a informação não estiver aqui, use os resultados da busca vetorial.

    Se a resposta não estiver em nenhum dos dois, diga que você não sabe e não confie
    em conhecimento prévio."""),
Graph RAG com LangChain e Neo4j

Criando uma cadeia de perguntas e respostas

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

Invocando a cadeia de perguntas e respostas

graphrag_qa_chain.invoke({"input": "Quem é o melhor amigo de Romeu?"})
Os melhores amigos de Romeu são Mercúcio e Benvólio.
Graph RAG com LangChain e Neo4j

Vamos praticar!

Graph RAG com LangChain e Neo4j

Preparing Video For Download...