Graph RAG 체인 생성

LangChain을 활용한 RAG(검색 증강 생성)

Meri Nova

Machine Learning Engineer

Graph RAG 아키텍처 구축

그래프 데이터베이스.

LangChain을 활용한 RAG(검색 증강 생성)

Graph RAG 아키텍처 구축

문서가 그래프 문서로 변환되어 그래프 데이터베이스에 저장되는 화면.

LangChain을 활용한 RAG(검색 증강 생성)

Graph RAG 아키텍처 구축

Cypher 쿼리로 그래프 문서를 검색하고, 사용자 입력과 자연어 응답이 표시된 화면.

LangChain을 활용한 RAG(검색 증강 생성)

Graph RAG 아키텍처 구축

자연어 입력을 Cypher 쿼리로 변환하고 검색된 그래프 문서를 자연어로 반환하는 변환기.

LangChain을 활용한 RAG(검색 증강 생성)

사용자 입력에서 Cypher 쿼리로

세 개의 노드와 세 개의 관계로 구성된 간단한 그래프. 두 노드는 사람을 나타내고, 나머지 하나는 James가 방문한 위치를 나타냄.

LangChain을 활용한 RAG(검색 증강 생성)

사용자 입력에서 Cypher 쿼리로

"James가 방문한 곳은 어디인가요?"라는 사용자 입력 화면.

LangChain을 활용한 RAG(검색 증강 생성)

사용자 입력에서 Cypher 쿼리로

그래프 스키마와 사용자 입력을 사용해 Cypher 쿼리가 생성되는 화면.

LangChain을 활용한 RAG(검색 증강 생성)

GraphCypherQAChain

사용자 입력을 Cypher 쿼리로 변환하고 자연어 응답을 반환하는 Graph RAG 아키텍처.

LangChain을 활용한 RAG(검색 증강 생성)

GraphCypherQAChain

Cypher 생성 체인과 결과 요약 체인이 강조 표시된 Graph RAG 아키텍처.

LangChain을 활용한 RAG(검색 증강 생성)

스키마 새로 고침

graph.refresh_schema()
print(graph.get_schema)
Node properties:
Document {title: STRING, id: STRING, text: STRING, summary: STRING, source: STRING}
Concept {id: STRING}
Organization {id: STRING}
Relationship properties:

The relationships:
(:Document)-[:MENTIONS]->(:Organization)
(:Concept)-[:DEVELOPED_BY]->(:Person)
LangChain을 활용한 RAG(검색 증강 생성)

그래프 쿼리 실행

from langchain_community.chains.graph_qa.cypher import GraphCypherQAChain

chain = GraphCypherQAChain.from_llm( llm=ChatOpenAI(api_key="...", temperature=0), graph=graph, verbose=True )
result = chain.invoke({"query": "What is the most accurate model?"})
1 https://api.python.langchain.com/en/latest/chains/langchain_community.chains.graph_qa.cypher. GraphCypherQAChain.html
LangChain을 활용한 RAG(검색 증강 생성)

그래프 쿼리 실행

print(f"Final answer: {result['result']}")
> Entering new GraphCypherQAChain chain...
Generated Cypher:
MATCH (m:Model)
RETURN m
ORDER BY m.accuracy DESC
LIMIT 1;
Full Context:
[{'m': {'id': 'Artificial Neural Networks'}}]

> Finished chain.


Final answer: Artificial Neural Networks
LangChain을 활용한 RAG(검색 증강 생성)

사용자 정의

chain = GraphCypherQAChain.from_llm(
    llm=ChatOpenAI(api_key="...", temperature=0), graph=graph, verbose=True
)
  • qa_prompt: 결과 생성을 위한 프롬프트 템플릿
  • cypher_prompt: Cypher 생성을 위한 프롬프트 템플릿
  • cypher_llm: Cypher 생성을 위한 LLM
  • qa_llm: 결과 생성을 위한 LLM
LangChain을 활용한 RAG(검색 증강 생성)

연습해 봅시다!

LangChain을 활용한 RAG(검색 증강 생성)

Preparing Video For Download...