Graph RAG dengan LangChain dan 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(""" Anda adalah asisten yang membantu menjawab pertanyaan tentang drama Romeo and Juliet. Anda diberi pertanyaan dan konteks. Pertanyaan: {input} """),
...
SystemMessagePromptTemplate.from_template("""
Konteks berikut diambil dari database dengan pencarian vektor untuk membantu
Anda menjawab pertanyaan:
{vectors}
"""),
...
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."""),
# 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?"})
Sahabat terbaik Romeo adalah Mercutio dan Benvolio.
Graph RAG dengan LangChain dan Neo4j