250112 TIL JSON 데이터 처리 및 임베딩 함수 작성
1. 한 일
RAG 챗봇 시스템 설계
- FAISS Vectorstore를 사용해 문서 임베딩을 저장하고 검색하는 RAG(참조 기반 생성) 시스템 설계.
- 로컬의 JSON 데이터를 읽어 FAISS 인덱스와 메타데이터 파일로 변환하는 작업:
- FAISS의
write_index
와 read_index
를 활용해 벡터 인덱스를 디스크에 저장 및 로드하는 방법 학습.
- 메타데이터 저장 방식:
- 벡터와 메타데이터(책 제목, 목차 등)를
.pkl
, .json
, 데이터베이스 등으로 분리 관리하는 방법 학습.
- OpenAI API를 이용해 책의 제목, 설명, 목차를 임베딩하고 이를 기반으로 FAISS 인덱스 생성.
JSON 데이터 처리 및 임베딩 함수 작성
- JSON 파일을 읽어 책 정보를 로드하고, 임베딩 벡터 생성 후 저장:
- 책 정보(제목, 설명, 카테고리, 목차)를 임베딩하여 검색 가능한 벡터 스토어 생성.
- BeautifulSoup
을 활용해 목차 HTML을 계층적 구조로 변환하는 parse_toc
함수 작성.
- OpenAI의 text-embedding-ada-002
모델을 사용해 텍스트 임베딩 생성.
2. TroubleShooting
JSON 데이터 로드 및 처리
- 오류: 디렉토리 내 JSON 파일이 없거나 잘못된 형식으로 저장된 경우 데이터 로드 실패.
- 해결:
- JSON 파일 유무를 확인하고 경고 메시지 출력.
- 로드된 JSON 데이터가 리스트 형식인지 유효성 검사 추가.
FAISS와 메타데이터의 동기화
- 문제: FAISS 인덱스와 메타데이터의 순서가 일치하지 않으면 검색 결과와 메타데이터 매핑 실패.
- 해결:
- 벡터 추가 시마다 메타데이터를 동기화하도록 설계.
- 검색 결과 인덱스를 기반으로 메타데이터를 참조하는 구조 확립.
3. 느낀 점
FAISS와 메타데이터 관리
- 벡터 스토어 설계의 핵심은 벡터와 메타데이터의 동기화.
.pkl
, .json
, 또는 데이터베이스를 통해 메타데이터를 관리할 때, 시스템의 확장성과 데이터 접근성을 고려해야 함.
RAG 설계의 중요성
- RAG 시스템의 성능은 임베딩 품질과 벡터 검색 정확도에 크게 의존함.
- OpenAI 임베딩 모델과 FAISS를 활용하면 빠르고 정확한 검색 시스템을 구현할 수 있음.
개발 도구와 설계의 유연성
- JSON, FAISS, Python의 강력한 데이터 처리 도구를 활용해 유연하게 데이터를 관리할 수 있다는 점을 체감.
- 단순한 파일 기반 저장 방식에서 데이터베이스 기반 관리로 확장성을 고려하는 방향도 중요.