GraphRAG: 지식 그래프 탐색을 통해 평면 벡터 RAG가 해결하지 못하는 '점 연결하기' 질문에 답하기
요약
GraphRAG는 기존 벡터 기반 RAG가 해결하기 어려운 복잡한 연결 관계 질문을 해결하기 위해 지식 그래프를 활용합니다. LLM을 통해 엔티티와 관계를 추출하여 인덱싱함으로써, 여러 문서에 흩어진 정보를 연결하고 거시적인 주제까지 파악할 수 있습니다.
핵심 포인트
- 기존 RAG의 한계인 멀티 홉(multi-hop) 질문 해결 능력 강화
- 엔티티와 관계를 노드와 엣지로 추출하는 인덱싱 단계 도입
- 그래프 탐색을 통해 단일 청크에 없는 정보 간의 연결 고리 발견
- 커뮤니티 요약을 통해 데이터 전체의 거시적 테마 파악 가능
일반적인 RAG는 문서를 청크 (chunks) 단위로 자르고, 이를 임베딩 (embedding)한 뒤, 쿼리 (query) 시점에 질문과 벡터 거리가 가장 가까운 몇 개의 청크를 반환합니다. 이는 "하나의 사실을 찾아줘"라는 요청에는 훌륭하지만, "A와 C는 어떻게 연관되어 있는가?"와 같은 질문에는 무용지물입니다. 왜냐하면 그 답이 단일 청크 안에 들어있지 않기 때문입니다. 답은 여러 청크에 흩어져 있으며, 그중 어느 것도 개별적으로는 질문과 가깝지 않습니다. GraphRAG (Microsoft Research, 2024)는 텍스트 더미 대신 지식 그래프 (knowledge graph)를 통해 정보를 검색함으로써 이 문제를 해결합니다. 작동 방식은 다음과 같습니다.
평면 RAG는 가장 가까운 청크를 반환하지만, 연결 고리는 놓친다
최근접 이웃 (Nearest-neighbour) 검색에는 _연결 (connection)_이라는 개념이 없습니다. 멀티 홉 (multi-hop) 질문을 던지면 각 홉은 서로 다른 청크에 존재하게 됩니다. A와 C 사이의 가교 역할을 하는 이름을 담은 청크는 사용자의 쿼리와 거의 공통된 단어를 공유하지 않을 수 있으며, 따라서 결코 검색되지 않습니다. 연결 조직 (connective tissue)이 인덱스 (index)에 존재하지 않기 때문입니다. 당신은 질문과 이미 유사한 구절들만 가져올 수 있을 뿐이며, 관계의 사슬은 당신이 타이핑할 수 있는 그 어떤 것과도 유사하지 않습니다.
인덱싱 단계: 엔티티는 노드가 되고, 관계는 엣지가 된다
GraphRAG는 모든 쿼리 이전에 인덱싱 (indexing) 단계를 추가합니다. LLM이 모든 청크를 읽고 (entity)–[relation]→(entity) 트리플 (triples) — 사람, 조직, 모델을 _노드 (nodes)_로, 관계를 _엣지 (edges)_로 추출하며, 동일한 대상에 대한 반복적인 언급을 하나의 노드로 병합합니다. 이 병합이 핵심입니다. 10개의 문서에 걸쳐 이름이 언급된 동일한 엔티티는 10개의 엣지를 가진 하나의 노드가 되며, 이를 통해 평면 RAG에는 없는 문서 간의 링크를 구축합니다. 추출 작업은 쿼리당 발생하는 비용이 아니라, 인덱스 생성 시점에 한 번 지불하는 비용입니다.
출력 결과를 시각화하는 유용한 방법은 다음과 같습니다: 각 청크는 (GraphRAG)–[introduced by]→(Microsoft) 및 (Microsoft)–[builds]→(Azure)와 같은 행을 생성합니다. Microsoft를 언급하는 10개의 청크는 서로 단절된 10개의 사실로 남지 않고, 하나의 Microsoft 노드로 수렴됩니다. 그러면 갑자기 단 하나의 문장에서도 기록된 적 없는 GraphRAG에서 Azure로 이어지는 경로가 존재하게 됩니다.
멀티 홉 = 그래프 탐색 (walk the graph)
이제 "A와 C는 어떻게 연관되어 있는가?"라는 질문은 그래프 탐색 (graph traversal)이 됩니다. 시드 엔티티 (seed entity)에서 시작하여 에지 (edge)를 하나씩 따라가며, 단 하나의 청크 (chunk)에서도 A와 C가 동시에 언급된 적이 없더라도 연결 경로인 A→B→C를 드러냅니다. 답변은 운 좋게 발견된 하나의 청크에서 가져오는 것이 아니라, 경로를 따라 형성된 관계 (relationships)로부터 재구성됩니다. 이것이 "로컬 (local)" 쿼리 모드이며, 그래프가 제 역할을 하는 지점입니다. 즉, 평면적 검색 (flat retrieval)으로는 구조적으로 조립할 수 없는 5단계의 추론 (five hops of reasoning)을 수행합니다.
글로벌 질문을 위한 커뮤니티 요약 (Community summaries)
"이 모든 내용의 주요 테마는 무엇인가?"와 같은 거시적인 질문의 경우, 탐색만으로는 충분하지 않습니다. 따라서 인덱서 (indexer)는 밀접하게 연결된 노드 (nodes)들을 커뮤니티 (communities)로 클러스터링하고, LLM이 각 커뮤니티에 대한 짧은 요약을 작성하게 합니다. 그런 다음 "글로벌 (global)" 쿼리는 이러한 커뮤니티 요약들을 맵리듀스 (map-reduce)하여 전체 코퍼스 (corpus)에 대한 답변으로 변환합니다. 고정된 크기의 청크 검색으로는 이를 수행할 수 없습니다. 왜냐하면 답변이 특정 구절이 아닌 전체의 형태 (shape)에 관한 것이기 때문입니다. 즉, "가까이" 있을 만한 청크 자체가 존재하지 않습니다.
평면 벡터 RAG (flat vector RAG)와의 비교
트레이드오프 (trade-off)는 비용과 최신성입니다. 평면 RAG가 단순히 임베딩 (embedding)하고 저장하며 문서가 변경될 때 재인덱싱 (re-indexing)을 수행하는 것과 달리, GraphRAG는 그래프를 추출, 병합 및 요약하기 위해 사전에 LLM을 통과시키는 비용을 지불합니다. 그 대가로 GraphRAG는 평면 RAG가 실수하는 두 가지 유형의 질문, 즉 멀티 홉 연결 (multi-hop connections)과 글로벌 합성 (global synthesis)에 답할 수 있는 동시에 단순한 로컬 조회도 처리할 수 있습니다. 이는 벡터 RAG를 완전히 대체하는 것이라기보다 그 위에 조인 (joins)을 추가하는 레이어에 가깝습니다. 많은 시스템이 두 방식을 모두 유지하며 각 질문을 적합한 곳으로 라우팅 (route)합니다. 단순 조회는 평면 검색에 머물고, 점들을 연결하거나 거시적인 관점이 필요한 질문은 그래프로 전달됩니다.
기억해야 할 한 가지
Flat RAG는 질문과
유사한 (resemble) 구절을 검색합니다. 반면 GraphRAG는 질문이 언급하는 대상들 사이의
_관계 (relationships)_를 검색합니다. 이것이 핵심적인 차이점이며, 데모에서 동일한 코퍼스 (corpus)를 사용했을 때 Flat RAG는 가장 가까운 청크 (chunk)만을 반환하고 그 외의 부분에 대해서는 답을 내놓지 못하는 반면, GraphRAG는 그래프를 가로지르는 경로로서 5-hop 답변이 밝게 빛나는 것을 보여줄 수 있는 이유입니다.
6개의 문서로부터 그래프가 구축되는 과정을 지켜본 후, Flat RAG는 볼 수 없는 경로를 밝혀내는 5-hop 쿼리를 실행해 보세요:
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기