Ch 11. 벡터 RAG vs GraphRAG 직접 비교¶
이 챕터에서 배우는 것
- 같은 코퍼스 · 같은 질문 세트로 벡터 RAG와 GraphRAG를 나란히 돌리기
- 질문 유형(단순 사실 · 멀티홉 · 전역)별로 어디서 갈리는지 눈으로 확인
- 정확도만이 아니라 비용·지연까지 함께 보는 균형 잡힌 결론
- "둘 중 하나"가 아니라 "질문에 맞게 라우팅"이라는 실전 답
이어지는 실습
새 위키 문서 20개를 찾기 전에 공통 pharma-mini 코퍼스와 6개 질문으로 비교를 완주하자. 두 시스템의 코퍼스·질문·생성 모델을 고정하고 검색기만 바꾼다.
1. 개념 — 말 말고 숫자로¶
지금까지 "멀티홉·전역은 GraphRAG가 강하다"고 말로 주장했다. 이 챕터는 그걸 직접 돌려 확인한다. 공정한 비교의 핵심은 셋이다: 같은 코퍼스, 같은 질문 세트, 같은 생성 모델. 다른 건 검색 방식뿐이어야 한다.
2. 실험 설계 — 질문을 세 갈래로¶
질문 세트를 Ch 1의 분류대로 셋으로 나눠 던진다.
QUESTIONS = {
"factual": ["아스피린의 성분은 무엇인가?",
"버퍼린을 제조하는 조직은 어디인가?"],
"multihop": ["아스피린과 같은 성분을 포함하는 다른 약은 무엇인가?",
"논문 알파를 인용한 논문들이 사용한 데이터셋은 무엇인가?"],
"global": ["이 코퍼스의 두 가지 핵심 주제는 무엇인가?",
"제품 노트와 논문 초록의 두 지식 묶음은 어떻게 연결되는가?"],
}
각 질문을 두 시스템에 던진다.
def vector_rag(q):
chunks = vector_store.search(q, k=5) # 임베딩 top-k
return llm_answer(q, context=chunks)
def graph_rag(q, mode): # mode: local | global | hybrid
ctx = graph_search(q, mode) # Ch 10의 전략
return llm_answer(q, context=ctx)
for cat, qs in QUESTIONS.items():
for q in qs:
v = vector_rag(q)
g = graph_rag(q, mode=route(cat)) # factual→hybrid, multihop→local, global→global
record(cat, q, v, g)
3. 전형적인 결과 — 어디서 갈리나¶
실제로 돌리면 대체로 이런 그림이 나온다(코퍼스·구현마다 다르지만 경향은 일관적이다).
| 질문 유형 | 벡터 RAG | GraphRAG | 비고 |
|---|---|---|---|
| 단순 사실 | ◎ 충분 | ◎ 비등 | 한 청크에 답이 있으면 벡터로 족하다 |
| 멀티홉 | △ 자주 누락 | ◎ 강함 | 관계를 따라가야 하는 질문에서 격차가 벌어짐 |
| 전역 종합 | ✗ 구조적 한계 | ◎ 강함 | 커뮤니티 요약이 결정적 |
| 인덱싱 비용 | ◎ 낮음(임베딩만) | ✗ 높음(LLM 추출+요약) | Ch 9에서 본 그 비용 |
| 쿼리 지연 | ◎ 빠름 | △ 글로벌은 느림 | map-reduce 호출 누적 |
요점은 분명하다. 단순 사실 질문에선 GraphRAG가 더 나을 게 없다 — 오히려 비싸다. GraphRAG의 값은 멀티홉과 전역에서 나온다. 그러니 "전부 GraphRAG로"는 틀린 결론이다.
공통 프로젝트의 실제 로컬 실행은 이어지는 실습 프로젝트의 결과에 기록했다. 특히 그래프가 근거를 모두 회수하고도 360M 생성 모델이 전역 답변의 한 축을 빠뜨린 사례를 함께 본다.
4. 그래서 답은 라우팅이다¶
Ch 10의 라우팅이 여기서 결론이 된다. 질문을 분류해 — 단순 사실은 싼 벡터 RAG로, 멀티홉·전역은 GraphRAG로 — 보내는 하이브리드 시스템이 정확도와 비용을 동시에 잡는다.
def answer(q):
kind = classify(q) # LLM 또는 규칙 기반 분류
if kind == "factual":
return vector_rag(q) # 싸고 충분
elif kind == "multihop":
return graph_rag(q, "local")
else: # global
return graph_rag(q, "global")
이건 AI Eval 가이드의 "싼 것부터, 비싼 건 필요할 때만" 피라미드와 같은 정신이다 — 검색에도 계층이 있다.
5. 자주 깨지는 포인트¶
정확도만 보고 비용을 무시한다. GraphRAG가 "더 정확"해도 모든 질문에 쓰면 비용·지연이 망가진다. 비교표에 반드시 비용·지연 열을 넣어라.
불공정한 비교. 벡터 RAG의 k를 너무 작게 잡거나 청킹을 대충 하면 GraphRAG가 부당하게 이긴다. 베이스라인을 제대로 튜닝한 뒤 비교해야 의미가 있다.
질문 세트가 한쪽에 치우침. 전역 질문만 모아 놓으면 당연히 GraphRAG가 압승한다. 실제 트래픽의 질문 분포를 반영해야 결론이 현실적이다.
6. 연습 & 다음 챕터¶
실습 과제¶
pharma-mini로 두 시스템을 만들고, 제공된 세 유형 질문 6개로 비교표를 채워라.- 각 답에 정확도뿐 아니라 토큰 비용·지연을 기록하라.
- 라우터를 붙여 "단순 사실은 벡터, 나머지는 그래프"로 보낼 때 전체 비용이 얼마나 주는지 측정하라.
다음¶
Part 5로 넘어가, 이 비교를 체계적인 평가로 만든다 — GraphRAG를 무엇으로, 어떻게 측정하나 → Ch 12.
원전¶
- Microsoft Research (2024). From Local to Global: A Graph RAG Approach. arXiv:2404.16130
- Han et al. (2024). Retrieval-Augmented Generation with Graphs (GraphRAG): A Survey. arXiv:2501.00309