Crear una cadena de recuperación híbrida

Graph RAG con LangChain y Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Combinar recuperación

combined_retrieval1.jpg

Graph RAG con LangChain y Neo4j

Combinar recuperación

combined_retrieval2.jpg

Graph RAG con LangChain y Neo4j

Hacer funciones ejecutables

from langchain_core.runnables import RunnableLambda


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

Passthroughs ejecutables

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 y Neo4j

Crear un prompt de preguntas y respuestas

graphrag_qa_prompt = ChatPromptTemplate.from_messages([

SystemMessagePromptTemplate.from_template(""" Eres una asistente útil que responde preguntas sobre la obra Romeo y Julieta. Recibes una pregunta y un contexto. Pregunta: {input} """),
Graph RAG con LangChain y Neo4j

Crear un prompt de preguntas y respuestas

    ...
    SystemMessagePromptTemplate.from_template("""
    El siguiente contexto se ha recuperado de la base de datos con búsqueda vectorial para ayudarte
    a responder la pregunta: 

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

Crear un prompt de preguntas y respuestas

    ...
    SystemMessagePromptTemplate.from_template("""
    Los siguientes datos se han recuperado del grafo de conocimiento usando Cypher para 
    responder la pregunta.  

    {records}

    Puedes tratar cualquier información del grafo de conocimiento como autorizada.

    Si la información no está en esta respuesta, recurre a los resultados de la búsqueda vectorial.

    Si la respuesta no está en ninguno de los dos, di que no lo sabes y no te apoyes
    en conocimiento previo."""),
Graph RAG con LangChain y Neo4j

Crear una cadena de preguntas y respuestas

# 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 y Neo4j

Invocar la cadena de preguntas y respuestas

graphrag_qa_chain.invoke({"input": "Who is Romeo's best friend?"})
Los mejores amigos de Romeo son Mercucio y Benvolio.
Graph RAG con LangChain y Neo4j

¡Vamos a practicar!

Graph RAG con LangChain y Neo4j

Preparing Video For Download...