Eine hybride Retrieval-Chain erstellen

Graph RAG mit LangChain und Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Retrieval kombinieren

Kombiniertes Retrieval 1

Graph RAG mit LangChain und Neo4j

Retrieval kombinieren

Kombiniertes Retrieval 2

Graph RAG mit LangChain und Neo4j

Funktionen ausführbar machen

from langchain_core.runnables import RunnableLambda


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

Runnable-Passthroughs

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 mit LangChain und Neo4j

Ein Q&A-Prompt erstellen

graphrag_qa_prompt = ChatPromptTemplate.from_messages([

SystemMessagePromptTemplate.from_template(""" Du bist eine hilfreiche Assistenz für Fragen zu Romeo und Julia. Du erhältst eine Frage und einen Kontext. Frage: {input} """),
Graph RAG mit LangChain und Neo4j

Ein Q&A-Prompt erstellen

    ...
    SystemMessagePromptTemplate.from_template("""
    Der folgende Kontext wurde per Vektorsuche aus der Datenbank abgerufen, um
    deine Frage zu beantworten:

    {vectors}
    """),
Graph RAG mit LangChain und Neo4j

Ein Q&A-Prompt erstellen

    ...
    SystemMessagePromptTemplate.from_template("""
    Die folgenden Daten wurden per Cypher aus dem Knowledge Graph abgerufen,
    um die Frage zu beantworten.

    {records}

    Du kannst Informationen aus dem Knowledge Graph als maßgeblich behandeln.

    Falls diese Antwort die Info nicht enthält, nutze die Vektorsuche als Fallback.

    Wenn die Antwort in beiden nicht enthalten ist, sag einfach, dass du es nicht weißt,
    und verlasse dich nicht auf Vorwissen."""),
Graph RAG mit LangChain und Neo4j

Eine Q&A-Chain erstellen

# 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 mit LangChain und Neo4j

Die Q&A-Chain aufrufen

graphrag_qa_chain.invoke({"input": "Who is Romeo's best friend?"})
Romeos beste Freunde sind Mercutio und Benvolio.
Graph RAG mit LangChain und Neo4j

Lass uns üben!

Graph RAG mit LangChain und Neo4j

Preparing Video For Download...