보안 리뷰를 돌리다 Claude가 "문제 없음"을 내놨다. 같은 diff를 Codex에도 똑같이 던졌다. Codex는 한 군데를 짚었고, 다시 보니 진짜였다. 그날 이후로 나는 중요한 작업을 한 모델에만 맡기지 않는다. 코딩·추론·리뷰 — 무게가 있는 건 Claude와 Codex 두 모델에 동시에 던지고, 두 결과가 갈리는 지점을 내 검증의 출발점으로 삼는다.

왜 두 번 굴리는가

한 모델이 만들고 그 모델이 자기 결과를 평가하는 건 confirmation bias의 함정이다. 만든 쪽과 검증하는 쪽이 같은 사각지대를 공유하기 때문이다. 그래서 검증 루프에 아예 다른 모델을 상시 한 자리 끼워 넣었다.

다른 모델(Codex)로 동일 작업을 병렬 수행하고 두 결과를 비교하면:

  • 양쪽 모두 같은 결론에 도달하면 신뢰도 ↑
  • 결론이 갈리면 어디서 갈리는지가 그 자체로 디버깅 단서
  • 한쪽만 발견한 엣지 케이스는 거의 확실히 진짜 엣지 케이스

트레이드오프

비용: 토큰 두 배. 시간도 늘어남 (직렬이면 ×2, 병렬이면 max).

가치: 작업 종류에 따라 다르다. 빠른 단순 코드는 경쟁 가치 ↓. 설계 결정·복잡한 리팩토링·보안 리뷰는 경쟁 가치 ↑.

어떻게 운영하는가

기본값은 두 번 굴리는 것이다. 설계 결정, 보안 리뷰, 복잡한 리팩토링처럼 틀렸을 때 비싼 작업은 예외 없이 Claude와 Codex 양쪽에 던진다. 반대로 한 줄 수정이나 뻔한 fetch는 경쟁의 값어치가 없어서 단독으로 끝낸다. 내가 "코덱스 없이"라고 못 박는 건 그 작업을 충분히 신뢰한다는 신호다.

두 결과가 나오면 둘 다 끝까지 읽는다. 일치하는 부분은 그대로 채택하고, 갈리는 부분만 따로 떼어 내가 직접 판단하거나 더 깊이 판다. 시간이 드는 건 언제나 이 마지막 한 조각, 두 모델이 의견을 달리한 지점이다.

단일 모델 수렴을 깨는 도구

경쟁의 또 다른 가치는 단일 모델 mode collapse를 깨는 것이다. 한 모델을 반복 호출하면 그 모델 분포의 중심으로 수렴한다. 다른 모델(Codex)은 다른 분포를 가져서, 한쪽이 빠진 영역을 다른 쪽이 채운다.

그래서 경쟁은 검증 도구이자 다양성 도구다. 같은 작업을 두 모델이 다르게 풀면, 그 차이 자체가 단일 모델로는 안 보였을 선택지 공간을 드러낸다.

함정

  • 두 모델이 같은 학습 데이터 기반이면 같은 편향 공유 가능. 진짜 다른 관점이 아닐 수 있다.
  • 종합 단계에서 "둘 다 비슷하니까 OK"로 빠지면 경쟁의 의미가 사라짐. 일치 자체가 검증은 아님, 일치하는 근거가 검증.
  • 두 결과가 갈릴 때 "더 그럴듯한 쪽"을 고르면 confirmation bias. 갈리는 지점을 더 깊이 파야 검증.

한 줄로

나는 AI를 답을 받는 창구가 아니라 서로 교차 검증시키는 시스템으로 다룬다. 두 모델이 갈리는 지점에 내 판단을 집중하는 것 — 그게 내가 결과를 신뢰하는 방식이다.

관련

/notes/deterministic-loop — 사람 개입 없이 검증되는 루프 /notes/quality-gate-loop — 결과 비교를 평가 rubric으로 /notes/dispatch-routing-pattern — 라우팅도 경쟁으로 /notes/ai-output-mode-collapse — 단일 모델 수렴을 경쟁으로 깬다