05-infrastructure-vector-index
Dec 7, 2025
Vector Index & Similarity Search
코드:
lib/graph/vector.ts
개요
FalkorDB의 벡터 인덱스를 사용한 시맨틱 메모리 검색입니다.
핵심 개념
용어 | 설명 |
|---|---|
Embedding | 텍스트를 고차원 벡터로 변환한 것 (1536차원) |
Vector Index | 벡터 간 유사도 검색을 위한 인덱스 |
Cosine Similarity | 두 벡터의 방향 유사도 (0~1) |
설정
기본 구성
인덱스 초기화
임베딩 저장
단일 저장
배치 저장
유사도 검색
기본 검색
필터 적용 검색
특정 메모리와 유사한 것 찾기
유틸리티 함수
임베딩 존재 여부 확인
임베딩 없는 메모리 조회
설계 결정
왜 1536 차원인가?
OpenAI의 text-embedding-3-small 모델 출력 차원입니다.
모델 | 차원 | 비용 | 성능 |
|---|---|---|---|
text-embedding-3-small | 1536 | 저렴 | 충분 |
text-embedding-3-large | 3072 | 비쌈 | 높음 |
text-embedding-ada-002 | 1536 | 중간 | 레거시 |
대부분의 use case에서 small 모델로 충분합니다.
왜 Cosine Similarity인가?
정규화된 벡터: OpenAI 임베딩은 정규화됨
방향 기반: 벡터 크기가 아닌 방향으로 유사도 측정
효율적: 계산이 빠름
대안:
Euclidean: 거리 기반, 정규화 필요
Dot Product: 크기에 민감
왜 Memory 노드만 임베딩을 가지는가?
Person/Entity/Thread: 관계를 통해 탐색
Memory: 내용 기반 검색 필요
관계 그래프를 활용한 2단계 검색이 더 효과적입니다.
성능 고려사항
인덱스 빌드 시간
벡터 인덱스는 데이터가 많을수록 빌드 시간이 늘어납니다:
1,000개: 즉시
10,000개: 수 초
100,000개: 수 분
검색 성능
FalkorDB의 벡터 인덱스는 HNSW 알고리즘 기반:
검색 시간: O(log n)
정확도: 근사치 (정확한 결과가 아닐 수 있음)
메모리 사용량
벡터당 메모리: dimension * 4 bytes = 1536 * 4 = 6KB
메모리 수 | 벡터 저장 공간 |
|---|---|
1,000 | ~6 MB |
10,000 | ~60 MB |
100,000 | ~600 MB |
RAG 파이프라인 통합
전체 흐름
코드 예시
다음 문서
FalkorDB 연결 - 클라이언트 설정
그래프 스키마 - 노드 인덱스