## 자기 시험지를 자기가 채점하면
2편 마지막에 이상한 걸 하나 발견했다고 했습니다.
심각한 결함 세 개를 전부 한쪽 AI가 잡았고, 다른 쪽 AI는 같은 라운드에서
"문제 없습니다"라고 판정했습니다.
처음엔 "저쪽이 실력이 떨어지나" 싶었습니다. 그런데 반대 방향 사례가 나오면서 생각이
바뀌었습니다. 잡는 쪽과 놓치는 쪽이 주제에 따라 뒤바뀌었거든요.
결론은 이겁니다.
> 어느 AI가 더 낫다가 아니라, 한 종류의 눈에는 안 보이는 영역이 있다.
사람도 그렇습니다. 자기가 쓴 글의 오타는 안 보입니다. 열 번 읽어도 안 보이다가,
남이 보면 3초 만에 찾습니다. 뇌가 자기가 쓰려고 했던 걸 읽어버리기 때문입니다.
AI도 똑같습니다. 그리고 자기가 만든 걸 자기가 검사하면 이게 더 심해집니다.
그래서 이 프로젝트의 원칙 중 하나가 이겁니다.
> 만든 쪽과 채점하는 쪽은 반드시 다른 자리여야 한다.
---
## 실제로 이런 일이 있었습니다
발표에 쓸 수 있게 세 건을 정리해뒀습니다. 전부 이 프로젝트를 만드는 과정에서
진짜로 일어난 일입니다.
사례 1. 검사기의 채점 기준을 비워두면 그냥 통과되던 구멍.
→ A는 "문제 없음"이라고 했고, B가 직접 뚫어보고 찾아냈습니다.
사례 2. 아무 데나 있는 파일도 정식 문서로 들어가던 구멍.
→ 같은 라운드에서 A는 "문제 없음", B가 실제로 뚫었습니다.
사례 3. (아래에서 자세히) 검사가 아예 실행되지 않았는데 "이상 없음"으로 집계되던 것.
→ 이번엔 반대로, A가 실험 두 번으로 원인을 밝혀냈습니다.
방향이 양쪽이라는 게 핵심입니다. 어느 한쪽 편을 들 수 있는 데이터가 아닙니다.
### 그리고 하나 더 — 사실은 AI 종류가 아니라 방법론이었습니다
1편에서 명령어가 통째로 죽었던 이야기 기억하시나요?
그건 다른 회사 AI가 잡은 게 아니었습니다. **같은 회사 AI였는데, 역할만 다르게 준
검수자**가 잡았습니다. 앞의 두 라운드가 못 잡은 걸요.
그 검수자가 한 일은 하나입니다. 문서에 적힌 명령어를 눈으로 읽지 않고 실행해봤습니다.
> 벤더가 잡은 게 아니라 방법론이 잡았습니다.
> "다른 회사 AI를 쓰자"가 아니라 "만든 자리 밖에서 실제로 돌려보자" 가 진짜 교훈입니다.
---
## 사례 3 자세히 — 검사기가 꺼져 있었습니다
이건 새로운 종류의 실패라 따로 이야기하겠습니다.
### 증상
여러 AI를 조합해서 실험을 돌리는데, 한쪽 AI에게 논문 요약을 시켰더니
요약을 안 하고 "초록을 주세요"라고 답했습니다.
처음 진단은 "모델마다 성향이 다르구나"였습니다. 그럴듯합니다. AI마다 프롬프트를
해석하는 방식이 다르니까요. 저는 이걸 문서에 그렇게 적기까지 했습니다.
### 진짜 원인
다른 AI 검수자가 판별 실험을 두 번 돌려서 밝혀냈습니다.
> **Windows에서 프로 그램을 부르는 중간 다리가, 여러 줄짜리 명령을 첫 줄에서 잘라먹고
> 있었습니다.**
그러니까 요약을 시키는 AI는 프롬프트의 첫 줄만 받았습니다.
첫 줄에는 논문 제목만 있었고요.
"초록을 주세요"는 완벽하게 정상적인 반응이었습니다.
모델 성향 문제가 아니라 배달 사고였습니다.
### 그런데 더 무서운 게 딸려 나왔습니다
같은 사고가 검수하는 쪽에도 일어나고 있었습니다.
검수 AI가 프롬프트를 못 받아서 아무 응답을 안 하면, 집계 프로그램이 그걸
"지적 사항 0건 = 깨끗함" 으로 기록하고 있었습니다.
```
검사가 실행조차 안 됨 → 리포트: "지적 0건" → 읽는 사람: "오, 문제 없네"
```
검사를 안 한 것과, 검사해서 깨끗한 것이 구분되지 않았습니다.
건강검진을 받으러 갔는데 기계가 꺼져 있었고, 결과지에는 "이상 소견 없음"이 찍혀 나온
셈입니다.
고쳤습니다. 검수 결과를 제대로 된 형식으로 실제로 받았을 때만 "검사 완료"로
기록하고, 아니면 "검사 못 함" 이라고 따로 표시하게요.
> 교훈: 0건은 두 가지 뜻입니다.
> "찾아봤는데 없다"와 "안 찾아봤다".
> 이 둘을 구분하지 않는 보고서는 거짓말하는 보고서입니다.
---
## 경험을 실습으로 만들기
"교차 검수가 효과 있더라"는 경험담으로 끝내면, 듣는 사람 은 그냥 고개만 끄덕입니다.
그래서 누구나 자기 손으로 재현하는 실험으로 만들었습니다.
### 어떻게 돌아가나
```
같은 논문 한 편을 놓고, 팀별로:
A팀 : AI-1이 요약 → AI-2가 검수
B팀 : AI-2가 요약 → AI-1이 검수 (역할 바꿔서)
↓
점수는 ★AI가 아니라 프로그램이★ 매김
(2편에서 만든 그 검사기를 그대로 씀)
↓
팀별 비교 리포트
```
핵심은 판정을 AI에게 안 맡긴다는 겁니다.
AI끼리 서로 채점하게 하면, "AI가 AI를 평가할 때의 편향"이 그대로 실험 결과가 됩니다.
그건 실험이 아니라 그냥 인상 비평입니다.
AI는 요약하고 검수하는 역할만 하고, 점수는 2편에서 만든 프로그램이 냅니다.
같은 입력, 같은 채점기, 팀 구성만 다르게 — 그래야 차이가 팀 구성 때문이라고 말할 수 있습니다.
### 돈 나가는 걸 막았습니다
이건 실제 AI를 여러 번 부르는 도구라, 기본이 "미리보기" 입니다.
몇 번 부를 건지 먼저 보여주고 멈춥니다. 진짜 실행하려면 승인을 따로 해야 합니다.
스터디에서 누가 무심코 엔터를 쳐서 요금 폭탄을 맞는 일은 없어야 하니까요.
### 지표 이름을 좁혔습니다
처음엔 지표 이름이 "인용 실재율" 이었습니다. 100%면 인용이 전부 진짜라는 뜻처럼 들립니다.
검수자가 지적했습니다. 실제로 검사하는 건 숫자와 직접 인용문뿐이고,
"이 방법이 더 우수하다" 같은 주장은 검사하 지 않는다고요.
그러니까 진짜 인용 하나 + 나머지 전부 그럴듯한 헛소리 조합이 100%를 받을 수
있었습니다.
이름을 정확하게 바꿨습니다. "Evidence 숫자·직접인용의 실재율"로요. 그리고 검사할 수 있는
성분이 너무 적으면 "이 점수는 믿지 마세요" 경고를 띄우게 했습니다.
> 교훈: 지표 이름이 실제 측정 범위보다 넓으면, 그 이름 자체가 과신을 만듭니다.
> 지표를 개선하는 것보다 이름을 좁히는 게 먼저입니다.
---
## 정리하려다 멈춰서 계획서를 먼저 썼습니다
프로그램이 일곱 개가 되니까 폴더가 어수선해 보였습니다.
기능별로 나눠서 정리하고 싶었습니다.
바로 안 했습니다. 대신 계획서를 썼습니다.
먼저 현황을 실측했더니 이런 게 나왔습니다.
> 프로그램들이 "우리는 같은 폴더에 있다"는 전제로 서로를 불러 쓰고 있었습니다.
> 특히 A그룹의 프로그램 하나가 C그룹 프로그램을 부르고 있었습니다.
기능별로 폴더를 나누면 바로 이 지점이 끊어집니다.
두 가지 안을 비교했습니다.
| | 안 1: 이름표만 붙이기 | 안 2: 진짜로 폴더 나누기 |
|---|---|---|
| 프로그램 손대나 | 안 함 (주석 한 줄만) | 전부 손봐야 함 |
| 고칠 문서 | 없음 | 5개 문서 20여 줄 |
| 위험 | 최저 | 중간 |
| 얻는 것 | 보기 조금 나아짐 | 폴더만 봐도 구조가 보임 |
안 1을 택했습니다. 프로그램은 그대로 두고, 각 파일 맨 위에 "이건 어느 그룹" 이라고
주석 한 줄만 붙였습니다.
그리고 안 2는 버리지 않고 "프로그램이 더 늘어나면 그때 다시 검토"라고 적어뒀습니다.
그때 뭘 먼저 해야 하는지까지 같이요.
실행할 때 지킨 것도 적어둡니다.
- 아무것도 지우지 않았습니다. 쓸모없어진 문서도 삭제 대신 보관 폴더로 옮겼습니다.
- 옮긴 뒤에 자가진단 전부 · 전체 흐름 한 바퀴 · 채점 결과를 다시 돌려서
아무것도 안 깨졌다는 걸 증명했습니다.
- 되돌리려면 파일 두 개만 제자리로 옮기면 되게 커밋을 분리했습니다.
> 교훈: "정리"는 공사입니다.
> 공사 전에 뭐가 깨질 수 있는지 알아보고, 안 깨졌다는 걸 어떻게 증명할지를
> 먼저 정합니다.
---
## 쓰기 편하게 만든 것들
도구가 갖춰지고 나니 다음 병목은 사람이었습니다. 이 부분은 짧게만 적겠습니다.
중간에 끊겨도 이어서 하기. 한 사이클이 여섯 단계인데 중간에 세션이 끊기면 어디까지
했는지 알 수가 없었습니다. 진행 상태를 파일에 기록하게 했습니다.
— 그런데 여기서도 구멍이 나왔습니다. 프로그램이 그 파일에 적힌 걸 그대로 믿고 있었던
겁니다. 파일을 손으로 이상하게 고쳐놔도 그냥 받아들였습니다.
기준은 프로그램 안에 있어야지, 읽어들인 파일이 기준이 되면 안 됩니다.
작업 폴더가 자기소개를 하게. 만들어둔 작업 폴더를 며칠 뒤에 열면 "여기가 어디까지
됐더라"가 됩니다. 폴더를 열었을 때 AI가 진행 상태 파일들을 직접 읽고 지금 상황과
다음에 할 일을 알려주게 했습니다.
여기서 제일 신경 쓴 건 "아직 아무것도 안 했으면 아무것도 안 했다고 말하기" 입니다.
가짜 진행률을 지어내지 않도록요.
4주 커리큘럼. 처음 오신 분이 순서대로 따라올 길을 만들었습니다.
1주차 일단 돌려보기 → 2주차 지식 창고와 검사 기준 → 3주차 튼튼하게 만들기 →
4주차 여러 AI로 교차 검수. 새 개념을 하나도 발명하지 않고, 이미 만들어진 기능에만
연결했습니다.
그대로 붙여넣는 진행 자료. 스터디 진행자가 준비 없이도 세션을 이끌 수 있게,
단계별 프롬프트를 통째로 만들어뒀습니다. 각 단계마다 "이런 화면이 나와야 정상",
"막히면 이걸 물어보세요"까지 적어서요.
---
## 같은 실수를 네 번 했습니다
이 프로젝트에서 제일 배울 게 많은 부분입니다. 좀 부끄러운 이야기이기도 하고요.
### 실수의 내용
문서에 실행되지 않는 명령어를 적는 실수입니다.
- 1회차: Windows에 없는 명령어를 적었습니다
- 2회차: 개발자 환경에서만 풀리는 경로를 사용자 문서에 적었습니다
- 3회차: 프로그램 이름을 그냥 적었는데, 사용자 컴퓨터에서는 그 이름으로 못 부릅니다
3회차에서 규칙을 만들었습니다. 문서 맨 위에 상시 규칙으로 박았습니다.
> 문서에 실행 명령을 쓸 때는 정식 등록된 명령어로만 쓴다.
> 사용자 컴퓨터에 없는 내부 프로그램을 이름으로 부르지 않는다.
> 새 문서를 쓸 때는 임시 폴더에서 실제로 실행되는지 확인할 것.
### 그런데 4회차가 나왔습니다
규칙을 만든 뒤에요.
이번엔 명령어 자체는 규칙을 지켰습니다. 정식 등록된 명령을 썼습니다.
그런데 그 명령이 설명 문장 한가운데 섞여 있었습니다.
붙여넣기용 블록이라 통째로 복사해서 붙이는 건데, 문장 안에 있으니까
컴퓨터가 그걸 명령으로 인식하지 못했습니다.
블록을 둘로 쪼갰습니다. 명령만 담긴 블록 하나, 설명 블록 하나.
> 교훈: 규칙을 만들어도 변종은 계속 나옵니다.
> 규칙은 "내용"에 걸어놨는데 사고는 "형태"에서 났습니다.
> 재발 방지 규칙을 쓸 때는 어느 축에 거는 규칙인지까지 적어야 합니다.
---
## 무너질 뻔한 것 — 비교 실험이 조용히 무효가 되고 있었습니다
1편에서 만든 "AI를 자기도 모르게 실험 대상으로" 장치, 기억하시나요?
첫 마디로 받은 답이 비교 재료가 되는 그 설계요.
검수자가 그 장치를 무너뜨리는 구멍 세 개를 찾았습니다.
### 하나 — 순서가 잘못 안내돼 있었습니다
진행 안내표에 "설치하고 → 튜토리얼 명령을 치세요"라고 적혀 있었습니다.
그런데 그 명령을 치면 AI가 설명서를 읽습니다. **읽는 순간 그 AI는 더 이상 맨몸이
아닙니다.** 첫 마디로 답을 받아두는 단계를 건너뛰도록 안내하고 있던 겁니다.
규칙은 다 맞는데 순서 하나 때문에 장치가 무효였습니다.
### 둘 — 도망갈 구멍이 열려 있었습니다
비교하는 단계의 안내문에 이렇게 적혀 있었습니다.
> "아까 받아둔 맨몸 답 (또는 지금 새로 도구 없이 만든 요약)"
괄호 안이 문제입니다. 이미 논문을 다 읽어서 **오염된 AI가 그 자리에서 "맨몸인 척"
요약을 지어내도 된다**는 뜻이 됩니다.
같은 문서의 다른 곳에서 그 행위를 명시적으로 금지하고 있었는데도요. 자기모순입니다.
괄호를 지우고 이렇게 바꿨습니다. 맨몸 답이 없으면 그 자리에서 멈춘다.
별도 세션에서 답을 먼저 받아온 뒤에 재개한다.
### 셋 — "독립 검증"이 독립이 아니었습니다
검증 항목에 "만든 자리가 아닌 다른 관점에서 다시 확인"이라고 적혀 있었습니다.
같은 AI가 관점만 바꿔서 연기해도 이 조건을 충족합니다.
"만든 사람이 채점하지 않는다"가 문구로만 남고, 실제로는 자기 채점이었습니다.
이렇게 바꿨습니다.
> 만든 자리 밖에서 실제로 한 번 더 실행한다. 그리고 실행 증거를 남긴다
> — 어디서 돌렸는지, 무슨 명령이었는지, 언제였는지, 검증자가 뭐라고 했는지.
> 셋 다 불가능하면 "독립 검증 안 함"