GraphRAG

2026-04-07

개념

GraphRAG는 [[RAG]]에 지식 그래프를 결합한 확장이다. 벡터 검색으로 시작점을 잡고, 그래프로 연결된 노드를 따라가며 관련 문서를 모은다. "비슷한 것"에 더해 "연결된 것"까지 끌어오는 게 핵심.

왜 벡터 검색만으로 부족한가

"OAuth에서 RBAC를 어떻게 쓰나?"를 질문하면:

벡터 검색: OAuth.md 찾음, RBAC.md 찾음
→ 근데 둘의 관계는 모름. 각각 따로 나옴

벡터 유사도는 "내용이 비슷한 문서"는 잘 찾지만, "서로 참조하는 문서"나 "A를 이해하려면 B도 필요한 관계"는 포착하지 못한다.

지식 그래프

노트 간 관계를 그래프로 표현한 것.

노드(Node) = 노트 또는 개념
엣지(Edge) = 관계 (참조, 비교, 포함, 적용 등)
OAuth.md --[참조]--> RBAC.md --[비교]--> ABAC.md
   |                    |
   +--[사용]--> JWT     +--[적용]--> Kubernetes

관계를 만드는 방법

명시적 관계 — 백링크

문서 안에 [[RBAC]] 같은 링크가 있으면 그게 관계. 파싱하면 된다.

import re

def extract_links(content: str) -> list[str]:
    return re.findall(r'\[\[(.+?)\]\]', content)

암묵적 관계 — LLM 추출

문서를 LLM에 보내서 개념과 관계를 추출.

입력: "RBAC는 역할 기반 접근 제어로, ABAC와 달리 속성이 아닌 역할로 판단한다"
추출: RBAC --비교--> ABAC, RBAC --사용--> 역할

벡터 유사도 — 자동 연결

임베딩 거리가 가까운 노트끼리 엣지를 만든다. 가장 약한 관계지만 자동화하기 쉽다.

검색 방법

질문 → 벡터 검색으로 시작 노트 찾기
     → 그래프에서 연결된 노트 1~2 hop 탐색
     → 전부 합쳐서 LLM에 전달

벡터로 RBAC.md를 찾았으면, 그래프에서 RBAC와 연결된 ABAC.md, OAuth-OIDC-SAML.md도 같이 가져온다.

Microsoft GraphRAG

Microsoft Research가 2024년에 공개한 구현:

  1. 문서 전체를 LLM으로 읽혀서 엔티티와 관계를 추출
  2. 커뮤니티 탐지 — 관련된 개념끼리 클러스터링
  3. 각 커뮤니티에 대한 요약을 미리 생성
  4. 질문하면 관련 커뮤니티 요약 + 원본 문서를 같이 전달

LLM 호출이 많아서 비용이 크지만 "전체를 아우르는 질문"에 강하다. 예를 들어 "이 문서들의 공통 주제는?" 같은 질문.

연결 소스 조합

태그 공유     → 약한 연결
[[]] 백링크   → 강한 연결
벡터 유사도   → 의미적 연결

세 가지를 합치면 꽤 정확한 그래프가 된다.

더 보기

  • [[RAG]] — 기본 RAG 파이프라인
  • [[RAG-한계와-보완]] — 벡터 검색만으로는 부족한 이유
  • [[Hybrid-Search]] — 벡터 + 키워드 결합
  • [[Karpathy-LLM-Knowledge-Bases]] — 마크다운 위키 + 백링크 기반 대안

Backlinks

sunshinemoon · 2026