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

프로필은 고쳐 쓰지 않아

~11 min · profiles, immutable, versioning, contract

Level 0꺼진 심지
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"어떤 규칙으로 id를 한 번 발행했다면 그 규칙은 몰래 달라질 수 없어. 동작을 바꾸려면 이름도 바꿔."

profile은 설정값보다 강한 계약이야

chunking profile은 문단 경계를 어떻게 보고, 크기 한도를 얼마로 두며, 겹치는 범위를 허용할지 정의해. md-para-v1 같은 profile id는 그 규칙으로 만든 모든 chunk id에 들어가. 따라서 이 이름은 단순한 설정 묶음이 아니라 '이 텍스트를 바로 이 방식으로 잘랐다'는 오래 가는 약속이야.

같은 이름 아래 동작을 바꾸면 과거가 거짓말해

더 큰 chunk가 좋아 보여 md-para-v1의 크기만 제자리에서 고쳤다고 해보자. 다시 색인하면 같은 문서가 다른 경계와 문자 위치, 다른 id를 내. 그런데 예전에 발행한 id는 여전히 v1이 만들었다고 적혀 있어. 현재의 v1로는 다시 만들 수 없는 결과를 v1의 결과라고 부르는 셈이지. 개선이 아니라 기존 인용의 생성 규칙을 지운 거야.

새 동작에는 새 id를 줘

규칙은 간단해. 동작을 바꿨다면 md-para-v2처럼 새 profile을 추가하고 v1은 그대로 얼려둬. 새 문서는 v2로 나눌 수 있고, 예전 인용은 v1 규칙을 다시 실행해 계속 확인할 수 있어. 두 버전이 함께 존재하면 과거를 버리지 않고도 더 나은 규칙으로 앞으로 갈 수 있어.

내구성 있는 id를 만드는 변환은 고치지 말고 버전을 올려. chunker와 문서 변환기, 스키마, 직렬화 형식처럼 하류 결과의 정체성을 결정하는 규칙은 같은 이름 아래 달라지면 안 돼. 새 동작은 새 버전이고, 옛 버전은 그 결과를 참조하는 기록이 남아 있는 동안 계속 살아 있어야 해.

같은 원칙이 모든 변환 기록을 지켜

captured 코퍼스의 태그 제거 규칙을 바꿀 때도 새 변환기 id가 필요해. 임베딩이나 reranker 결과에는 어느 모델 버전이 만들었는지 남겨야 하고. 시스템이 '변환 T가 이 결과를 만들었다'고 기록한다면 T는 훗날에도 같은 입력에 같은 동작을 뜻해야 해. 그래야 10년 치 파생 결과가 설명할 수 없는 더미가 아니라, 어느 규칙에서 나왔는지 되짚을 수 있는 기록으로 남아.

새 버전을 낸다고 모든 문서를 즉시 옮길 필요도 없어. v1 인용은 v1 규칙으로 계속 확인하고, 새로 수집하는 코퍼스부터 v2를 선택할 수 있어. 불변성은 변화를 막는 규칙이 아니라 과거를 깨지 않고 바꾸는 방법이야.

Code

v2를 추가하고 v1은 그대로 얼려둬·python
# Profiles are a frozen registry. You ADD versions; you never edit one.
PROFILES = {
    "md-para-v1": ChunkingProfile(max_chars=1200, overlap=0, split="paragraph"),
    # Want bigger chunks? Do NOT touch v1 above. Add v2:
    "md-para-v2": ChunkingProfile(max_chars=2400, overlap=100, split="paragraph"),
}

def get_profile(profile_id: str) -> ChunkingProfile:
    return PROFILES[profile_id]   # v1 always means exactly what it always meant

# WRONG — this one line silently invalidates every citation ever made under v1:
# PROFILES["md-para-v1"].max_chars = 2400   # never mutate a published profile

External links

Exercise

네 작업에서 다른 산출물이 기대고 있는 변환 하나를 골라봐. 데이터 내보내기 형식, 이름 규칙, 전처리 단계, 빌드 설정 모두 좋아. 내일 그 동작을 바꾸면 어느 하류 산출물이 말없이 틀어질지 먼저 찾고, 이를 막을 버전 체계를 설계해. 버전 이름은 어떻게 붙일지, 새 버전을 낸 뒤에도 옛 버전이 계속 유효하려면 무엇을 보존해야 할지 적어봐.
Hint
판단 기준은 이거야. 옛 출력과 기록된 버전 번호만으로 그 출력을 언제든 재현하거나 설명할 수 있어야 해. 변환을 제자리에서 바꿨을 때 옛 기록이 거짓말하게 된다면, 그 변환에는 버전 id와 옛 버전을 얼려 두는 규칙이 필요해.

Progress

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

댓글 0

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

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