Vector RAG vs Graph RAG 비교
한눈에 보는 차이
| 특성 | Vector RAG | Graph RAG |
|---|---|---|
| 기본 단위 | 텍스트 청크 (Chunk) | 노드 & 관계 (Node & Edge) |
| 저장 방식 | 벡터 임베딩 | 그래프 구조 |
| 맥락 보존 | ❌ 부분적 (청킹 손실) | ✅ 전체 (관계로 연결) |
| 검색 방식 | 벡터 유사도 검색 | 그래프 탐색 (multi-hop) |
| 검색 결과 | 개별 청크들 | 노드 + 주변 관련 노드 |
| 컨텍스트 유형 | 청크 내용만 | 노드 + 관계 + 그래프 구조 |
| 확장성 | 토큰 한계 있음 | 관계로 무한 확장 가능 |
| 에이전트 입력 | 분리된 정보 | 구조화된 지식 |
Vector RAG 상세
아키텍처
문서
↓
텍스트 분할 (Chunking)
├─ Chunk 1 (0-512 tokens)
├─ Chunk 2 (512-1024 tokens)
└─ Chunk 3 (1024-1536 tokens)
↓
벡터 임베딩 (Embedding)
├─ Chunk 1 → [0.2, 0.5, 0.8, ...]
├─ Chunk 2 → [0.1, 0.3, 0.9, ...]
└─ Chunk 3 → [0.3, 0.4, 0.7, ...]
↓
벡터 DB 저장 (Vector Database)
└─ Pinecone, Weaviate, Milvus, pgvector, ...
↓
유사도 검색 (Similarity Search)
쿼리 → 임베딩 → 유사 청크 반환
예시: 영화 추천
입력: “액션 영화 추천해줘”
벡터 RAG 프로세스:
- 쿼리 → 임베딩 변환
- 벡터 DB에서 유사도 높은 청크 검색
- 상위 3개 청크 반환:
청크 1: "배우 Tom Cruise가 출연한 Mission Impossible은 액션과 스릴러 장르입니다. ..." 청크 2: "영화 평점 시스템: 평점은 0-10점 사이로 ..." 청크 3: "Fast & Furious 시리즈는 자동차 액션 영화로 ..." - 이 청크들을 LLM에 전달 → “Mission Impossible과 Fast & Furious를 추천합니다”
문제점:
- 각 청크가 독립적 (관계 없음)
- 배우, 장르, 평점 간 연결 정보 없음
- 전체 영화 데이터베이스의 구조 미반영
Vector RAG의 장점
✅ 간단한 구현
✅ 빠른 배포
✅ 의미론적 검색 (semantic search)
✅ 낮은 복잡도
Vector RAG의 한계
❌ 청크 크기에 따른 맥락 손실
❌ 청크 간 관계 정보 누락
❌ 전체 문맥 파악 불가능
❌ 긴 문서에서 성능 저하
Graph RAG 상세
아키텍처
문서
↓
엔티티 & 관계 추출 (Entity Relation Extraction)
├─ Entities: Movie, Actor, Director, Genre
└─ Relations: ACTED_IN, DIRECTED_BY, BELONGS_TO
↓
온톨로지 기반 그래프 구성
[Movie: Inception] --ACTED_IN--> [Actor: Leo DiCaprio]
--DIRECTED_BY--> [Director: Nolan]
--BELONGS_TO--> [Genre: Sci-Fi]
--RATED--> (8.8)
↓
그래프 DB 저장 (Neo4j, ArangoDB, ...)
↓
그래프 기반 검색 (Graph Traversal)
노드 찾기 → 주변 노드 탐색 → 전체 그래프 반환
예시: 영화 추천
입력: “액션 영화 추천해줘”
Graph RAG 프로세스:
- 쿼리 → “액션” 장르 노드 찾기
- 관련 노드들을 그래프로 탐색:
[Genre: Action] ├─ [Movie: Mission Impossible] │ ├─ [Actor: Tom Cruise] │ ├─ [Director: McQuarrie] │ └─ [Rating: 8.5] │ ├─ [Movie: Fast & Furious] │ ├─ [Actor: Vin Diesel] │ ├─ [Director: Lin] │ └─ [Rating: 7.9] │ └─ [Movie: John Wick] ├─ [Actor: Keanu Reeves] ├─ [Director: Stahelski] └─ [Rating: 8.1] - 각 영화의 전체 맥락 (배우, 감독, 평점 등) 함께 반환
- LLM이 풍부한 정보로 답변 생성
장점:
- 모든 관계 명시적 (ACTED_IN, DIRECTED_BY 등)
- 전체 맥락 보존 (노드 간 연결)
- 다중 경로 검색 가능 (multi-hop)
- 구조화된 정보 (LLM이 쉽게 이해)
Graph RAG의 장점
✅ 전체 맥락 보존
✅ 관계 명시적 표현
✅ 다중 홉 검색 가능
✅ 구조화된 컨텍스트
✅ 장문서 처리 우수
✅ 에이전트 친화적
Graph RAG의 한계
❌ 온톨로지 설계 필요
❌ 엔티티/관계 추출 복잡
❌ 초기 구축 비용 높음
❌ 유지보수 복잡도 증가
실제 비교: 영화 database
Vector RAG의 검색 결과
쿼리: "Leonardo DiCaprio와 유사한 배우"
반환:
청크 1: "Leonardo DiCaprio는 Inception, Titanic 등의 영화에 출연..."
청크 2: "영화 평점 시스템 설명..."
청크 3: "유명 배우들의 필모그래피..."
→ 배우 간 관계 정보 없음
→ "누가 유사한가"에 대한 명확한 답 불가능
Graph RAG의 검색 결과
쿼리: "Leonardo DiCaprio와 유사한 배우"
반환:
[Leonardo DiCaprio]
├─ ACTED_IN → [Inception, Titanic, Great Gatsby, ...]
├─ COLLABORATES_WITH → [Tom Hardy, Marion Cotillard, ...]
└─ SIMILAR_ACTOR → [Brad Pitt, Johnny Depp, ...]
→ 명확한 관계 정보 제공
→ "유사 배우" 직접 추출 가능
→ 협력 배우도 함께 제시 가능
어떤 경우 어느 것을 사용할까?
Vector RAG 추천
- 🟢 문서 청킹으로 충분한 경우
- 🟢 단순 유사도 검색만 필요
- 🟢 빠른 프로토타이핑
- 🟢 관계 정보가 덜 중요한 도메인
- 예: 뉴스 검색, 학술 논문 검색
Graph RAG 추천
- 🟢 관계가 매우 중요한 경우
- 🟢 엔티티 중심의 도메인
- 🟢 다중 홉 검색이 필요
- 🟢 에이전트 시스템 구축
- 🟢 온톨로지 설계가 명확한 경우
- 예: 지식그래프, 영화 추천, 조직도, 법률 관계망
하이브리드 접근
최적: Vector RAG + Graph RAG 결합
사용자 쿼리
↓
의도 파악 (Intent Detection)
├─ 간단한 검색 → Vector RAG
└─ 복잡한 다중 관계 → Graph RAG
↓
컨텍스트 조합
└─ Vector 검색 결과 + Graph 구조 정보
↓
LLM 입력 (Rich Context)
↓
고품질 응답
통합 개념
- RAG — 기본 개념
- Graph RAG — 그래프 기반 RAG
- Vector Retriever — 벡터 기반 검색
- Ontology — 그래프 설계 기반
- Knowledge Graph — 그래프 저장 구조
관련 소스: why-use-graphrag (비교 설명), word-chain-chatbot (실제 구현)