Back to Blog
Graph RAGKnowledge GraphNeo4jMicrosoft GraphRAGRAPTORLangChain

0x0A. Graph RAG - 지식 그래프로 RAG를 확장하다

지식 그래프와 그래프 데이터베이스를 활용한 Graph RAG의 원리를 알아보고, Microsoft GraphRAG, RAPTOR, LangChain 구현까지 살펴본다.

기존 RAG는 질문과 의미적으로 유사한 텍스트 조각을 벡터 검색으로 찾아 LLM에 전달하는 구조다. 단일 문서 안에서 답을 찾는 질문에는 잘 작동하지만, 여러 문서에 흩어진 정보를 연결하거나 데이터셋 전체의 맥락을 파악해야 하는 질문 앞에서는 한계를 드러낸다.

"A 회사의 CEO는 누구이며, 그 CEO가 이전에 재직했던 회사는?" 같은 질문을 생각해보자. 벡터 검색으로는 "A 회사의 CEO"에 대한 청크와 "그 사람의 이전 경력"에 대한 청크를 동시에 정확히 찾아내기 어렵다. 정보가 관계로 연결되어 있기 때문이다.

Graph RAG는 이 문제를 해결하기 위해 등장했다. 데이터를 단순한 텍스트 조각이 아니라 지식 그래프(Knowledge Graph) 로 구조화하고, 개체 간의 관계를 탐색하여 더 깊이 있는 답변을 생성하는 기술이다.


지식 그래프란?

지식 그래프(Knowledge Graph) 는 현실 세계의 정보를 개체(노드)관계(엣지) 로 표현한 데이터 모델이다. 지하철 노선도를 떠올리면 직관적이다. 역(노드)과 노선(엣지)이 연결되어 전체 교통망을 형성하듯, 지식 그래프는 정보들이 어떻게 연결되어 있는지를 시각적으로 보여준다.

지식 그래프는 세 가지 구성 요소로 이루어진다. 노드(Node) -- 사람, 장소, 개념 등의 개체. 엣지(Edge) -- 노드 간의 관계 (예: "거주한다", "소유한다"). 속성(Properties) -- 노드나 엣지의 부가 정보 (예: 이름, 날짜).

예를 들어, "홍길동 - 근무한다 - A회사"라는 트리플(Triple)은 하나의 사실을 표현한다. 여기에 "A회사 - 위치한다 - 서울", "홍길동 - 졸업했다 - B대학"이 연결되면, 단편적인 텍스트로는 파악하기 어려운 관계의 네트워크가 만들어진다.


그래프 데이터베이스

지식 그래프를 저장하고 효율적으로 쿼리하기 위해서는 전용 데이터베이스가 필요하다. 이것이 그래프 데이터베이스(Graph Database) 다.

RDB와의 차이

관계형 데이터베이스(RDB)에서 "A의 친구의 친구의 직장"을 찾으려면 여러 테이블을 JOIN으로 연결해야 한다. 테이블이 많아질수록 성능이 급격히 저하된다. 반면 그래프 데이터베이스는 관계 자체를 직접 저장하기 때문에, 연결된 데이터를 따라가며 탐색하는 속도가 매우 빠르다.

주요 그래프 모델

그래프 데이터베이스는 크게 두 가지 모델로 나뉜다.

  • 프로퍼티 그래프(Property Graph): 노드와 엣지에 속성을 자유롭게 추가할 수 있는 유연한 모델이다. 대표적으로 Neo4j가 있으며, 쿼리 언어로 Cypher를 사용한다.
  • RDF(Resource Description Framework): W3C 표준 모델로, "주어-술어-목적어" 구조의 트리플로 데이터를 표현한다. 쿼리 언어로 SPARQL을 사용한다.

Graph RAG 구현에서는 프로퍼티 그래프 기반의 Neo4j가 가장 널리 사용된다. Cypher 쿼리 언어가 직관적이고, LangChain 등 주요 프레임워크와의 통합이 잘 되어 있기 때문이다.


Graph RAG의 핵심 아이디어

Graph RAG는 기존 RAG에 지식 그래프를 결합한 것이다. 단순한 문서 검색을 넘어, 데이터 간의 관계와 맥락을 활용하여 LLM의 답변 품질을 끌어올린다.

Graph RAG가 기존 RAG 대비 가지는 핵심 장점은 네 가지다.

  • 정확하고 정교한 검색: 그래프를 탐색하며 숨겨진 관계까지 찾아낸다. 벡터 유사도만으로는 발견하기 어려운 간접적 연결도 포착할 수 있다.
  • 풍부한 맥락 이해: 개별 청크만으로는 알 수 없는 깊은 맥락을 제공한다. 정보가 고립된 조각이 아니라 연결된 네트워크로 존재하기 때문이다.
  • 높은 설명 가능성: 답변의 근거를 그래프 경로를 통해 추적할 수 있다. "왜 이런 답변이 나왔는가?"에 대해 노드와 엣지의 경로로 설명할 수 있으므로 신뢰도가 높아진다.
  • 다단계 추론: 복잡하게 연결된 정보를 바탕으로 여러 단계의 추론이 가능하다. "A는 B에 속하고, B는 C와 관련이 있으니, A와 C의 관계는..."과 같은 논리적 사슬을 따라갈 수 있다.

주요 디자인 패턴

Graph RAG를 구현하는 방식은 다양하다. 언제, 어떻게 그래프를 활용하는지에 따라 크게 네 가지 패턴으로 구분할 수 있다.

1. 지식 그래프 + 의미 기반 클러스터링

사용자 질의에 대해 지식 그래프와 그래프 머신러닝을 활용하여 정보를 검색하고, 의미적 클러스터로 조직화하는 방식이다. 관련 개체들을 군집으로 묶어 전체적인 주제 구조를 파악하는 데 유리하다.

2. 지식 그래프 + 벡터 DB 통합

가장 일반적인 패턴이다. 벡터 검색으로 관련 문서 조각을 먼저 찾고, 지식 그래프로 그 주변의 맥락 정보를 보강하여 LLM에 전달한다. 벡터 검색의 편의성과 그래프의 맥락 파악 능력을 결합한 하이브리드 방식이다.

3. 그래프 강화 하이브리드 검색

벡터 검색, 키워드 검색, 그래프 탐색 결과를 모두 합쳐 순위를 재조정하고 종합적인 컨텍스트를 구성한다. 각 검색 방식의 장단점을 상호 보완하여 검색 품질을 극대화한다.

4. 지식 그래프 기반 질의 확장

검색 이전에 사용자의 질문을 분석하여 지식 그래프에서 관련 개체와 관계를 찾아내고, 이를 바탕으로 쿼리를 더 풍부하게 재구성한다. 검색 자체의 정확도를 높이는 전처리 방식이다.


LangChain으로 구현하는 Graph RAG

LangChain은 Graph RAG를 비교적 간단하게 구현할 수 있는 도구를 제공한다. 전체 흐름은 네 단계로 진행된다.

작동 방식

  1. 그래프 생성: LLM을 이용해 문서 전체를 분석하여 핵심 개체(인물, 장소, 개념 등)와 이들 간의 관계(소속, 원인, 결과 등)를 자동으로 추출하여 지식 그래프를 구축한다.
  2. 그래프 검색: 사용자의 질문이 들어오면, 질문에서 핵심 개체를 파악한 뒤, 지식 그래프에서 해당 개체와 연결된 주변 노드 및 관계들을 탐색하여 관련성 높은 하위 그래프(Sub-graph) 를 찾는다.
  3. 컨텍스트 재구성: 검색된 하위 그래프에 포함된 모든 정보(노드, 엣지)를 종합하여 하나의 풍부한 텍스트 컨텍스트로 재구성한다.
  4. 답변 생성: 재구성된 컨텍스트를 LLM에 전달하여, 정보들 간의 관계를 바탕으로 깊이 있는 답변을 생성한다.

구현 핵심 포인트

그래프 자동 생성 단계에서는 LLMGraphTransformer를 사용한다. 텍스트 문서로부터 노드(개체)와 엣지(관계)를 자동으로 추출하는 컴포넌트로, LLM이 텍스트를 읽고 지식 그래프의 구성 요소를 식별하도록 지시한다.

질의 기반 검색 단계에서는 사용자의 질문을 다시 LLM에 보내 검색의 시작점이 될 핵심 개체를 추출한다. 그 다음, Neo4j 같은 그래프 데이터베이스에 Cypher 쿼리를 실행하여 해당 개체와 연결된 이웃 정보(Neighborhood)를 가져온다.

정보 통합 단계에서는 검색된 그래프의 노드와 관계 데이터를 평탄한 텍스트로 변환하여 최종 답변 생성을 위한 컨텍스트를 구성한다.

장점

  • 관계 추론 능력: 여러 문서나 문단에 흩어져 있는 정보를 연결하여 복잡한 관계를 추론하는 질문에 강하다.
  • 정확성 향상: 정보가 구조화되어 있어 모호함을 줄이고, 사실에 기반한 더 정확한 답변을 제공한다.
  • 문맥 이해 증진: 개별 정보 조각이 아닌 전체적인 관계 속에서 정보를 파악하므로, 더 깊이 있는 문맥 이해가 가능하다.

RAPTOR: 계층적 요약 트리

RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval) 는 Graph RAG와는 조금 다른 접근이지만, 정보를 계층적으로 구조화한다는 점에서 맥락을 같이 한다.

RAPTOR의 핵심 아이디어는 문서의 내용을 재귀적으로 클러스터링하고 요약하여, 세부 정보부터 전체 개요까지 다루는 다층적인 트리 구조의 인덱스를 구축하는 것이다.

작동 방식

트리 구축 (인덱싱 시):

  1. (Level 0) 원본 텍스트를 청크로 분할한다.
  2. (반복) 현재 레벨의 텍스트들을 임베딩하고, 의미 기반으로 클러스터링한 뒤, 각 클러스터를 LLM으로 요약하여 상위 레벨의 노드를 생성한다. 이 과정을 반복하면 점점 추상화된 요약이 위로 쌓인다.

통합 검색 (질의 시):

원본 청크와 모든 레벨의 요약이 저장된 단일 벡터 데이터베이스에서 질문과 가장 관련성 높은 노드들을 검색한다. 특정 레벨을 필터링하지 않고 전체를 대상으로 검색하므로, 질문의 추상화 수준에 가장 적합한 정보를 자동으로 찾아낸다.

구현 핵심

  • 트리 생성 로직: 루프를 사용하여 텍스트를 임베딩하고, GaussianMixture로 클러스터링한 뒤, LLM 체인을 통해 각 클러스터를 요약하는 과정을 반복하여 계층 구조를 구축한다.
  • 단일 벡터 DB: 모든 계층의 노드(원본 청크, 요약)는 level 메타데이터와 함께 하나의 FAISS 벡터 데이터베이스에 통합 관리된다.

장점

  • 다중 해상도 검색: 질문의 성격에 따라 세부적인 내용과 전체적인 맥락을 모두 효과적으로 탐색한다. "이 문서의 핵심 주제는?"이라는 추상적 질문에는 상위 레벨 요약이, "3분기 매출 수치는?"이라는 구체적 질문에는 원본 청크가 검색된다.
  • 확장성: 매우 긴 문서나 대량의 문서를 계층적으로 처리하므로 대규모 데이터셋에 강하다.
  • 문맥 인식: 단편적인 청크가 아닌, 잘 요약된 상위 레벨의 문맥을 함께 활용하여 답변의 질을 높인다.

Microsoft GraphRAG: 커뮤니티 기반 접근

Microsoft GraphRAG는 단순히 지식 그래프를 생성하는 것을 넘어, 그래프 분석 알고리즘을 통해 정보들 간의 커뮤니티(밀집된 주제 군집)를 자동으로 식별하는 고도화된 기법이다.

Microsoft GraphRAG의 강점은 "이 데이터셋의 주요 주제는?"과 같은 전체 데이터에 대한 포괄적인 질문(Global Query) 에 매우 효과적이라는 점이다.

작동 방식

  1. 그래프 생성: LLM이 텍스트에서 개체와 관계를 추출하여 기본 지식 그래프를 구축한다.
  2. 커뮤니티 탐지: 그래프 이론 알고리즘(Leiden 등)을 적용하여, 그래프 내에서 서로 밀접하게 연결된 노드들의 클러스터(커뮤니티)를 자동으로 찾아낸다.
  3. 커뮤니티 요약: LLM을 이용해 탐지된 각 커뮤니티가 어떤 주제에 대한 것인지 설명하는 고수준의 요약을 생성한다. 이 요약 정보도 인덱싱된다.
  4. 계층적 검색: 질문의 성격에 따라 검색 전략이 달라진다.
    • Local 질문: 특정 개체에 대한 질문은 지식 그래프의 해당 노드 주변을 직접 탐색한다.
    • Global 질문: 문서 전체에 대한 질문은 먼저 커뮤니티 요약을 검색하여 가장 관련 있는 주제 군집을 찾고, 그 내용을 바탕으로 종합적인 답변을 생성한다.

여기에 더해 DRIFT 검색을 통해 전체적인 맥락(Global)과 세부 정보(Local)를 넘나들며 탐색하는 것도 가능하다.

구현

Microsoft의 graphrag 라이브러리와 CLI 도구를 사용하면 전체 프로세스를 자동화할 수 있다.

  • 인덱싱 단계: graphrag.index 명령어 하나로 텍스트로부터 그래프 생성, 커뮤니티 탐지, 커뮤니티 요약에 이르는 전체 과정을 한 번에 처리한다. 복잡한 내부 로직을 직접 구현할 필요가 없다.
  • 질의 단계: graphrag.query 명령어로 검색을 수행하며, local 또는 global 옵션을 지정하여 질문의 성격에 맞는 최적의 검색 전략을 선택한다.

장점

  • 글로벌 이해 능력: 문서 전체를 요약하거나 여러 부분에 흩어진 정보를 종합해야 하는 광범위한 질문에 매우 효과적이다.
  • 효율적인 검색: Global 질문 시 전체 그래프가 아닌, 훨씬 작고 요약된 커뮤니티 요약을 먼저 검색하므로 빠르고 효율적이다.
  • 자동화된 인사이트 도출: 데이터 내에 숨겨진 주제 클러스터를 자동으로 발견하고 요약해주므로, 인간 분석가처럼 데이터의 핵심을 파악할 수 있다.

AWS GraphRAG Toolkit

AWS 환경에서 Graph RAG를 구현해야 한다면 AWS GraphRAG Toolkit이 좋은 선택지다. AWS 서비스 생태계와 통합된 오픈소스 프레임워크로, 독특한 3계층 그래프 모델을 사용한다.

3계층 그래프 모델

  1. 계통(Lineage) 계층: 원본 문서의 출처와 구조를 추적한다. "이 정보가 어디서 왔는가?"를 항상 알 수 있게 해준다.
  2. 개체-관계(Entity-Relationship) 계층: 문서에서 추출한 개체와 관계를 저장하는 핵심 지식 그래프다.
  3. 요약(Summarization) 계층: 정보를 다양한 수준(주제, 서술, 사실)으로 추상화하여 저장한다. 문서 간의 글로벌 연결성을 확보하는 데 중요한 역할을 한다.

색인 과정 (Indexing)

  1. 추출(Extract): LLM이 문서를 분석하여 개체, 관계, 주제, 서술, 사실 등을 구조화된 데이터로 뽑아낸다.
  2. 구축(Build): 추출된 데이터를 그래프 데이터베이스와 벡터 스토어에 저장하여 검색 가능한 상태로 만든다.

검색 과정 (Retrieval)

AWS GraphRAG Toolkit은 두 가지 검색기(Retriever)를 제공한다.

  • TraversalBasedRetriever: 벡터 검색으로 시작(Top-down)하거나 키워드로 시작(Bottom-up)하여 그래프를 직접 탐색하는 방식이다.
  • SemanticGuidedRetriever: 벡터 유사도 검색, 키워드 랭킹, 빔 서치(Beam Search) 등 여러 전략을 결합한 하이브리드 방식이다. 관계를 따라 가장 유망한 경로를 탐색하는 빔 서치가 특징적이다.

정리

Graph RAG의 핵심 인사이트를 정리하면 다음과 같다.

  • 구조의 힘: 그래프 구조는 단순 벡터 검색이 놓치는 관계와 맥락을 보존하는 데 결정적인 역할을 한다. 정보를 고립된 조각이 아니라 연결된 네트워크로 다루는 것이 Graph RAG의 출발점이다.
  • 하이브리드 전략: 대부분의 성공적인 접근법은 벡터 검색, 키워드 검색, 그래프 탐색을 결합하여 사용한다. 하나의 검색 방식에 의존하기보다, 각 방식의 강점을 조합하는 것이 실전에서 더 효과적이다.
  • 계층적 추상화: RAPTOR의 요약 트리, Microsoft GraphRAG의 커뮤니티 요약, AWS Toolkit의 요약 계층 모두 정보를 다양한 추상화 수준으로 구조화한다는 공통점을 가진다. 질문의 의도에 맞는 최적의 깊이에서 정보를 제공할 수 있기 때문이다.
  • LLM의 확장된 역할: LLM은 이제 단순히 답변만 생성하는 것이 아니라, 데이터 추출, 요약, 쿼리 확장 등 RAG 파이프라인의 모든 단계에서 핵심적인 역할을 수행한다. Graph RAG에서 지식 그래프를 자동 구축하는 것 자체가 LLM의 능력에 의존한다.