GNN-RAG: Knowledge Graph 위에서 효율적인 LLM 추론을 위한 Graph Neural Network 기반 RAG
GNN-RAG: Graph Neural Retrieval for Efficient Large Language Model Reasoning on Knowledge Graphs
TL;DR Highlight
GNN 기반 Knowledge Graph 경로 사전 추출이 LLM KGQA에서 정확도와 속도를 모두 향상시킨다.
Who Should Read
Knowledge Graph 기반 QA 시스템을 구축 중이거나, RAG 파이프라인에서 그래프 구조 데이터를 활용하고 싶은 백엔드·ML 개발자. Wikidata, Freebase 같은 대규모 그래프 DB를 LLM과 연결하는 방법을 고민하는 사람.
Core Mechanics
- Knowledge Graph(KG, 엔티티와 관계로 연결된 그래프 DB)에서 RAG를 할 때 모든 경로를 LLM에 던지면 토큰 폭발 → GNN이 먼저 관련 서브그래프만 추려서 LLM 입력을 압축
- GNN(그래프 신경망)을 리트리버로 써서 질문과 관련 높은 엔티티·관계 경로를 점수화해 Top-K만 선택
- LLM은 압축된 자연어 경로만 받아서 추론하므로, 전체 그래프를 직접 탐색하는 방식보다 훨씬 적은 컨텍스트로 정확한 답 생성 가능
- GNN 리트리버와 LLM 리즈너를 분리해서 GNN은 가볍게 파인튜닝, LLM은 프롬프트만으로도 동작 → 비용 효율적
- 멀티홉 추론(여러 관계를 건너야 답이 나오는 질문)에서 기존 임베딩 기반 RAG 대비 명확한 강점
Evidence
- WebQSP 벤치마크에서 Hits@1 기준 최신 KGQA 모델 대비 경쟁력 있는 수치 달성 (논문 내 Table 기준 상위권)
- GNN 리트리버가 평균 KG 경로 후보를 수천 개 → 수십 개로 압축해 LLM 입력 토큰 수를 대폭 절감
- CWQ(ComplexWebQuestions) 데이터셋에서도 멀티홉 질문 처리 성능이 기존 RAG 베이스라인 대비 유의미하게 향상
- GPT-3.5/GPT-4 등 다양한 LLM 백엔드와 결합 시 일관된 성능 향상 확인
How to Apply
- Freebase/Wikidata 연동 QA 서비스라면, 질문 입력 시 GNN 리트리버로 관련 서브그래프 경로만 추출한 뒤 '엔티티A → 관계 → 엔티티B' 형태 텍스트로 변환해 LLM 프롬프트에 삽입하는 파이프라인 구성
- 그래프 DB가 너무 커서 LLM에 직접 넣기 어려운 경우, 가벨한 GNN 모델(예: 2-3레이어 RGCN)을 리트리버로 파인튜닝해 Top-K 경로만 뽑는 전처리 단계를 RAG 체인 앞에 추가
- 멀티홉 질문(예: '영화 X의 감독이 태어난 도시의 시장은?')을 처리해야 한다면, 단순 벡터 유사도 검색 대신 GNN 기반 경로 스코어링으로 교체해볼 것
Code Example
# GNN-RAG 파이프라인 개념 코드 (PyG + LangChain 스타일)
import torch
from torch_geometric.nn import RGCNConv
# 1. GNN 리트리버: 질문 엔티티 주변 서브그래프에서 관련 경로 추출
class GNNRetriever(torch.nn.Module):
def __init__(self, in_channels, hidden, num_relations):
super().__init__()
self.conv1 = RGCNConv(in_channels, hidden, num_relations)
self.conv2 = RGCNConv(hidden, hidden, num_relations)
self.score = torch.nn.Linear(hidden, 1)
def forward(self, x, edge_index, edge_type):
x = self.conv1(x, edge_index, edge_type).relu()
x = self.conv2(x, edge_index, edge_type).relu()
return self.score(x).squeeze(-1) # 각 노드의 관련도 점수
# 2. 점수 높은 경로를 자연어로 변환
def paths_to_text(top_k_paths):
"""[(entity1, relation, entity2), ...] -> str"""
lines = [f"{e1} --[{rel}]--> {e2}" for e1, rel, e2 in top_k_paths]
return "\n".join(lines)
# 3. LLM 프롬프트에 경로 삽입
def build_prompt(question, kg_paths_text):
return f"""다음 Knowledge Graph 경로를 참고해서 질문에 답하세요.
[KG 경로]
{kg_paths_text}
[질문]
{question}
[답변]"""
# 사용 예
# paths = gnn_retriever.get_top_k_paths(question_entity, k=20)
# prompt = build_prompt("영화 Inception의 감독 국적은?", paths_to_text(paths))
# answer = llm(prompt)Terminology
관련 논문
Airbyte Agents – 여러 데이터 소스를 아우르는 Agent용 Context Layer
Airbyte가 Slack, Salesforce, Linear 등 여러 SaaS 시스템의 데이터를 미리 인덱싱해서 Agent가 API를 일일이 뒤지지 않아도 되는 Context Store를 출시했다. 기존 MCP 방식보다 토큰을 최대 90%까지 줄이는 효과를 확인했다.
Polynomial Autoencoder가 Transformer Embedding에서 PCA를 능가하는 방법
PCA 인코더에 2차 다항식 디코더를 붙여서 닫힌 형태(closed-form)로 embedding 압축 품질을 크게 개선하는 기법으로, SGD 없이 numpy만으로 구현 가능하다.
비정형 Recall에서 Schema 기반 Memory로: 반복적 Schema-Aware Extraction을 통한 신뢰할 수 있는 AI Memory
RAG 스타일 텍스트 검색 대신 Schema로 정의된 구조화 레코드에 메모리를 저장하면, 정확한 사실 조회·상태 추적·집계 쿼리에서 압도적으로 높은 정확도를 얻을 수 있다.
Atomic – Local-first, AI 기반 개인 지식 그래프 앱
노트, 웹 클립, RSS 피드를 자동으로 임베딩·태깅·연결해주는 오픈소스 개인 지식 그래프 앱으로, 시맨틱 검색과 LLM 기반 위키 합성, MCP 통합까지 지원한다.
RAG 대신 Virtual Filesystem으로 AI 문서 어시스턴트 만든 이야기
Mintlify의 ChromaFs(Chroma DB 위의 UNIX 명령어 흉내 가상 파일시스템)가 RAG 청킹 한계를 극복해 세션 부팅 시간을 46초에서 100ms로 단축한다.
Chroma Context-1: Self-Editing 기능을 갖춘 검색 에이전트 학습 방법
Chroma의 20B 파라미터 agentic search 모델이 프론티어급 LLM 수준의 검색 성능을 1/10의 비용과 10배 빠른 속도로 달성한다.