250114 TIL OpenAI 기반 Query 분석 및 벡터스토어 설계
1. 한 일
OpenAI 기반 Query 분석 및 벡터스토어 설계
- Query 분석 로직 점검 및 수정:
ChatPromptTemplate
에서 사용자 질문이 {user_query}
로 제대로 치환되지 않는 문제 확인.
- 템플릿과 변수 전달 방식 개선.
- 벡터스토어 및 메타데이터 관리:
FAISS
기반 벡터스토어 생성 및 로드 로직 작성.
- 메타데이터 파일(
pickle
)의 구조를 디버깅하여 데이터 일관성 확인.
- 경로 설정 및 확인:
- 상대 경로에서 발생하는 문제를 방지하기 위해 절대 경로로 변환하여 안정성 확보.
- 벡터스토어 및 메타데이터 파일의 유효성 검사 코드 작성.
2. TroubleShooting
{user_query}
치환 문제
- 문제:
ChatPromptTemplate
에서 사용자 입력이 변수로 치환되지 않고 문자열 그대로 전달.
- 해결:
- chain.invoke
호출 시 올바르게 데이터를 전달하도록 수정.
too many values to unpack (expected 2)
- 문제:
- 벡터스토어 및 메타데이터 로드 중 예상하지 못한 데이터 구조로 인해 발생.
- 해결:
- pickle.load
와 FAISS.load_local
의 반환값을 디버깅하여 데이터 구조 확인.
- 벡터스토어 파일(index.faiss
)과 메타데이터 파일의 경로 및 내용을 재확인.
FAISS 파일 경로 오류
- 문제:
- 벡터스토어 경로(
VECTOR_STORE_PATH
)와 메타데이터 경로(METADATA_PATH
)가 상대 경로로 설정되어 로드 실패.
- 해결:
- 모든 경로를 절대 경로로 변환.
- 경로와 파일 유효성을 검사하는 코드 추가.
3. 느낀 점
디버깅과 로깅의 중요성
- 시스템 설계 과정에서 발생하는 오류는 대부분 입력 데이터 구조와 설정값의 불일치에서 비롯됨. 디버깅을 통해 문제를 빠르게 해결할 수 있었음.
- 로깅을 적극적으로 활용해 파일 경로, 반환값, 변수 상태를 추적한 결과, 코드의 안정성을 높이는 데 큰 도움이 됨.
데이터 일관성 유지의 필요성
- 벡터스토어와 메타데이터 관리의 핵심은 데이터 구조의 일관성. 데이터 생성 및 로드 과정을 투명하게 설계하는 것이 중요함.
- 파일 손실 또는 손상에 대비해 재생성 로직을 포함시키는 것이 장기적으로 유용하다는 것을 깨달음.