MS GraphRAG는 문서에서 어떻게 답을 찾을까?
엔터티 추출부터 커뮤니티 요약, 질문에 맞는 전역 검색과 지역 검색까지 MS GraphRAG의 흐름을 그림으로 따라간다.
『오디세이아』에서 미네르바가 텔레마코스에게 어떤 도움을 주었는지 알려면, 두 인물이 등장하는 한 문단만 읽어서는 부족할 수 있다. 미네르바는 여러 장면에서 조언하고, 격려하고, 길을 안내한다. MS GraphRAG는 이렇게 문서 여러 곳에 흩어진 정보를 먼저 연결해 둔 다음 질문에 답한다.

큰 흐름은 질문이 들어오기 전의 인덱싱과 질문이 들어온 뒤의 검색으로 나뉜다. 인덱싱에서는 문서를 청크로 나누고 엔터티와 관계를 추출한다. 이어서 그래프에서 커뮤니티를 찾고 커뮤니티 보고서를 만든다. 검색에서는 질문의 범위에 따라 전역 검색 또는 지역 검색을 사용한다.
1. 문서에서 어떤 대상을 찾을지 정한다
엔터티는 그래프에서 계속 추적할 대상이다. 『오디세이아』라면 미네르바와 텔레마코스는 개별 엔터티이고, 사람, 신, 장소, 사건은 엔터티의 유형이다. 어떤 유형을 찾을지는 문서의 내용과 나중에 답하고 싶은 질문에 맞춰 고른다. 사람만 추출하면 신의 개입이나 장소를 중심으로 한 연결은 그래프에 충분히 드러나지 않는다.
문서를 청크로 나누면 LLM이 각 청크를 읽고 엔터티와 관계를 뽑는다. 아래와 이어지는 프롬프트 문장은 동작을 설명하기 위해 새로 쓴 예시이며, 책이나 논문의 프롬프트를 옮긴 것이 아니다.
추출 요청의 예시: “이 문장에서 사람, 신, 장소, 사건에 해당하는 대상을 찾아라. 서로 분명한 관련이 있는 두 대상도 찾고, 왜 관련되는지 설명하라.”
가령 한 청크에서 “미네르바가 텔레마코스에게 조언했다”는 관계를, 다른 청크에서 “미네르바가 텔레마코스를 격려했다”는 관계를 얻을 수 있다. 이때 LLM은 두 문장의 의미를 읽고 대상을 찾지만, 추출 결과는 뒤에서 다시 정리해야 한다.
2. 같은 엔터티와 관계의 설명을 합친다
미네르바가 여러 청크에 나오면 미네르바에 대한 설명도 여러 개 생긴다. 미네르바와 텔레마코스의 관계도 마찬가지다. MS GraphRAG는 같은 엔터티의 설명끼리, 같은 엔터티 쌍의 관계 설명끼리 모은다. 그다음 LLM으로 각 목록을 하나의 설명으로 요약한다.

통합 요약 요청의 예시: “아래는 모두 미네르바와 텔레마코스의 관계에 관한 설명이다. 겹치는 내용을 줄이되 서로 다른 중요한 행동은 남겨 하나의 설명으로 합쳐라.”
이 과정이 끝나면 미네르바라는 엔터티에 통합 설명 하나, 텔레마코스라는 엔터티에 통합 설명 하나, 두 인물 사이의 관계에 통합 설명 하나가 붙는다. 그래프 전체를 문장 하나로 줄이는 과정은 아니다. 원본 청크와의 연결도 남겨 두어 나중에 설명의 근거를 찾아갈 수 있다. LLM이 설명 사이의 모순을 매끄럽게 정리해도 어느 원문이 맞는지 자동으로 검증된 것은 아니다.
3. 그래프에서 커뮤니티를 찾고 요약한다
이제 그래프에는 엔터티와 관계가 있다. 다음에는 서로 촘촘하게 연결된 엔터티들의 커뮤니티를 찾는다. 책의 Neo4j 실습은 루뱅 알고리즘을 쓴다. 이 탐지는 그래프의 연결 구조를 계산하는 작업이며, LLM이 문장을 읽어 커뮤니티를 고르는 단계는 아니다.
커뮤니티가 정해지면 LLM이 그 안의 엔터티와 관계를 읽어 보고서를 쓴다. 예를 들어 미네르바, 텔레마코스, 율리시스의 가문이 묶인 커뮤니티라면, 보고서는 신의 조언과 가족을 둘러싼 사건을 설명할 수 있다.

커뮤니티 보고서 요청의 예시: “이 커뮤니티의 핵심 인물은 누구이며, 서로 어떤 관계를 맺고 있나? 여러 관계를 종합해 이 커뮤니티가 다루는 이야기를 요약하라.”
엔터티 요약은 대상 하나, 관계 요약은 대상 둘 사이, 커뮤니티 요약은 연결된 대상들의 집합을 설명한다. MS GraphRAG의 표준 파이프라인은 라이덴 알고리즘으로 커뮤니티를 여러 계층으로 구성한다. 큰 커뮤니티 보고서는 넓은 주제를, 작은 커뮤니티 보고서는 세부 사건을 담는다. 이 책의 Neo4j 실습은 루뱅을 사용하며 한 수준의 커뮤니티만 만든다.
4. 질문을 보고 검색 방법을 고른다
그래프와 커뮤니티 보고서가 준비되면 질문을 받는다. 그때 먼저 볼 것은 답의 범위다.

| 질문의 성격 | 더 맞는 방법 | 이유 |
|---|---|---|
| “『오디세이아』의 주요 갈등은 무엇인가?” | 전역 검색 | 여러 커뮤니티의 내용을 종합해야 한다. |
| “미네르바는 텔레마코스를 어떻게 도왔나?” | 지역 검색 | 특정 엔터티와 그 관계를 자세히 봐야 한다. |
| “이야기의 큰 갈등 속에서 미네르바의 역할은?” | 두 검색 결과를 함께 활용 | 전체 흐름과 특정 인물의 세부 근거가 모두 필요하다. |
이 표는 검색기를 고르는 판단 기준이다. 책의 7장은 전역 검색기와 지역 검색기를 각각 구현하지만, 위 질문을 자동 분류하는 라우터까지 구현하지는 않는다. 실제 서비스에서는 규칙이나 LLM 라우터를 추가해 선택할 수 있다.
5. 전역 검색은 커뮤니티 보고서를 종합한다
전역 검색은 여러 커뮤니티에 걸친 질문에 사용한다. 책의 실습은 미리 저장된 rating이 기준 이상인 커뮤니티 보고서를 가져온다. 이 rating은 커뮤니티를 만들 때 매긴 고정 점수라서 현재 질문과의 벡터 유사도는 아니다. 그래프와 기준값이 같으면 질문이 바뀌어도 처음 가져오는 보고서 집합은 같다.
그다음 맵 단계에서 각 보고서를 질문과 함께 LLM에 주고 관련된 핵심 사항을 뽑는다. 여기서 붙는 중요도 점수는 현재 질문에 대한 점수다. 리듀스 단계에서는 중요한 중간 결과만 모아 최종 답변을 만든다.

맵 단계 요청의 예시: “이 커뮤니티 보고서에서 ‘주요 갈등’이라는 질문에 도움이 되는 내용만 뽑고, 각 내용의 중요도를 매겨라.”
리듀스 단계 요청의 예시: “커뮤니티별 핵심 사항을 모았다. 겹치는 내용은 합치고, 근거가 있는 중요한 사항으로 최종 답변을 작성하라.”
커뮤니티가 많아져도 모든 보고서를 한 번의 LLM 입력에 통째로 넣는 것은 아니다. 보고서를 나눠 맵 단계에서 처리한다. 다만 처리할 보고서가 많으면 호출 비용과 시간이 늘고, 리듀스 단계에서 중간 결과를 추리는 일도 중요해진다.
6. 지역 검색은 관련 엔터티에서 시작한다
지역 검색은 먼저 질문을 벡터로 바꿔 엔터티의 통합 설명과 비교한다. 질문에 이름이 직접 없어도 의미가 가까운 엔터티를 찾기 위해서다. 관련 엔터티를 찾은 뒤에는 그 엔터티의 설명, 선택된 엔터티들 사이의 관계, 연결된 원본 청크와 커뮤니티 보고서를 가져온다.
책의 지역 검색 예제에서는 관계를 조회할 때 처음 선택한 엔터티들 사이에 있는 관계로 제한한다. 관계 설명을 질문과 직접 벡터 비교해 고르는 단계는 없다. 대신 찾은 엔터티를 출발점으로 자료를 모으고, 정해 둔 순위와 개수 제한으로 LLM에 넣을 자료를 추린다.
최종 답변 요청의 예시: “미네르바와 텔레마코스에 관한 엔터티 설명, 두 인물의 관계, 원본 문단을 바탕으로 미네르바가 한 일을 설명하라. 자료에 없는 행동은 덧붙이지 마라.”
원본 청크는 특히 중요하다. 요약된 관계만 읽으면 간단하지만, 원래 문장까지 확인할 수 있어야 답의 근거와 맥락을 점검할 수 있다.
사내 위키에 옮겨 보면
안드로이드 개발 위키라면 WorkManager, 앱의 업로드 기능, 백그라운드 작업 문제가 엔터티 후보가 될 수 있다. “백그라운드 업로드를 안정적으로 예약하려면?”이라는 질문에는 지역 검색으로 관련 API와 위키 원문을 찾는다. “여러 팀에서 반복된 백그라운드 작업 문제는?”에는 커뮤니티 보고서를 종합하는 전역 검색이 맞을 수 있다.
처음부터 위키 전체를 처리하기보다 대표 문서로 엔터티 유형과 관계 추출 결과를 확인해야 한다. 문서 청크마다 LLM 추출이 발생하고, 엔터티, 관계, 커뮤니티 요약에도 호출이 들어가므로 위키가 클수록 인덱싱 비용이 커진다. 원문 출처와 문서의 갱신 시점을 유지하는 일도 답변을 검증하는 데 필요하다.
이 장의 실습은 그래프를 Neo4j에 저장해 흐름을 보여준다. MS GraphRAG는 그래프를 만들고 검색하는 방법과 파이프라인이며, Neo4j 자체를 뜻하지 않는다. 질문이 넓으면 커뮤니티 보고서를 종합하고, 특정 대상이 중심이면 그 엔터티와 원문에서 출발한다. 이 선택이 준비한 그래프를 실제 답변으로 연결한다.
참고 자료
본문의 도식과 설명용 프롬프트 예시는 이 글을 위해 새로 만들었다. 책의 그림과 코드는 사용하지 않았다.
- Tomaž Bratanič, Oskar Hane, Essential GraphRAG, 7장, “Building a knowledge graph with LLMs and Microsoft GraphRAG.”
- Microsoft GraphRAG 공식 문서: 인덱싱 과정
- Microsoft GraphRAG 공식 문서: 전역 검색, 지역 검색