Graph RAG với LangChain và Neo4j
Adam Cowley
Manager, Developer Education at Neo4j


from langchain_core.runnables import RunnableLambdadouble_chain = RunnableLambda( lambda input: input["input"] * 2 )double_chain.invoke({"input": 2})
4
from langchain_core.runnables import RunnablePassthroughdouble_passthrough = RunnablePassthrough.assign( doubled=RunnableLambda(lambda x: x["input"] * 2) )double_passthrough.invoke({"input": 2})
{"input": 2, "doubled": 4}
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} """),
...
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}
"""),
...
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ó."""),
# 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()
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