본문으로 건너뛰기

연구

기법

기본 모델 교체가 드러낸 문서 언어 정책의 공백과 하니스 감사가 남긴 한계

7월 합성 하니스는 두 모델의 언어 선택 차이를 기록했고, 문서 언어와 대화 언어를 분리하는 정책을 만들었습니다. 그러나 8월 10일 감사에서 런타임 프롬프트 꼬리 누락, BARE 분기 미측정, 잘못된 전송 경로가 발견돼 생산 효과 수치와 160/160 주장을 철회했습니다.

runtime tail 누락 · BARE 미측정 · 프로덕션과 다른 transport
3 fidelity breaks
역사적 합성 하니스의 생산 인과·수정 후 비율 철회 · 충실한 재실행 필요
Superseded

질문: 기본 모델 교체가 문서 언어 회귀를 만들었고, 프롬프트만으로는 고칠 수 없었는가?

관찰: 2026년 7월 합성 실험은 모델별 차이를 기록했지만, 8월 10일 감사에서 프로덕션 프롬프트 꼬리·전송 경로·BARE 분기를 재현하지 않았음이 드러났습니다.

결정: 언어 정책과 코드 경계는 유지하고, 기존 성공률은 역사적 관찰로 강등한 뒤 프로덕션 충실 하니스로 다시 측정합니다.

기본 모델 교체, 별도의 미출시 지시문 회귀, 명시적 언어 정책 도입, 그리고 기존 평가를 무효화한 하니스 감사의 네 단계

1. 한 사용자 리포트에서 두 사건을 분리하기

사용자 리포트는 “앱이 작성한 문서가 한국어를 영어로 직역한 듯하다”는 것이었습니다. 확인된 시간 순서는 다음과 같습니다.

시점 확인된 사건 증거가 말할 수 있는 범위
2026-07-25 · v1.6.2 기본값이 Sonnet 5에서 Opus 5로 바뀜 000d86b0과 당시 세션 상태가 조용한 전면 전환을 설명함
2026-07-30 · 미출시 별도의 언어 지시문이 ask_user 카드 언어를 회귀시킴 어떤 릴리스에도 포함되지 않았고, 사용자 리포트의 원인이 아님
2026-07-31 · 구현 문서 언어 정책을 명시하고 prose/bare 판정을 Rust로 이동 현재 코드와 회귀 테스트로 확인 가능
2026-08-10 · 감사 7월 평가 하니스의 프로덕션 비충실성을 확인 기존 성공률의 프로덕션 해석을 supersede함

기본 모델 변경은 리포트와 시간상 맞고 합성 비교에서도 차이가 났습니다. 그러나 리포트의 “이상한 문법” 자체는 점수화하지 않았습니다. 또한 7월 30일 지시문 회귀는 별개의 미출시 결함입니다. 두 사건을 하나의 인과 사슬로 쓰면 안 됩니다. 원기록도 이 구분을 명시합니다: docs/details/language-directive-document-language-2026-07-31.md §1·§7.

2. 7월 실험이 실제로 관찰한 것

역사적 비교는 언어 지시문이 없는 1턴 합성 히스토리에서, 한국어 노트를 영어 산문으로 질문한 문서 생성 결과를 셌습니다.

모델·조건 원문 언어 유지 원문 인용 보존 현재 해석
Sonnet 5 · n=20문서 · 무지시 합성 프롬프트 20/20 20/20 역사적 하니스 관찰
Opus 5 · n=20문서 · 같은 합성 프롬프트 8/20 8/20 역사적 하니스 관찰, 정확 계수 확인 필요

기록된 비교의 Fisher 정확검정은 p=4.5e-5 · n=40문서 · 20/20 대 8/20입니다. 다만 현재 코드 주석은 같은 조건을 “Opus가 9/20문서를 번역했다”고 적어, 원기록의 12/20 언어 전환과 모순됩니다. 원시 생성물이 저장소에 없어 8/20이라는 정확한 계수와 그 p값은 잠정치입니다.

인용은 원문과 같은 언어인 문서에서 24/24 · 역사적 합성 문서, 다른 언어인 문서에서 1/26 · 역사적 합성 문서 보존됐습니다. 이는 이 표본에서의 강한 연관입니다. 언어 전환이 인용 변형을 일으켰다는 반사실 인과효과는 측정하지 않았습니다.

3. 프롬프트 실험: 관찰과 결론을 나누기

자료 언어, 사용자 턴 언어, UI 로케일이 엇갈리는 셀에서 다섯 가지 정책 문구를 비교했습니다. 대표 결과는 아래와 같습니다.

역사적 문구·합성 조건 B: 영어 자료·bare·ko UI F: 영어 자료·한국어 산문·en UI
언어 섹션 없음 영어 50/50문서 한국어 29/29문서
“자료 언어를 따른다” 영어 30/30문서 한국어 0/29문서
코드가 자료 언어를 헤더에 명명 영어 30/30문서 한국어 11/20문서
같은 명명을 조건절 안에 배치 영어 17/30문서 한국어 19/20문서

이 표가 지지하는 문장은 “시험한 문구들이 선택한 합성 셀을 동시에 통과하지 못했다”까지입니다. “프롬프트로는 고칠 수 없다”는 결론은 지지하지 않습니다. 실제로 명시적 지시문을 넣은 Opus 5는 30/30문서 · 동일한 구 하니스 조건을 통과했습니다.

더 중요한 반증은 뒤의 하니스 감사입니다. B를 bare 조건으로 설계했지만 당시 조립 호출은 user_message=None을 넘겨 모든 셀을 PROSE 절반에 고정했습니다. 따라서 이 표로 모델의 prose/bare 판정 능력을 평가할 수 없습니다.

4. 남긴 구현: 정책과 판정 경계

현재 정책은 두 층으로 나뉩니다.

  1. 문서 본문은 호출자의 UI 로케일로 씁니다.
  2. 대화·내레이션은 사람이 산문을 썼으면 그 언어를 따르고, bare 트리거면 UI 로케일을 따릅니다.

코드가 맡은 것은 언어 생성 전체가 아니라 어느 지시문 절반을 넣을지 판정하는 일입니다. turn_has_prose는 선행 슬래시 명령, 위키링크, 코드 스팬, 경로와 URL을 제거한 뒤 두 글자 이상이 남는지 봅니다. 이 정책은 src-tauri/src/agent.rsbuild_system_promptturn_has_prose 테스트로 보호됩니다. 언어 절이 앞 불릿의 연속 행으로 붙었던 조립 결함도 appended_prompt_sections_start_a_new_block 테스트로 막습니다.

이는 “정답 언어를 발견한 것”이 아니라 제품 정책을 명시한 것입니다. 영어 UI로 한국어 자료를 다루는 사용자가 영어 문서를 받는 비용이 있으며, ko/en 밖의 ja/zh/es/fr/de는 아직 결과 데이터가 없습니다.

5. 8월 10일 감사가 무효화한 해석

후속 감사는 기존 평가가 재현한 것과 프로덕션이 실제로 실행한 것을 코드 수준에서 대조했습니다.

기존 기록의 표현 감사에서 확인한 조건 상태
“실제 조립된 프로덕션 프롬프트” build_system_prompt 뒤에 붙는 memory, live entity index, DESIGN.md, /goal 절을 누락 프로덕션 해석 철회
“Anthropic의 프로덕션 /chat/completions 2026-07-30/31 기록값은 모두 /responses에서 생성 전송 경로 기록 정정
“bare 셀 측정” user_message=None이 모든 셀을 PROSE 분기에 고정 BARE 결과 철회
“수정 후 160/160” n=160문서 성공은 위 비충실 하니스에서 측정 역사적 회귀 테스트로만 보존

근거는 src-tauri/src/agent/eval_card_language.rs의 “Assembly (corrected 2026-08-10)”, Transport::resolve, runtime_context 주석입니다. 특히 runtime_context=none은 7월 기록을 바이트 단위로 재현하지만, 열린 워크스페이스의 어떤 사용자도 받지 않는 구성이라고 코드가 명시합니다.

6. 유지할 주장과 다시 열 질문

유지합니다. v1.6.2의 기본 모델 변경 이력, 당시 문서 언어 정책이 명시되지 않았다는 설계 결함, 문서 언어와 대화 언어의 분리, deterministic prose/bare 분류기, 조립 경계 테스트는 현재 코드와 이력으로 검증할 수 있습니다. 20/20 대 8/20160/160은 삭제하지 않고, 실패를 보존하는 역사적 하니스 관찰로 남깁니다.

현재 주장하지 않습니다. 기본 모델 교체가 사용자 리포트의 모든 증상을 인과적으로 만들었다는 것, 프롬프트가 원리상 해결할 수 없다는 것, 기존 수치가 프로덕션 실패율 또는 수정 후 성공률이라는 것입니다.

다음 평가는 append_runtime_context를 통과한 전체 시스템 프롬프트, 실제 Anthropic 전송 경로와 스트리밍 조건, 실제 버튼·제안 카드·첨부 진입점, 모든 7개 지원 로케일을 사용해야 합니다. 프롬프트 덤프, 요청 조건, 원시 생성물과 셀별 판정을 함께 보존해야 exact count도 다시 검증할 수 있습니다.

재현성과 증거 경계

증거 현재 확인 가능한 것 경계
docs/details/language-directive-document-language-2026-07-31.md 7월 설계, 집계값, 정책 선택의 당시 근거 원시 생성물과 배치 스크립트가 저장소에 없음
Git 000d86b0, fc294bdd, v1.6.1–v1.6.3 태그 기본값 변경과 이후 선택 저장의 순서 사용자 증상의 전체 인과효과는 증명하지 않음
src-tauri/src/agent.rs, prompts/system/language*.md 현재 정책, 분류기, 조립 테스트 생성 모델의 실제 준수율은 코드 테스트만으로 알 수 없음
src-tauri/src/agent/eval_card_language.rs 누락된 런타임 꼬리, 잘못된 transport, 미측정 BARE 분기 수정된 하니스의 새 프로덕션 충실 결과는 아직 없음
공개 수치 20/20 대 8/20, 160/160 구 하니스의 역사적 집계 production rate로 인용 금지; 8/20은 코드 주석과 불일치

무엇을 측정한 것인가

  • Consilience

    지식그래프를 바탕으로 코딩·디자인·질의를 수행하는 범용 AI 에이전트입니다. 파견 엔지니어 없이 문서에서 온톨로지를 구축하고 관리합니다.

메시지 보내기