GraphRAG는 검색 계층이 벡터 데이터베이스뿐만 아니라 **지식 그래프(knowledge graph)**에도 질의하는 검색 증강 생성(retrieval-augmented generation) 방식입니다.
단순히 유사한 텍스트 청크를 반환하는 대신, 타입화된 개체와 그들 사이의 관계를 반환합니다. 그러면 LLM은 어떤 단락이 관련성이 높아 보이는지에 대한 통계적 추측 대신, 구조화되고 인용 가능한 사실을 바탕으로 답변을 생성합니다.
한 문단으로 이해하는 RAG, 그리고 GraphRAG가 추가하는 것
검색 증강 생성(Retrieval-augmented generation)은 LLM의 답변을 검색된 증거에 근거하게 합니다. 표준 방식은 다음과 같습니다: 문서를 청크로 나누고, 모델로 임베딩한 후, 그 임베딩을 벡터 데이터베이스에 저장합니다. 질의가 들어오면 사용자 질문을 임베딩하고 가장 유사한 청크를 찾아 LLM에게 컨텍스트로 전달합니다.
이 방식은 "이 문서를 요약해 줘" 또는 "X라고 명시하는 정책을 찾아줘"와 같은 경우에 매우 효과적입니다.
하지만 답변을 여러 개체나 시스템의 사실들을 조합하여 구성해야 하는 순간에는 무너집니다.
지식 그래프는 고객, 계약서, 제품, 사고 등 타입화된 개체들을 타입화된 관계로 연결하여 비즈니스를 저장합니다. 사용자가 질문을 하면, 검색기는 **그래프를 탐색(walk the graph)**할 수 있습니다 (예: 고객 → 계약서 → 조항 → 의무). 이를 통해 실제 답변을 구성하고, 그 결과로 나온 사실들과 해당 사실이 유래된 원본 시스템에 대한 포인터를 함께 LLM에게 전달합니다.
GraphRAG가 해결하는 세 가지 구체적인 실패 사례
다단계 질문에서의 환각 현상(Hallucination on multi-hop questions).
"지난 분기에 폐기한 기능과 관련하여 P1 티켓을 제기한 플래티넘 플랜 고객은 누구인가요?"
이 답변을 담고 있는 단일 문서는 없습니다. 벡터 검색은 관련성이 높아 보이는 청크들을 반환하고 LLM이 그 연결 고리를 꾸며냅니다(fabricates the join). GraphRAG는 각 행마다 원본 시스템에 대한 인용과 함께 정확한 목록을 반환합니다.
높은 중요도를 가진 영역에서의 조작된 인용(Fabricated citations in high-stakes domains).
순수 벡터 RAG 기반의 법률 및 임상 보조 도구들은 계속해서 존재하지 않는 사례나 논문을 만들어냅니다. 검색이 실제 식별자를 가진 타입화된 개체를 반환할 때, 그 인용을 꾸며낼 것이 아무것도 없습니다. 인용 자체가 노드(node)입니다.
조용히 구식이 되는 답변들.
벡터 청크는 정책이 대체되었다는 것을 알지 못합니다. 그래프는 이러한 대체(supersession)를 엣지(edge)로 모델링하고, 오래된 버전을 검색(traversal)을 통해 제외함으로써, 단순히 오래된 청크가 낮은 순위를 갖기를 바라는 것보다 더 나은 결과를 얻을 수 있습니다.
GraphRAG 시스템의 다섯 가지 레이어
| 레이어 | 역할 |
|---|
| 온톨로지 (Ontology) | 해당 도메인이 실제로 가지고 있는 엔티티 유형 및 관계 유형을 정의합니다. |
| ... | |
| 온톨로지는 팀들이 과소평가하는 부분입니다. 이는 데이터베이스 스키마 작업이 아니라 비즈니스에 대한 모델링 연습이며, 이를 잘못 이해하는 것이 스택에서 가장 비용이 많이 드는 실수입니다. | |
평가(evaluation) 레이어는 팀들이 건너뛰는 부분입니다. 이것 없이는 검색 회귀(retrieval regression)와 모델 회귀(model regression)를 구분할 수 없습니다.
GraphRAG를 사용해야 할 때와 그렇지 않을 때
사용해야 하는 경우:
- 여러 엔티티 또는 시스템에 걸쳐 사실을 조합하여 답변이 필요한 경우
- 개수 세기, 집계(aggregation), 또는 부재 여부(