C.W.K.
Stream
Lesson 03 of 04 · published

Profile 은 불변

~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 은 문서 텍스트가 chunk 가 되는 방식을 정확히 정의해 — 문단 경계, 크기 한도, overlap, 규칙이 뭐든. 그 id(가령 md-para-v1) 가 그게 만드는 모든 chunk id 에 구워져. 그래서 profile 은 config 손잡이보다 강한 게 돼: 계약이야. 계산된 모든 chunk id 는 "이 정확한 텍스트를, 이 정확한 방식으로 잘라, 이 정확한 규칙 세트 아래" 라 말하는 약속이야.

Profile 변형이 과거를 깨는 이유

이제 더 큰 chunk 가 낫다 정하고 md-para-v1 을 제자리에서 편집해 그걸 쓴다 해봐. 그 profile 이 만든 모든 chunk id 가 여전히 md-para-v1 이라 말하는데 — 그 id 가 묘사한 규칙은 더 이상 없어. 재색인하면 같은 문서가 다른 조각, 다른 offset, 다른 id 를 내. 옛 동작 아래 발행된 모든 citation 이 이제 허공을 가리켜: 저장한 id 가 현재 md-para-v1 은 절대 안 만들 chunk 를 묘사해. profile 을 개선한 게 아냐. 그 역사 전체를 조용히 무효화한 거야.

규칙: 새 동작은 새 id 를 받아

규율은 단순하고 절대적이야: chunking 동작을 바꾸는 건 새 profile id 를 발행하는 것md-para-v2 — 이고 md-para-v1 은 절대 안 건드려. 옛 profile 은 늘 뜻하던 걸 정확히 계속 뜻해. 문서는 앞으로 v2 아래 다시 chunk 될 수 있고, v1 실행에 앵커된 모든 citation 은 완벽히 resolve 가능하게 남아, v1 의 동작이 영원히 얼어 있으니까. 옛것과 새것이 공존하고, 과거의 어떤 것도 고아가 안 돼.

변환을 버전 매겨; 제자리에서 절대 변형하지 마. 출력이 내구성 있는 정체성으로 흘러드는 변환 — chunker, 변환기, 스키마, 직렬화 포맷 — 은 편집이 아니라 버전 매겨져야 해. 동작이 조용히 바뀌는 순간, '버전 X 가 만듦' 이라 기록한 모든 게 거짓말이 돼. 새 동작은 새 버전이고, 옛 버전은 그 출력을 뭔가 아직 참조하는 한 살아 있어.

이 패턴은 내구성 있는 곳 어디에나 있어

같은 불변성이 capture 변환기를 다스리고(strip 규칙을 바꾸면 새 변환기 id 발행), 결과가 어느 임베딩·reranker 모델이 만들었는지 기록하는 것도 같은 이유야. 시스템이 "이 산출물은 변환 T 가 만듦" 이라 말할 때마다, T 는 그 버전에 영원히 얼어 있어야 해, 안 그러면 기록이 재현 불가능해져. 불변, 버전 매겨진 변환이, 10년 치 파생 산출물을 아무도 재현 못 할 출력 더미로 쌓는 대신 설명 가능하게 유지하는 방법이야.

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

출력이 다른 것들이 의존하는, 네 작업 속 변환을 찾아 — 데이터 export 포맷, 이름 짓기 방식, 전처리 단계, 빌드 config. 물어: 내일 그 동작을 바꾸면, 어느 하류 산출물이 조용히 틀려질까? 그걸 지킬 버전 매기기를 설계해: 버전을 어떻게 이름 붙이고, 새 게 나온 뒤 옛 버전이 유효하게 남으려면 뭐가 필요할까?
Hint
테스트는 옛 출력 더하기 기록된 버전 번호가 그 출력을 영원히 재현하거나 설명하기에 충분하냐야. 변환을 제자리에서 바꾸면 옛 기록이 거짓말한다면, 그 변환은 버전 id 와 옛것-얼리기 규칙이 필요해.

Progress

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

댓글 0

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

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