VectorDB-meta data

문건희·2025년 2월 27일

RAG

목록 보기
8/12

📌 벡터DB 메타데이터 설계 및 활용

🔹 1. 벡터DB에서 메타데이터의 역할

메타데이터란?

  • 벡터 데이터(예: 문서 청크, 문서 임베딩)에 대한 추가적인 정보(상위 데이터)
  • 검색 시 벡터 유사도 매칭 외에도 필터링을 쉽게 할 수 있도록 도와주는 요소
  • 보험 관련 데이터에서는 다음과 같은 정보를 저장하면 유용함

🔹 2. 메타데이터 정의 (보험 데이터 기준)

메타데이터 필드설명예시
category보험 분류"자동차보험", "건강보험"
insurance_company보험사"삼성화재", "현대해상"
insurance_name보험 상품명"행복든든보험", "실손보험"
sale_start_date판매 시작일"2020-01-01"
sale_end_date판매 종료일"2023-12-31"
status판매 상태 (자동 계산 가능)"판매중", "판매종료"
target_audience대상 고객층"개인", "법인", "노인", "청년"
coverage_amount보장 한도"1억 원", "2천만 원"
policy_type보험 유형"정액형", "실비형"
contract_term계약 기간"10년", "20년"
premium_range보험료 범위"월 5만원", "연 100만원"

📌 특징

  • status 필드는 sale_end_date 기준으로 자동 계산 가능
  • 고객이 원하는 보험 필터링 가능 (예: category="건강보험"인 데이터만 조회)
  • 특정 보험사 상품만 검색 가능 (예: insurance_company="삼성화재")

🔹 3. 벡터DB 저장 방식 예시 (FAISS, Pinecone, Weaviate 등)

💡 벡터DB에 저장할 때는 벡터와 함께 JSON 형태로 메타데이터 저장 가능

👉 벡터DB 저장 예제 (Pinecone)

import pinecone

# Pinecone에 연결
pinecone.init(api_key="your-api-key", environment="us-west1-gcp")

# 인덱스 생성 (벡터DB)
index = pinecone.Index("insurance_vectors")

# 예제 데이터 (청크된 보험 관련 문서)
vector_id = "insurance_001"
vector_embedding = [0.123, 0.234, 0.567, ...]  # 임베딩된 벡터 값

metadata = {
    "category": "건강보험",
    "insurance_company": "삼성화재",
    "insurance_name": "행복든든보험",
    "sale_start_date": "2020-01-01",
    "sale_end_date": "2023-12-31",
    "status": "판매종료",  # 자동 계산 가능
    "target_audience": "개인",
    "coverage_amount": "1억 원",
    "policy_type": "정액형",
    "contract_term": "10년",
    "premium_range": "월 5만원"
}

# 벡터DB에 저장
index.upsert(vectors=[
    (vector_id, vector_embedding, metadata)
])

🔹 4. 메타데이터 활용 (검색 및 필터링)

💡 벡터DB에서 검색할 때 메타데이터를 활용하면 필요한 데이터만 빠르게 조회 가능

✅ 1) 특정 보험사 상품 검색

query_result = index.query(
    vector=[0.123, 0.234, 0.567, ...],  # 쿼리 벡터
    top_k=10,  # 유사한 10개 반환
    filter={"insurance_company": "삼성화재"}  # 특정 보험사만 조회
)

✅ 2) 판매 중인 상품만 검색

query_result = index.query(
    vector=[0.123, 0.234, 0.567, ...],
    top_k=10,
    filter={"status": "판매중"}  # 판매 종료된 상품 제외
)

✅ 3) 건강보험 중에서 월 5만원 이하인 상품 검색

query_result = index.query(
    vector=[0.123, 0.234, 0.567, ...],
    top_k=10,
    filter={"category": "건강보험", "premium_range": "월 5만원"}
)

🔹 5. 메타데이터 자동 관리 (판매 종료 여부 자동 업데이트)

💡 status 필드를 자동으로 업데이트하도록 관리하면 더욱 효율적임.
💡 sale_end_date가 현재 날짜보다 작으면 status="판매종료"로 설정.

from datetime import datetime

def update_status(metadata):
    today = datetime.today().strftime("%Y-%m-%d")
    if metadata["sale_end_date"] < today:
        metadata["status"] = "판매종료"
    else:
        metadata["status"] = "판매중"
    return metadata

🔹 6. 최적화된 메타데이터 설계의 장점

빠른 검색 및 필터링 가능
필요 없는 데이터(판매 종료된 보험 상품) 쉽게 제거 가능
보험 분류, 회사별 검색 등 편리한 쿼리 가능
메타데이터 자동 업데이트로 관리 부담 최소화


🔹 7. 결론: 최적의 벡터DB 메타데이터 활용법

1️⃣ 보험 상품 데이터를 벡터DB에 저장할 때 메타데이터 포함
2️⃣ 보험 분류, 보험사, 판매 상태 등 필터링 가능한 항목 포함
3️⃣ 판매 종료 여부(status) 자동 관리하여 쿼리 효율화
4️⃣ 필요한 조건을 설정하여 원하는 보험 데이터만 검색 가능

➡️ 메타데이터를 잘 활용하면 벡터DB에서 검색이 더 빠르고 정확해짐! 🚀


📌 다음 단계

📌 벡터DB 적용 환경(Pinecone, Weaviate, FAISS 등)을 선택해야 함
📌 실제 데이터셋을 벡터로 변환하는 과정 필요
📌 메타데이터 자동 업데이트 스크립트 실행 고려


0개의 댓글