벡터 데이터베이스
벡터 데이터베이스는 RAG 시스템에서 임베딩된 벡터를 효율적으로 저장, 인덱싱하고 검색하는 역할을 담당합니다. 대규모 벡터 데이터셋에서 빠르고 정확한 유사도 검색을 지원하는 것이 핵심 기능입니다.
주요 기능
- 벡터 저장 및 관리: 고차원 벡터 데이터를 저장하고 CRUD(생성, 읽기, 갱신, 삭제) 작업을 지원합니다.
- 유사도 검색: 코사인 유사도, 내적, 유클리드 거리 등 다양한 지표를 사용하여 특정 벡터와 유사한 벡터를 검색합니다.
- 인덱싱: ANN(Approximate Nearest Neighbor)과 같은 알고리즘을 사용하여 검색 속도를 높입니다.
- 메타데이터 필터링: 벡터와 함께 저장된 메타데이터(예: 문서 출처, 날짜)를 기반으로 검색 결과를 필터링하여 정확도를 향상시킵니다.
벡터 저장소 종류
오픈소스 솔루션
- FAISS (Facebook AI Similarity Search): Facebook AI Research에서 개발한 라이브러리로, 고속 유사도 검색에 특화되어 있습니다.
- Weaviate: 분산 아키텍처를 지원하며, GraphQL API를 통해 데이터를 관리할 수 있는 오픈소스 벡터 데이터베이스입니다.
- Qdrant: Rust로 작성되어 확장성과 성능이 뛰어난 벡터 데이터베이스입니다.
클라우드 기반 관리형 서비스
- Pinecone: 완전 관리형 벡터 데이터베이스 서비스로, 실시간 데이터 업데이트와 대규모 배포에 용이합니다.
- Chroma: RAG 애플리케이션 개발에 초점을 맞춘 오픈소스 및 관리형 벡터 데이터베이스입니다.
- Milvus: 대규모 벡터 유사도 검색을 위해 설계된 클라우드 네이티브 오픈소스 벡터 데이터베이스입니다.
인덱싱 및 검색 최적화
유사도 측정 지표
- 코사인 유사도 (Cosine Similarity): 두 벡터 간의 방향 유사성을 측정하며, 가장 널리 사용됩니다.
- 내적 (Dot Product): 두 벡터의 크기와 방향을 모두 고려합니다.
- L2 거리 (Euclidean Distance): 벡터 공간에서 두 점 사이의 직선 거리를 측정합니다.
인덱스 구조
- ANN (Approximate Nearest Neighbor): 정확도를 일부 희생하여 검색 속도를 크게 향상시키는 알고리즘입니다. HNSW, IVF 등이 대표적입니다.
- KNN (K-Nearest Neighbor): 가장 가까운 K개의 이웃을 찾는 정확한 검색 알고리즘이지만, 대규모 데이터에서는 속도가 느릴 수 있습니다.
- 계층적 인덱스 (Hierarchical Index): 데이터를 계층적으로 구성하여 검색 공간을 줄이는 방식입니다.