构建混合检索链

使用 LangChain 和 Neo4j 的 Graph RAG

Adam Cowley

Manager, Developer Education at Neo4j

结合检索

组合检索 1

使用 LangChain 和 Neo4j 的 Graph RAG

结合检索

组合检索 2

使用 LangChain 和 Neo4j 的 Graph RAG

让函数可运行

from langchain_core.runnables import RunnableLambda


double_chain = RunnableLambda( lambda input: input["input"] * 2 )
double_chain.invoke({"input": 2})
4
使用 LangChain 和 Neo4j 的 Graph RAG

可运行的直通

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}
使用 LangChain 和 Neo4j 的 Graph RAG

构建问答提示

graphrag_qa_prompt = ChatPromptTemplate.from_messages([

SystemMessagePromptTemplate.from_template(""" You are a helpful assistant answering questions about the play Romeo and Juliet. You are given a question and a context. Question: {input} """),
使用 LangChain 和 Neo4j 的 Graph RAG

构建问答提示

    ...
    SystemMessagePromptTemplate.from_template("""
    The following context has been retrieved from the database using vector search to help
    you answer the question: 

    {vectors}
    """),
使用 LangChain 和 Neo4j 的 Graph RAG

构建问答提示

    ...
    SystemMessagePromptTemplate.from_template("""
    The following data has been retrieved from the knowledge graph using Cypher to 
    answer the question.  

    {records}

    You can treat any information contained from the knowledge graph as authoritative.

    If the information does not exist in this answer, fall back to vector search results.

    If the answer is not included in either just say that you don't know and don't rely
    on pre-existing knowledge."""),
使用 LangChain 和 Neo4j 的 Graph RAG

构建问答链

# 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()
使用 LangChain 和 Neo4j 的 Graph RAG

调用问答链

graphrag_qa_chain.invoke({"input": "Who is Romeo's best friend?"})
Romeo's best friends are Mercutio and Benvolio.
使用 LangChain 和 Neo4j 的 Graph RAG

让我们一起练习吧!

使用 LangChain 和 Neo4j 的 Graph RAG

Preparing Video For Download...