Ch 10. 그래프 검색 전략 — 로컬 · 글로벌 · 커뮤니티 요약¶
이 챕터에서 배우는 것
- 질문 유형에 따라 갈리는 세 가지 검색 — 로컬 · 글로벌 · 하이브리드
- 로컬 검색: 특정 엔티티 주변을 모으는 법
- 글로벌 검색: 커뮤니티 요약을 map-reduce로 종합하는 법
- 벡터로 진입점을 찾고 그래프로 확장하는 하이브리드
전제
Ch 9의 인덱싱(그래프 + 커뮤니티 요약).
1. 개념 — 질문이 검색 방식을 정한다¶
인덱스(그래프 + 커뮤니티 요약)가 준비됐다면, 남은 건 "질문이 왔을 때 무엇을 끌어올까"다. GraphRAG의 검색은 질문 유형에 따라 크게 둘로 갈린다.
- 로컬(local) — "이 엔티티/주제에 대해 말해줘" 류. 특정 노드 주변을 탐색.
- 글로벌(global) — "전체에서 무엇이 두드러지나" 류. 커뮤니티 요약을 종합.
벡터 RAG는 이 둘을 구분하지 않고 늘 "비슷한 청크 top-k"만 준다. GraphRAG는 질문에 맞는 검색을 고른다.
2. 로컬 검색 — 엔티티 주변 모으기¶
특정 엔티티가 질문의 중심일 때 쓴다. 절차는 직관적이다.
- 질문에서 진입 엔티티를 찾는다(이름 매칭 또는 임베딩으로 가장 가까운 노드).
- 그 노드의 이웃을 그래프로 확장한다(1~2홉 관계, 연결된 엔티티, 관련 청크).
- 모은 컨텍스트를 LLM에 넘겨 답한다.
def local_search(question, entry_entity):
ctx = run("""
MATCH (e {name: $name})-[r]-(neighbor)
OPTIONAL MATCH (e)-[:MENTIONED_IN]->(chunk:Chunk)
RETURN e, collect(DISTINCT type(r) + ': ' + neighbor.name) AS facts,
collect(DISTINCT chunk.text)[..5] AS snippets
""", name=entry_entity)
# facts(그래프 사실) + snippets(원문)를 합쳐 프롬프트 컨텍스트로
return build_prompt(question, ctx)
핵심은 그래프 사실 + 원문 청크를 함께 준다는 것이다. 그래프는 "어떻게 연결되는가", 청크는 "원문의 근거". 둘을 합쳐야 멀티홉 답이 정확하고 근거가 산다.
3. 글로벌 검색 — 커뮤니티 요약 map-reduce¶
"이 코퍼스의 핵심 주제는?" 같은 전역 질문엔 진입 엔티티가 없다. 대신 Ch 9에서 미리 만든 커뮤니티 요약을 쓴다. 전형적인 map-reduce다.
- Map — 각 커뮤니티 요약에 대해 "이 요약이 질문에 어떻게 기여하나"를 LLM이 부분 답으로 만든다.
- Reduce — 부분 답들을 종합해 최종 답을 만든다.
전체 문서를 다시 읽지 않고 요약들만 종합하니, "전역" 질문이 현실적인 비용으로 풀린다. 벡터 RAG가 구조적으로 못 하던 바로 그 질문이다.
4. 하이브리드 — 벡터로 진입, 그래프로 확장¶
실전에서 가장 흔한 패턴은 둘을 섞는 것이다. 벡터 검색으로 진입점을 찾고, 그래프로 주변을 확장한다.
벡터의 "유연한 진입"과 그래프의 "정확한 확장"을 합치는 것이다. Ch 1에서 "둘은 경쟁이 아니라 보완"이라 한 게 여기서 구체화된다.
| 질문 | 전략 |
|---|---|
| "X에 대해 설명해줘" | 로컬 |
| "X와 Y는 어떻게 연결되나" | 로컬(멀티홉) 또는 하이브리드 |
| "전체에서 핵심 주제는" | 글로벌 |
| "이 키워드 관련해서 다 알려줘" | 하이브리드 |
5. 자주 깨지는 포인트¶
모든 질문에 글로벌을 쓴다. 글로벌은 커뮤니티 요약 전체를 도니 비싸다. 특정 엔티티 질문(로컬로 충분)에 글로벌을 쓰면 느리고 비싸기만 하다. 질문을 먼저 분류하라(라우팅).
그래프 사실만 주고 원문을 안 준다. 그래프 트리플만으로는 LLM이 맥락을 못 잡거나 근거를 못 댄다. 로컬 검색에선 연결된 원문 청크를 함께 줘야 한다.
진입 엔티티 매칭 실패. 질문의 표현이 그래프 노드 이름과 다르면 진입에 실패한다. 임베딩 기반 엔티티 매칭이나 별칭 사전으로 보강한다(Ch 7의 엔티티 해소와 연결).
6. 연습 & 다음 챕터¶
확인 문제¶
- 내 질문 세트를 로컬/글로벌/하이브리드로 라우팅하는 규칙을 적어 보라.
- 글로벌 검색의 map 단계에서 커뮤니티가 100개라면 LLM 호출이 몇 번인가? 비용을 줄일 방법은?
다음¶
말로는 GraphRAG가 좋다고 했다. 이제 같은 코퍼스·같은 질문으로 벡터 RAG와 정면 비교해 어디서 갈리는지 직접 본다 → Ch 11.
원전¶
- Microsoft Research (2024). From Local to Global: A Graph RAG Approach to Query-Focused Summarization. arXiv:2404.16130
- Microsoft. GraphRAG: local & global search docs