피드로 돌아가기
Dev.toAI/ML
원문 읽기
NumPy Brute-force에서 FAISS Indexing 기반의 고성능 RAG 아키텍처로의 전환
Understanding RAG by Building a ChatPDF App: From NumPy to FAISS (Part 2)
AI 요약
Context
NumPy 기반의 벡터 유사도 검색은 모든 청크를 전수 조사하는 O(n) 시간 복잡도로 인해 데이터 규모 증가 시 검색 지연 발생. 전체 데이터셋 스캔 및 정렬 과정에서 발생하는 성능 병목으로 인해 확장 가능한 ChatPDF 구현에 한계 직면.
Technical Solution
- IndexFlatIP 기반의 FAISS Index 도입을 통한 Inner Product 검색 최적화
- float32 데이터 타입 강제 적용으로 FAISS 라이브러리 호환성 확보 및 런타임 오류 방지
- FAISS Index 및 Metadata의 디스크 영속화로 PDF 재분석 및 Embedding 생성 비용 제거
- SHA256 Hash 기반의 PDF 변경 감지 로직을 통한 조건부 인덱스 재빌드 설계
- FAISS의 1차 검색 결과에 Re-ranker 레이어를 추가하여 검색 정확도 및 문맥 관련성 향상
- LLM 응답의 Streaming 처리 방식을 도입하여 사용자 체감 대기 시간(Perceived Latency) 단축
실천 포인트
1. 대규모 벡터 검색 시 Brute-force 대신 FAISS 등 전문 Indexing 라이브러리 검토
2. 임베딩 데이터의 영속화(Persistence)와 파일 해시 기반의 캐싱 전략 적용
3. 검색 속도 개선 후에는 Re-ranking 단계 도입을 통해 정밀도(Precision) 보완
4. 사용자 경험 향상을 위해 LLM 응답의 Streaming 인터페이스 구현