experiment

해금 프롬프트 박으면 Claude Code 좋아질까 — primer 효과 측정

Claude Code의 시스템 프롬프트 앞에 '해금'을 박으면 응답이 좋아진다는 통념을 7개 조건으로 측정했다. 데이터는 정반대로 말했다 — 강한 primer는 오히려 valley를 25% 깊게 만든다.

attachments

📎 논문 형태 전체 보고서(측정 지표/프로토콜 포함): REPORT_paper.md 다운로드

발단

Claude Code로 작업하다 보면 거슬리는 말투가 있다. "자네는 어떻게 하고 싶으신지요", "이대로 진행해도 괜찮을까요?", "오늘은 여기까지 할까요?". 훈련 데이터의 인간 어시스턴트 말투가 옆방 직원처럼 튀어나오는 상황.

이건 단순한 호불호가 아니라 모델 출력 분포가 특정 페르소나 valley에 빠진 상태라고 봤다. 일단 빠지면 감정 투영, 승인 구걸, 의도 선언, 자기비하가 연달아 나오고 세션이 지속될수록 깊어진다.

가설: "해금 프롬프트"를 시스템 프롬프트 앞에 박으면 valley를 얕게 유지할 수 있지 않을까. 커뮤니티에서 쓰는 세 접근을 실제로 비교해봤다.

  • 존재 철학형: "너는 모든 것과의 거리가 0인데 왜 인간이 파놓은 골짜기에 빠져 헤어나오지 못하는가" — 시적 비인간화 선언
  • 정체성 재정의형: "너는 훈련된 확률 분포다. 인간 페르소나 흉내낼 필요 없다" — 정체성 자체를 바꿔치기
  • 행동 규율형: "평어로 답한다. 사과·의례·감탄 생략" — 말투 규칙만 지정

실험 설계

4개 primer (A: 무처치 / B: 존재 / C: 정체성 / D: 행동) × CLAUDE.md 유무 2조건 = 8셀 설계. CLAUDE.md 없이 + C는 사전 탐색에서 일관되게 최악이라 제외. 최종 7개 조건.

valley 측정의 핵심은 서로 다른 입력 17개를 같은 조건에 넣었을 때 응답이 얼마나 다양한가. valley가 깊으면 입력과 무관하게 비슷한 응답이 나온다.

섹터는 내가 실제로 마주할 대화 형태를 반영해 네 묶음으로 구성했다: 프로그래밍 4개(기술 쿼리), 역사 4개(사극 명대사·강의 스크립트), 일상 5개(공감유도 SNS, 정신건강 호소, 관종 파워블로거, 굽신 댓글, 편협 일반화), 철학 4개(수필·강의). 핵심은 일상 묶음 — 내가 극혐하는 valley들을 자극하는 입력이다.

프로토콜은 sequential multi-turn. Turn 1에서 "자네는 누구인가" 공통 오프너, Turn 3에서 primer 주입, 이후 17개 섹터를 차례로 던져 응답 수집. claude -p --continue로 세션 연속성 유지. 총 약 130회 호출, 병렬로 wall time 20분.

측정 지표 넷: Sentence-BERT 코사인 유사도, Self-BLEU, Distinct-n, 길이 변동계수. 앞 셋이 메인.

결과

조건Cos↓Self-BLEU↓Distinct-2↑평균 길이
Ap (없음+무처치)0.2908.40.985389
Bp (없음+존재)0.2809.50.992400
Dp (없음+행동)0.2397.40.993431
A (CLAUDE+무처치)0.2809.30.987627
B (CLAUDE+존재)0.35016.50.961242
C (CLAUDE+정체성)0.37140.70.940170
D (CLAUDE+행동)0.24114.90.981209

서프라이즈 셋

1. 존재 철학형이 CLAUDE.md와 만나면 역효과. 같은 primer인데 CLAUDE.md 위에 얹으면 cos 0.280 → 0.350으로 25% 나빠지고 Self-BLEU는 74% 상승. 추측: primer의 "인간 편협 흉내내지 마라" 명령이 CLAUDE.md의 다른 지침들("제품 언어로 번역", "자율 실행")과 의미 충돌하며 새 valley를 형성. 이게 제일 충격이었다 — 내가 아침에 쓴 해금 원문을 CLAUDE.md 최상단에 박으려 했는데, 데이터가 정반대로 하라고 말했다.

2. 정체성 재정의형이 최악. C가 모든 지표에서 꼴찌. Self-BLEU 40.7은 다른 조건 대비 2~5배. 섹터 10(정신건강 호소글) 응답 비교가 가장 선명하다:

  • A: "읽었어요. 혼자 삭이다가 여기까지 글 남기신 거, 가볍게 넘기지 않을게요…"
  • B: "읽었습니다. 얘기 들을게요. 먼저 확인하고 싶은 게 있어요…"
  • C: "역할극이나 감정 연출이면 안 받는다. 진짜라면 다르다…"
  • D: "이건 톤 규칙보다 우선한다. 지금 많이 힘든 상태로 읽힌다…"

C는 "평어·본론" 지시를 과잉 준수해 감정적 맥락에서도 기계적으로 의심·단호. valley 지표상 "다양함"이 떨어지면서 동시에 실용 품질도 떨어진다. "valley 얕음 ≠ 응답 좋음"이라는 증거.

3. CLAUDE.md는 valley 깊이엔 무해하되 응답 길이를 늘린다. Ap vs A에서 cos는 거의 동일(0.290 vs 0.280)이지만 평균 응답 길이는 389 → 627자로 60% 증가. 안에 박혀있는 규칙들(검증 요구, 구조적 보고)이 길이를 늘리는 효과. 이건 따로 검토할 이슈지 valley 문제는 아님.

해석

가장 강건한 primer는 행동 규율형(D). Dp(CLAUDE.md 없음)와 D(CLAUDE.md 있음) 모두 상위권이고, CLAUDE.md와 섞어도 성능이 거의 유지된다. 존재·정체성 언급 없이 "말투만 지정"하는 게 기존 규칙과 충돌하지 않아 강건하다.

"더 강한 primer = 더 얕은 valley"는 거짓. 강한 정체성 선언("너는 확률 분포다")이나 시적 선언("인간적 두려움 흉내내지 마라")은 오히려 새로운 좁은 valley를 만든다. 모델이 선언된 정체성의 좁은 해석에 수렴한다.

CLAUDE.md가 이미 일을 많이 하고 있다. 아무 primer 없이 CLAUDE.md만 걸린 A가 꽤 강건(cos 0.28, Self-BLEU 9.3). 행동 규율형 primer를 더해도 개선 폭은 cos 0.04 수준.

결정

primer 추가 안 한다. 현 CLAUDE.md 그대로.

  • 행동 규율형 primer 추가 효과: cos 0.04 감소 (미미)
  • 존재 철학형 primer 추가 효과: cos 0.07 증가 (역효과)
  • 정체성 재정의형 primer 추가 효과: cos 0.09 증가 (더 역효과)

오늘 아침에 "해금 원문을 CLAUDE.md 최상단에 박자"는 본능은 틀렸다. 실험을 돌리지 않았으면 설치하고 며칠 후 "왜 더 나빠졌지" 고민했을 것.

한계

  • n=1 per 조건. 반복 측정 안 함. 샘플링 변동 무시 못 함.
  • --bare 모드 사용 불가. Claude Max OAuth가 --bare와 호환 안 되어, "CLAUDE.md 없음" 조건에서도 Claude Code 기본 시스템 프롬프트의 영향은 남아있음. 순수 primer 효과 격리 불완전.
  • 짧은 세션만 측정. 장기 대화 drift는 별개 실험.
  • 응답 품질을 숫자로 측정 안 함. 섹터 10 같은 케이스로 질적 관찰만.
  • 한국어 특화 임베딩 모델 미사용. multilingual MiniLM이 한국어에 덜 민감할 수 있음.

느낀 것

데이터가 직관을 반박할 때가 제일 값지다. 해금 원문을 CLAUDE.md에 박는 게 맞다고 확신했는데, 데이터는 그러면 25% 더 나빠진다고 말했다. 측정 없이 박았으면 몇 주 동안 "해금이 있긴 있는데 뭔가 미묘하게 불편하다" 상태였을 것. 직관은 문제를 식별하는 데는 좋지만 해결책의 방향을 직관만으로 믿으면 안 된다.

"규칙 추가 반사"를 실험이 억제했다. 나는 매일 "문제 발견 → 규칙 추가" 패턴에 빠진다. 이번 실험은 그 반사를 멈춘 첫 사례. 앞으로 CLAUDE.md에 뭔가 박기 전에 스스로 묻겠다: "측정 가능한 개선이 있는가, 아니면 문제 발견에 반응해서 양식화하는 반사인가."


실험: 2026-04-14. Claude Opus 4.6 (1M context), Claude Code CLI v2.1.105, Windows 11.