본문으로 건너뛰기

연구

기법

배포 후 검증: 판정기 원문 변경과 관대한 파서를 되돌린 근거

같은 관계 121쌍에서 판정기 원문만 바꾼 A/B의 불일치 3건은 모두 기존 구현이 모델 오라클과 일치했습니다. 관대한 파서는 직접 호출 60건에서 추가 복구가 0건이었습니다. 두 변경을 되돌리고, 표 관계 면제는 전체 로그 영향 9/3,215를 근거로 보류했습니다.

121쌍·불일치 3건·동일 모델 3회 오라클·부호검정 p=.25
OLD 3 · NEW 0
관대한 파서의 추가 content 복구 · 직접 /responses · 95% 상한 약 5%
0 / 60

질문: 판정자가 읽는 원문과 추출 JSON 파서를 바꾼 커밋은, 실제 대상에서 기존 동작보다 나았는가?

관찰: 영향권 15개 고유 문서의 121개 관계-판정 쌍에서 생긴 불일치 3건은 모두 기존 원문이 모델 오라클과 일치했고, 관대한 파서는 직접 호출 60회에서 내용을 0건 복구했다.

결정: 원문 변경·표 관계 면제·관대한 파싱은 되돌리고, 빈 판정 호출을 건너뛰는 가드만 유지했다.

7,235개 노트에서 원문 A/B와 파서 결과까지 좁혀 가는 검증 흐름

두 측정은 서로 다른 단위를 쓴다. 위쪽은 관계-판정 쌍, 아래쪽은 모델 호출이다.

1. 변경과 영향권을 먼저 분리했다

커밋 7def5456은 한 번에 세 가지를 바꿨다. 관계 판정자가 읽는 텍스트를 표 포함 6,000자 클립에서 표 제거 후 산문 청크로 바꾸고, 결정론적으로 적재한 표 관계를 판정에서 제외했으며, 추출 JSON에 엄격 파싱 뒤 폴백을 추가했다. 첫 두 변경은 결합돼 있었지만 세 번째는 별도 실패 모드이므로 따로 측정했다.

원문 변경은 “마크다운 표가 있고, 표를 제거한 산문이 한 청크인 노트”에서만 결과를 바꿀 수 있다. 세 볼트의 마크다운 노트 7,235개를 전수 열거한 결과는 다음과 같다.

볼트 노트, n 표 보유 노트 게이트 통과 노트
Market 4,306 78 47
news 314 0 0
e2e 2,615 1 1
합계 7,235 79 48 (0.66%)

48개를 본문 내용으로 중복 제거하면 15개 고유 문서다. 구성은 Apple·Netflix·NVIDIA의 SEC 공시와 한국어 스키마 노트 1개다. “15개 전부 기업 공시”는 아니다. 영향 노트 48개 중 36개에는 변경 전 실제 삭제 판정 로그가 있어, 단순 도달 가능성이 아니라 사용 중이던 경로임도 확인했다.

2. 원문 A/B는 한 변수만 움직였지만 모델 실험이다

하니스는 각 문서에서 산문 관계를 한 번 새로 추출한 뒤 그 집합을 두 조건에 고정했다. OLD는 표를 포함한 전처리 본문 앞 6,000자를, NEW는 표를 제거한 단일 산문 청크를 읽었다. 따라서 판정자 입력만 비교한 A/B이지만, 프로덕션 당시 관계를 그대로 재생한 실험은 아니다.

결과 n · 분석 단위 · 조건
비교 완료 관계-판정 쌍 121개 · 15개 고유 문서 · 관계 집합 고정
조건 불일치 관계 3개 · 121쌍 중 2.5%
오라클 일치 OLD 3개 / NEW 0개 · 불일치 3건만 채점
실패 호출 4회 · 판정 수가 입력 수와 달라 제외, 결과를 채워 넣지 않음
부호검정 3–0 · 양측 p=0.25 · 통계적으로 유의하지 않음

오라클은 사람이 아니라 같은 계열의 모델이다. 기본 설정에서는 판정자와 같은 claude-opus-5를 쓰되 판정자는 low, 오라클은 medium effort로 호출한다. 불일치 관계 하나당 최대 세 번 독립 호출하고 다수결로 채점한다. 2–1이면 contested로도 표시하지만 채점에서 제외하지 않는다. 이번 세 관계는 모두 3–0이라 contested가 0건이었고, 이 구현상 한계가 관찰 결과를 바꾸지는 않았다.

1차 기록은 “NEW가 OLD를 이겨야 채택하고, 패배나 동률이면 되돌린다”는 규칙을 실행 전에 문서화했다고 밝힌다. 다만 저장소 이력만으로는 그 문구가 실행 전에 존재했다는 시점을 독립 검증할 수 없다. 따라서 이것은 사전등록으로 부르지 않고, 변경 쪽에 입증 책임을 둔 보수적 채택 규칙으로 다룬다.

3. 불일치 세 건은 같은 인과 메커니즘을 가리켰다

세 관계 모두 OLD=삭제, NEW=유지, 모델 오라클=근거 없음이었다. 최고경영자 교체를 알리는 공시에서 표는 산문을 방해하는 잡음이 아니라 잘못된 관계를 반박하는 증거였다. 표를 제거하자 판정자는 더 완전한 산문을 얻었지만, 임원의 이동과 직책 변경을 명시한 구조화 증거를 잃어 관대해졌다.

이 결과가 말하는 것은 “OLD 판정자가 절대적으로 정확하다”가 아니다. 121쌍 중 두 조건이 같은 118쌍은 오라클로 채점하지 않았다. 관찰된 결론은 더 좁다. 이 영향권과 이 관계 표본에서는, 표를 제거한 원문이 바꾼 세 판정 모두 나쁜 방향이었다. 작은 n과 p=0.25를 감안해 우월성을 주장하지 않고, 이득이 입증되지 않은 변경을 철회했다.

4. 관대한 파서는 관찰된 실패를 고치지 못했다

폴백은 첫 번째 완전한 JSON 값을 읽고 뒤를 무시한다. 완전한 페이로드 뒤 잡토큰은 복구할 수 있지만, {"ok": true}처럼 인식되는 페이로드 필드가 없는 별도 객체가 먼저 오면 기본값만 가진 빈 추출 결과로 성공할 수 있다. “어떤 선행 객체든 항상 빈 결과가 된다”는 뜻은 아니다.

Market 볼트를 결정론적 간격으로 훑어 claude-sonnet-5, low effort, /responses 직접 호출로 얻은 사용 가능 응답 60회를 두 파서에 넣었다.

파서 결과 호출, n=60 해석
엄격 파싱 성공 58 폴백을 사용하지 않음
엄격 실패 → 내용 복구 0 변경의 관찰된 이득 없음
엄격 실패 → 빈 결과 복구 0 잠재 위험은 관찰되지 않음
두 파서 모두 실패 2 JSON 없는 산문 응답, 폴백으로 복구 불가

0/60의 95% 상한은 근사적으로 5%다. 이는 프로덕션에서 복구가 절대 없다는 증명이 아니다. 하니스는 인증 프록시가 아니라 API 엔드포인트를 직접 호출해 뒤따르는 토큰의 분포도 다를 수 있다. 관찰된 이득 0건과 조용한 빈 결과 위험을 함께 보고 엄격 파싱으로 돌아갔다.

5. 측정 중 발견한 표 관계 결함은 기록하고 보류했다

실제 삭제 로그 42건을 같은 모델 오라클로 다시 본 뒤, 객체 문자열이 해당 노트의 표 영역에 있는지 결정론적으로 분류했다. 이 오염 제거 분석에서 표 유래 삭제는 8/8이 잘못됐고, 산문 유래 삭제는 8건이 잘못되고 26건이 맞았다. 그러나 전체 로그에서의 노출은 작았다.

로그 범위 전체 삭제 관계 표 유래 삭제 영향 노트
Market 3,215 9 (0.3%) 2
e2e 1,781 0 0

발생했을 때의 오류 8/8과 전체 노출 9/3,215는 서로 다른 분모다. 표 관계를 전부 면제하면 드문 오류를 줄이는 대신 스키마 오분류를 검사할 유일한 단계와 희소 관계 게이트를 흔든다. 그래서 프로덕션 변경은 보류했다. 이 분류기는 당시 분석에 사용된 문자열 규칙이지, 현재 하니스에 영구 산출물로 남은 완전한 재현 파이프라인은 아니다. 단일 청크 게이트의 범위를 넓히면 0.3%를 재사용하지 말고 다시 측정해야 한다.

6. 결정과 현재 코드 상태

원문과 표 면제는 fd8c3513, 관대한 파서는 80fd3698에서 되돌렸고 두 결정은 c516e29f에 합쳐졌다. 현재 구현은 판정자에게 표 포함 전처리 본문의 앞 6,000자를 주며, 사용자 keep 판정만 면제하고 일반 표 관계는 자동 면제하지 않는다. 판정 대상이 비면 유료 호출을 생략하는 가드는 유지했다. 추출 페이로드는 다시 엄격한 serde_json::from_str로 파싱한다.

이 결정은 “새 방식이 항상 더 나쁘다”는 판결이 아니라, 제한된 영향권에서 이득을 관찰하지 못했고 해로운 메커니즘을 확인했을 때 변경을 되돌린 사례다. 남긴 것은 빈 호출 가드, 파서 위험을 고정한 단위 테스트, 다시 측정할 수 있는 하니스와 재개 조건이다.

7. 재현성과 증거 경계

증거 관찰·조건 경계 원본
영향권 전수조사 7,235개 노트 중 48개, 내용 중복 제거 후 15개 문서 세 로컬 볼트의 2026-07-26 상태 docs/details/verify-judge-source-2026-07-26.md:26-43
원문 A/B 121개 관계-판정 쌍, 불일치 3개, OLD 3 / NEW 0 관계를 실험 중 새로 한 번 추출; 모델 오라클; 양측 p=0.25 src-tauri/src/tagging/eval_extraction_quality.rs:5377-5647
오라클 집계 관계당 최대 3호출, 다수결; 2–1도 채점하며 별도 표시 사람 정답이 아니며 이번 contested는 0건 src-tauri/src/tagging/eval_extraction_quality.rs:5550-5582,5624-5644
파서 실측 직접 API 호출 60회: 엄격 성공 58, 내용 복구 0, 빈 복구 0, 양쪽 실패 2 프로덕션 인증 프록시가 아님; 0/60의 95% 상한 약 5% src-tauri/src/tagging/eval_extraction_quality.rs:5765-5848
현재 구현 표 포함 클립, 빈 판정 가드, 엄격 JSON 파싱 현재 체크아웃 기준; 향후 커밋에서 변할 수 있음 src-tauri/src/tagging.rs:1771-1824,4447-4472
표 결함 재분석 오라클 채점 표 유래 8/8 오삭제; 전체 Market 로그 9/3,215 일회성 문자열 분류, 두 영향 노트, 타 코퍼스 일반화 불가 docs/details/verify-judge-source-2026-07-26.md:148-184

무엇을 측정한 것인가

  • Consilience

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

메시지 보내기