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
관련 논문
성경을 RAG Database로 구축한 프로젝트: Cross Canon
성경 전체를 RAG(검색 증강 생성) 데이터베이스로 인덱싱해 주제나 키워드로 관련 성경 구절을 의미론적으로 검색할 수 있는 웹 서비스다. 종교 텍스트에 RAG를 적용한 실용적 예시로, 유사한 프로젝트를 만들려는 개발자에게 참고가 된다.
Haystack: 프로덕션 수준의 AI Agent와 RAG를 위한 오픈소스 프레임워크
deepset이 만든 오픈소스 AI 오케스트레이션 프레임워크로, LangChain의 대안으로 주목받고 있으며 모듈형 파이프라인 방식으로 RAG·Agent·멀티모달 앱을 프로덕션까지 구축할 수 있다.
Elasticsearch로 만든 Agent 영구 메모리 레이어 - R@10 0.89 달성기
AI 에이전트가 세션이 끝나도 사용자 정보를 기억할 수 있도록 Elasticsearch 위에 구축한 멀티테넌트 장기 메모리 시스템 아키텍처 공개. 168개 질문 기준 R@10 0.89, 테넌트 간 데이터 누출 0건을 달성한 구체적인 구현 방법을 담았다.
TAHOE: 경험 기반 자동 Hint 최적화를 통한 Text-to-SQL 시스템
LLM이 SQL 생성 실패에서 배운 힌트를 재사용 가능한 Hint Bank로 쌓아, 모델 재학습 없이 Snowflake 방언 SQL 정확도를 대폭 끌어올리는 시스템.
FAISS 내부 동작 원리: 10억 개 벡터 유사도 검색
FAISS가 수십억 개 벡터를 빠르게 검색하는 핵심 알고리즘인 IVF(파티셔닝)와 Product Quantization(압축)을 시각적으로 설명한 글로, RAG나 벡터 검색 시스템을 구축하는 개발자에게 내부 동작 원리를 이해시켜 준다.
Airbyte Agents – 여러 데이터 소스를 아우르는 Agent용 Context Layer
Airbyte가 Slack, Salesforce, Linear 등 여러 SaaS 시스템의 데이터를 미리 인덱싱해서 Agent가 API를 일일이 뒤지지 않아도 되는 Context Store를 출시했다. 기존 MCP 방식보다 토큰을 최대 90%까지 줄이는 효과를 확인했다.