Membangun rantai retrieval hibrida

Graph RAG dengan LangChain dan Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Menggabungkan retrieval

combined_retrieval1.jpg

Graph RAG dengan LangChain dan Neo4j

Menggabungkan retrieval

combined_retrieval2.jpg

Graph RAG dengan LangChain dan Neo4j

Membuat fungsi dapat dijalankan

from langchain_core.runnables import RunnableLambda


double_chain = RunnableLambda( lambda input: input["input"] * 2 )
double_chain.invoke({"input": 2})
4
Graph RAG dengan LangChain dan 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 dengan LangChain dan Neo4j

Membangun prompt Q&A

graphrag_qa_prompt = ChatPromptTemplate.from_messages([

SystemMessagePromptTemplate.from_template(""" Anda adalah asisten yang membantu menjawab pertanyaan tentang drama Romeo and Juliet. Anda diberi pertanyaan dan konteks. Pertanyaan: {input} """),
Graph RAG dengan LangChain dan Neo4j

Membangun prompt Q&A

    ...
    SystemMessagePromptTemplate.from_template("""
    Konteks berikut diambil dari database dengan pencarian vektor untuk membantu
    Anda menjawab pertanyaan:

    {vectors}
    """),
Graph RAG dengan LangChain dan Neo4j

Membangun prompt Q&A

    ...
    SystemMessagePromptTemplate.from_template("""
    Data berikut diambil dari knowledge graph menggunakan Cypher untuk
    menjawab pertanyaan.

    {records}

    Anggap informasi dari knowledge graph sebagai otoritatif.

    Jika informasi tidak ada di jawaban ini, gunakan hasil pencarian vektor.

    Jika tidak ada di keduanya, katakan Anda tidak tahu dan jangan mengandalkan
    pengetahuan sebelumnya."""),
Graph RAG dengan LangChain dan Neo4j

Membangun rantai 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 dengan LangChain dan Neo4j

Memanggil rantai Q&A

graphrag_qa_chain.invoke({"input": "Who is Romeo's best friend?"})
Sahabat terbaik Romeo adalah Mercutio dan Benvolio.
Graph RAG dengan LangChain dan Neo4j

Ayo berlatih!

Graph RAG dengan LangChain dan Neo4j

Preparing Video For Download...