RAG 기반 벡터 데이터베이스 설정 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
인공지능
대상자
- LLM 기반 앱 개발자, 챗봇 및 내부 지식 어시스턴트 개발자
- 난이도: 중간 (Pinecone, SentenceTransformer, HuggingFace 모델 사용 경험 필요)
핵심 요약
- RAG(Retrieval-Augmented Generation)을 위해 Pinecone 벡터 데이터베이스를 활용한 구조 설계
- all-MiniLM-L6-v2 모델을 사용한 임베딩 생성 및 토크너 매핑 구현
cosine
유사도,384
차원의 밀집 벡터 설정이 필수적
섹션별 세부 요약
1. 벡터 데이터베이스 초기 설정
- Pinecone 계정 생성 후
stock-index
인덱스 생성 .env
파일에 API 키 저장all-MiniLM-L6-v2
모델 임베딩 파라미터:metric: cosine
,dimension: 384
HuggingFace
에서 모델 다운로드:sentence-transformers/all-MiniLM-L6-v2
2. 데이터 준비 및 처리
- CSV 파일 구조:
text,label
형식 (예:TSLA,Tesla
) alias_to_ticker
딕셔너리 생성:AAPL
→Apple
,TSLA
→Tesla
등- 정규화 처리: 대소문자, 별칭 매핑 통일
sentence_transformers
라이브러리 사용:SentenceTransformer('all-MiniLM-L6-v2')
3. 벡터 생성 및 Pinecone 업로드
aliases
배열을 기반으로 임베딩 생성 (model.encode(aliases, convert_to_numpy=True)
)- 배치 처리:
batch_size=50
로 Pineconestock-index
테이블에 벡터 업로드 - 벡터 형식:
id
,values(임베딩 배열)
,metadata(티커/별칭 정보)
포함
4. 테스트 및 검색 구현
EmbeddingStockMapper
클래스 정의:
- get_stock_ticker(query)
메서드로 쿼리 임베딩 생성
- Pinecone query
API로 유사도 검색 (top_k=1
, include_metadata=True
)
- 테스트 케이스 예시:
- query: "Apple Inc." → Ticker: AAPL
- query: "Microsoft Corporation" → Ticker: MSFT
- 결과: 별칭/이름 입력 시 해당 티커 코드 정확히 반환
결론
- RAG 기반 접근은 ChatGPT API 대비 더 효율적인 데이터 검색 성능 제공
- Pinecone 배치 업로드 시 2MB 제한 준수 필수
- 모델 임베딩 설정(
cosine
,384
) 오류 시 검색 실패 가능성 - 실무 적용 시
HuggingFace
모델과 Pinecone 연동 권장