Xây dựng chuỗi truy xuất lai

Graph RAG với LangChain và Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Kết hợp truy xuất

combined_retrieval1.jpg

Graph RAG với LangChain và Neo4j

Kết hợp truy xuất

combined_retrieval2.jpg

Graph RAG với LangChain và Neo4j

Biến hàm thành runnable

from langchain_core.runnables import RunnableLambda


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

Xây dựng prompt Hỏi & Đáp

graphrag_qa_prompt = ChatPromptTemplate.from_messages([

SystemMessagePromptTemplate.from_template(""" Bạn là trợ lý hữu ích trả lời câu hỏi về vở Romeo và Juliet. Bạn được cung cấp một câu hỏi và ngữ cảnh. Câu hỏi: {input} """),
Graph RAG với LangChain và Neo4j

Xây dựng prompt Hỏi & Đáp

    ...
    SystemMessagePromptTemplate.from_template("""
    Ngữ cảnh sau được truy xuất từ cơ sở dữ liệu bằng tìm kiếm vector để giúp
    bạn trả lời câu hỏi:

    {vectors}
    """),
Graph RAG với LangChain và Neo4j

Xây dựng prompt Hỏi & Đáp

    ...
    SystemMessagePromptTemplate.from_template("""
    Dữ liệu sau được truy xuất từ knowledge graph bằng Cypher để
    trả lời câu hỏi.

    {records}

    Bạn có thể coi mọi thông tin từ knowledge graph là đáng tin cậy.

    Nếu thông tin không có trong câu trả lời này, hãy dùng kết quả tìm kiếm vector.

    Nếu cả hai đều không có, chỉ cần nói bạn không biết và không dựa vào
    kiến thức sẵn có."""),
Graph RAG với LangChain và Neo4j

Xây dựng chuỗi Hỏi & Đáp

# 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 với LangChain và Neo4j

Gọi chuỗi Hỏi & Đáp

graphrag_qa_chain.invoke({"input": "Who is Romeo's best friend?"})
Bạn thân nhất của Romeo là Mercutio và Benvolio.
Graph RAG với LangChain và Neo4j

Hãy luyện tập!

Graph RAG với LangChain và Neo4j

Preparing Video For Download...