GraphRAG
GraphRAG는 문서에서 지식 그래프를 구축한 다음 엔터티, 관계, 커뮤니티 요약을 검색하여 여러 단계의 추론이 필요한 질문과 전체적인 질문에 답합니다.
GraphRAG(그래프 검색 증강 생성)는 벡터 검색으로 찾은 텍스트 청크 대신 또는 텍스트 청크와 함께 지식 그래프에서 정보를 검색하는 검색 증강 생성(RAG) 방식입니다. 먼저 대규모 언어 모델(LLM)이 문서 모음에서 사람, 기업, 부품, 장소와 같은 개체와 이들 간의 관계를 추출합니다. 질문을 받으면 시스템은 연결된 개체, 관계 경로, 그래프 전체 클러스터의 요약을 검색해 LLM에 문맥으로 제공합니다. 이 이름은 2024년에 발표되고 오픈소스 구현과 함께 공개된 Microsoft Research의 질의 중심 요약을 위한 GraphRAG 접근 방식과 가장 밀접하게 관련되어 있으며, 그래프에서 정보를 검색하는 모든 RAG 시스템을 가리키기도 합니다.
벡터 RAG에 그래프가 필요한 이유#
표준 RAG는 문서 청크를 임베딩으로 변환해 벡터 데이터베이스에 저장하고, 질문과 가장 유사한 몇 개의 청크를 검색합니다. 이 방식은 하나의 구절로 답할 수 있는 질문에는 적합하지만, 다음 두 가지 유형의 질문에는 어려움을 겪습니다:
- 다단계 질문: 답이 문서 전반에 흩어진 사실에 달려 있고, 그 사실들은 공유 개체를 통해서만 연결되어 있습니다. 예를 들어 폭풍으로 폐쇄된 항구 인근의 공급업체에 어떤 공장들이 의존하는지 묻는 경우가 있습니다. 어떤 단일 청크도 질문 전체와 유사하지 않습니다.
- 전역 질문: "사고 보고서 5,000건 전반의 주요 주제는 무엇인가요?"와 같이 전체 말뭉치에 대한 질문은 모든 문서의 정보가 필요하지만, 벡터 검색은 상위 몇 개 청크만 반환합니다.
그래프는 사실 간의 연결을 명시적으로 저장하므로 검색 중 해당 연결을 따라갈 수 있으며, 그래프 커뮤니티의 요약은 전체 말뭉치를 포괄합니다.
GraphRAG의 작동 방식#
Microsoft의 GraphRAG는 네 단계로 인덱스를 구축합니다. 먼저 문서를 텍스트 단위로 나누고 LLM에 각 단위에서 개체, 관계, 주장을 추출하도록 요청합니다. 이는 LLM 기반 개체명 인식 및 관계 추출 방식입니다. 여러 단위에 등장하는 개체에 대한 설명을 하나의 노드로 병합합니다. 그런 다음 계층적 Leiden 커뮤니티 탐지를 실행해 밀접하게 연결된 개체를 중첩 커뮤니티로 그룹화하고, LLM을 사용해 모든 수준의 각 커뮤니티에 대한 요약 보고서를 작성합니다.
그다음 쿼리는 두 가지 경로 중 하나로 처리됩니다:
- 로컬 검색: 질문에 언급된 개체에서 시작해 이웃 개체, 관계, 커뮤니티 보고서, 해당 개체를 언급하는 원본 텍스트 단위를 수집합니다.
- 전역 검색: 커뮤니티 보고서를 대상으로 맵리듀스 방식으로 처리합니다. 각 보고서는 관련성 점수와 함께 부분 답변을 생성하며, 가장 관련성이 높은 부분 답변을 결합해 최종 응답을 만듭니다.
약 100만 토큰 규모의 데이터 세트에서 논문은 전역 검색이 기존 RAG 기준 모델보다 말뭉치 전체를 다루는 질문에 훨씬 더 포괄적이고 다양한 답변을 생성했다고 보고했습니다.
로컬 검색의 핵심은 그래프 순회입니다. NetworkX를 사용하는 다음 Python 예제는 여러 문서에서 LLM이 추출할 수 있는 트리플을 저장하고 질문의 개체에서 바깥쪽으로 관계를 따라갑니다:
import networkx as nx
# Entity-relationship triples that an LLM extracted from separate documents
triples = [
("Typhoon", "closed", "Kaohsiung port"),
("Kaohsiung port", "ships parts for", "Supplier A"),
("Supplier A", "makes", "bearing B-17"),
("bearing B-17", "is used at", "Ohio plant"),
("Texas plant", "uses", "motor M-4"),
]
graph = nx.DiGraph()
for head, relation, tail in triples:
graph.add_edge(head, tail, relation=relation)
# Question: "Which plants could the typhoon disrupt?"
# Local search: follow relationships outward from the entity named in the question
edges = nx.bfs_edges(graph, "Typhoon")
context = [f"{head} {graph[head][tail]['relation']} {tail}" for head, tail in edges]
print("\n".join(context))출력에는 "Typhoon closed Kaohsiung port"에서 "bearing B-17 is used at Ohio plant"까지 이어지는 4단계 경로가 포함됩니다. 이 연결 관계는 어떤 단일 원본 문서에도 명시되어 있지 않으며, 관련 없는 Texas 공장은 제외됩니다. LLM은 이 문장들을 그라운딩 문맥으로 받아 Ohio 공장이 위험에 처해 있다고 답할 수 있습니다.
GraphRAG와 관련 접근 방식 비교#
- 지식 그래프: 개체와 유형이 지정된 관계로 구성된 데이터 구조입니다. GraphRAG는 LLM의 컨텍스트를 검색하기 위해 지식 그래프를 특별히 구축하거나 기존 지식 그래프를 재사용합니다.
- 하이브리드 검색: 텍스트 청크에서 키워드 검색과 벡터 검색을 결합합니다. 많은 프로덕션 GraphRAG 시스템은 그래프 탐색과 하이브리드 검색을 함께 실행합니다.
- 에이전트형 RAG: 에이전트가 여러 단계에 걸쳐 무엇을 언제 검색할지 결정합니다. 그래프 쿼리는 에이전트가 사용하는 도구 중 하나가 될 수 있습니다.
- 그래프 신경망 (GNNs): 링크 예측과 같은 작업을 위해 학습 과정에서 그래프 구조로부터 학습합니다. GraphRAG는 학습 없이 검색 시점에 그래프를 사용합니다.
실제 적용 사례#
- 신약 개발: 유전자, 단백질, 화합물, 질병을 연결하는 그래프를 사용하면 연구자는 수천 편의 논문을 넘나드는 질문을 할 수 있습니다. 예를 들어 질병 경로의 단백질을 표적으로 하는 승인된 약물이 무엇인지 물을 수 있습니다.
- 금융 조사: 분석가는 페이퍼 컴퍼니와 공통 이사를 통해 소유 관계를 추적하고, 의심스러운 거래의 배후 네트워크를 LLM에 요약해 달라고 요청합니다.
- 공급망 위험: 공급업체, 부품, 사업장, 운송 경로를 연결하면 어떤 제품이 단일 공장에 의존하는지와 같은 질문에 답할 수 있습니다.
- 엔터프라이즈 지식: 보고서, 티켓, 회의록으로 구성된 대규모 컬렉션을 주제별로 검색할 수 있으며, 커뮤니티 요약을 통해 컬렉션 전체에 대한 질문에 답할 수 있습니다.
그래프는 카메라가 보는 내용도 담을 수 있으며, 이는 동영상을 대상으로 하는 멀티모달 RAG의 기반입니다. 두 가지 언급이 동일한 대상을 가리키는지 판단하는 개체 식별은 동영상에서 객체 추적이 수행하는 작업과 같습니다. Ultralytics YOLO26 추적은 각 사람이나 차량에 프레임 전반에서 유지되는 ID를 할당합니다. 따라서 동영상 그래프는 프레임마다 노드를 하나씩 저장하는 대신 추적된 객체마다 노드를 하나씩 저장하고, 다른 객체 옆에 언제 어디에 나타났는지 간선을 통해 기록할 수 있습니다.
비용 및 절충점#
인덱싱은 주요 비용입니다. LLM이 모든 텍스트 단위를 읽어 개체를 추출한 뒤 모든 커뮤니티 보고서를 작성하므로, 대규모 코퍼스는 임베딩보다 인덱싱 비용이 훨씬 높습니다. 같은 이름을 가진 서로 다른 두 사람을 하나로 합치는 등의 추출 오류는 해당 인물과 관련된 모든 답변에 전파되며, 문서가 변경되면 그래프에서 영향을 받은 부분을 다시 추출하고 요약해야 합니다. Microsoft의 LazyGraphRAG는 명사구 추출과 그래프 통계를 사용해 개념 그래프를 구축하고 모든 LLM 사용을 쿼리 시점으로 미뤄 비용 문제를 해결합니다. 그 결과 인덱싱 비용은 벡터 RAG와 동일하고 전체 GraphRAG 비용의 0.1%에 불과합니다.










