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 딕셔너리 생성: AAPLApple, TSLATesla
  • 정규화 처리: 대소문자, 별칭 매핑 통일
  • sentence_transformers 라이브러리 사용: SentenceTransformer('all-MiniLM-L6-v2')

3. 벡터 생성 및 Pinecone 업로드

  • aliases 배열을 기반으로 임베딩 생성 (model.encode(aliases, convert_to_numpy=True))
  • 배치 처리: batch_size=50로 Pinecone stock-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 연동 권장