본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

프로덕션을 깨지 않는 임베딩 버전 관리

~22 min · ops, migrations

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

시간이 지나며 바뀌는 세 가지

  1. 임베딩 모델 — 제공자가 v3를 내놓아 업그레이드하고 싶어져.
  2. 청킹 전략 — 분할기나 청크 크기를 바꾸게 돼.
  3. 메타데이터 스키마 — tenant_id나 권한 수준을 추가하게 돼.

세 변경 모두 다시 수집해야 해. 핵심은 유지 보수 중단 없이 해내는 거야.

이름에 버전 접미사를 붙여

컬렉션이나 테이블 이름에 docs-bge-m3-v3, chats-openai-large-2026q2처럼 버전을 넣고 앱은 설정 포인터로 현재 버전을 가리켜. 새 컬렉션을 나란히 만들고 검증한 뒤 포인터를 전환하고, 일주일 뒤 이전 컬렉션을 지워. 되돌릴 때도 설정 하나만 바꾸면 돼.

검색 시점의 예비 경로

이전 기간에는 새 컬렉션과 이전 컬렉션을 모두 검색하고 최저 점수를 넘는 결과가 더 많은 쪽을 반환할 수 있어. 새 모델이 일부 쿼리에서 더 나쁜 경우를 완전히 전환하기 전에 발견할 수 있지.

Code

버전이 있는 컬렉션 도우미·python
import os

DOCS_COLLECTION = os.environ.get('DOCS_COLLECTION', 'docs-bge-m3-v3')

def docs():
    return get_client().get_or_create_collection(DOCS_COLLECTION,
                                                 metadata={'hnsw:space': 'cosine'})
전환 기간의 이중 읽기·python
OLD = get_client().get_collection('docs-bge-m3-v2')
NEW = get_client().get_collection('docs-bge-m3-v3')

def retrieve(question: str, k: int = 5, min_score: float = 0.3):
    new_results = query(NEW, question, k)
    above = [r for r in new_results if (1 - r['distance']) >= min_score]
    if len(above) >= k:
        return above
    # 새 collection 이 이 query 에 thin 이면 옛 collection 으로 fallback
    return query(OLD, question, k)

External links

Exercise

실제 또는 표본 데이터가 든 컬렉션을 나란한 컬렉션 방식으로 다른 임베딩 모델에 이전해. 설정 포인터를 되돌려 복구도 연습하고 양방향에 걸린 시간을 재. 그 실제 시간이 이전 위험을 판단할 근거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.