피드로 돌아가기
Understanding RAG by Building a ChatPDF App: From NumPy to FAISS (Part 2)
Dev.toDev.to
AI/ML

NumPy Brute-force에서 FAISS Indexing 기반의 고성능 RAG 아키텍처로의 전환

Understanding RAG by Building a ChatPDF App: From NumPy to FAISS (Part 2)

Sharath Kurup2026년 4월 14일6intermediate

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 인터페이스 구현

원문 읽기