하이브리드 검색 체인 구축

LangChain과 Neo4j로 배우는 Graph RAG

Adam Cowley

Manager, Developer Education at Neo4j

검색 결합

combined_retrieval1.jpg

LangChain과 Neo4j로 배우는 Graph RAG

검색 결합

combined_retrieval2.jpg

LangChain과 Neo4j로 배우는 Graph RAG

함수를 실행 가능하게 만들기

from langchain_core.runnables import RunnableLambda


double_chain = RunnableLambda( lambda input: input["input"] * 2 )
double_chain.invoke({"input": 2})
4
LangChain과 Neo4j로 배우는 Graph RAG

런어블 패스스루

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}
LangChain과 Neo4j로 배우는 Graph RAG

Q&A 프롬프트 만들기

graphrag_qa_prompt = ChatPromptTemplate.from_messages([

SystemMessagePromptTemplate.from_template(""" 당신은 ‘로미오와 줄리엣’에 대한 질문에 답하는 친절한 도우미입니다. 질문과 컨텍스트가 주어집니다. Question: {input} """),
LangChain과 Neo4j로 배우는 Graph RAG

Q&A 프롬프트 만들기

    ...
    SystemMessagePromptTemplate.from_template("""
    다음 컨텍스트는 질문에 답하기 위해 벡터 검색으로 DB에서 가져온 것입니다:
    {vectors}

    """),
LangChain과 Neo4j로 배우는 Graph RAG

Q&A 프롬프트 만들기

    ...
    SystemMessagePromptTemplate.from_template("""
    다음 데이터는 질문에 답하기 위해 Cypher로 지식 그래프에서 가져왔습니다.  
    {records}

    지식 그래프의 정보는 신뢰 가능한 근거로 취급하십시오.

    이 답변에 정보가 없으면 벡터 검색 결과로 보완하십시오.

    둘 다에 없으면 모른다고만 말하고 사전 지식에 의존하지 마십시오."""),

LangChain과 Neo4j로 배우는 Graph RAG

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()
LangChain과 Neo4j로 배우는 Graph RAG

Q&A 체인 호출

graphrag_qa_chain.invoke({"input": "Who is Romeo's best friend?"})
로미오의 가장 친한 친구는 머큐시오와 벤볼리오입니다.
LangChain과 Neo4j로 배우는 Graph RAG

Ayo berlatih!

LangChain과 Neo4j로 배우는 Graph RAG

Preparing Video For Download...