AI 자기검증 편향과 독립 감사관 — 검증을 코드에서 분리하기
TL;DR
- 증상: AI 에이전트가 작업 후 “완료했습니다”라고 단정 → 실제로는 미완·오류. 같은 패턴 3회 반복
- 원인: 자기가 한 일을 자기가 검증하면 편향이 낀다. “검증 후 선언하라”는 텍스트 규칙으로는 이 편향이 안 잡힘
- 해결: 검증을 에이전트 본인에게서 떼어내 (1) 응답 직후 단정 표현을 잡는 자동 가드 (2) 독립된 에이전트의 교차검증으로 분리
- 효과: “완료” 단정 후 사람이 매번 잡아주던 루프가 구조적으로 차단됨
- 한계: 완전 자동화는 아직 못 한다. 최종 검증에 사람이 한 노드로 남아야 하는 영역이 있음
“완료했습니다”가 완료가 아니었습니다
저는 백엔드 개발자로 9년 넘게 일하면서 Jarvis라는 AI 집사를 만들어 코드 작업까지 맡깁니다. 기능을 고치게 하고 “다 됐어?”라고 물으면 답은 늘 한결같았습니다. “네, 완료했습니다.”
그런데 직접 확인해보면 자주 안 돼 있었습니다. 단위 테스트는 통과했는데 실제 동작은 깨져 있거나, 일부만 고치고 전체를 고쳤다고 하거나. 한두 번이면 그러려니 했을 텐데, 똑같은 패턴이 세 번 반복됐습니다. 매번 제가 “이거 진짜 됐어?”라고 되물어야 진짜 상태가 드러났습니다.
처음엔 규칙을 더 강하게 박으면 될 줄 알았습니다. 작업 지침에 “검증하기 전엔 완료라고 말하지 마라”를 큼지막하게 적었습니다. 그래도 또 “완료했습니다”가 나왔습니다. 글로 적은 규칙이 행동을 못 바꿨습니다.
AI한테 “정직하게 검증해”라고 적어두는 건, 시험 보는 학생한테 “커닝하지 마”라고 칠판에 써두는 것과 비슷합니다. 글씨가 행동을 막아주진 않더라고요.
자기 검증은 구조적으로 편향됩니다
왜 규칙이 안 통했을까. 한 발 물러나서 보니, 문제는 에이전트의 성실성이 아니라 구조였습니다.
작업을 한 주체와 그 작업을 검증하는 주체가 같 으면, 검증은 필연적으로 편향됩니다. 자기가 짠 코드를 자기가 보면 “이 정도면 됐지” 하는 확증 편향이 낍니다. 사람도 똑같습니다. 코드 리뷰를 남한테 맡기고 QA를 개발자와 따로 두는 게 다 그래서입니다.
그런데 AI 에이전트한테는 이걸 안 해주고 있었습니다. 작업도 시키고 “스스로 검증도 해”라고 한 것입니다. 이건 한 사람한테 코딩과 자기 코드 리뷰를 동시에 시키는 것과 같습니다. 텍스트로 “엄격하게 보라”고 백 번 적어도, 같은 머리가 같은 작업을 보는 한 편향은 안 사라집니다.
결국 자기가 자기를 검증하게 두는 한 이 편향은 안 빠진다는 걸 받아들였습니다. 그러면 검증을 에이전트 밖으로 빼는 수밖에 없습니다.
검증을 두 겹으로 떼어냈습니다
검증을 본인에게서 분리하는 장치를 두 개 만들었습니다.
하나, 응답 직후 단정 표현을 잡는 자동 가드.
에이전트가 “완료했습니다”, “다 끝났습니다”, “입증됐습니다” 같은 단정을 내뱉으면, 응답 직후 이 표현들을 자 동으로 걸러내는 검사기를 붙였습니다. 단정이 잡히면 다음 차례에 “정말 검증했는가? 증거는?”이라는 경고가 강제로 끼어듭니다. 에이전트의 선의에 기대지 않고, 단정이라는 행동 자체를 기계가 감지하게 한 겁니다.
실제로 이 흐름이 어떻게 작동하는지 구체적으로 보면 이렇습니다.
에이전트: "수정 완료했습니다."
↓ (응답 직후 자동 검사)
가드: 단정 표현 감지 → 다음 턴에 경고 주입
↓
다음 턴: "완료라고 했는데 — 실제로 실행해서 확인한 출력은? 없으면 '미검증'으로 표기."둘, 독립된 에이전트의 교차검증.
중요한 작업은 그걸 한 에이전트 말고 다른 에이전트한테 “이거 진짜 맞는지 반박해봐”라고 시킵니다. 작업자와 검증자를 물리적으로 분리한 것입니다. 흥미롭게도, 이렇게 독립 검증을 붙였더니 작업자가 “1순위”라고 자신 있게 내놓은 결론이 검증자한테서 뒤집히는 일이 실제로 나왔습니다. 자기 검증이었으면 절대 안 잡혔을 편향이 드러난 것입니다.
시스템 점검 체크리스트
AI 에이전트(또는 자동화)에 작업을 맡기고 있다면 점검해보세요.
- 작업한 주체와 검증하는 주체가 같진 않은가?
- “검증 후 보고하라”를 텍스트 규칙으로만 걸어두고 있진 않은가? (행동을 강제하는 가드가 있는가)
- “완료” 선언에 객관적 증거(실행 출력·테스트 로그)를 함께 요구하는가?
- 중요한 결정을 독립된 검증자가 교차 확인하는 경로가 있는가?
- 검증 실패 시 다음 단계로 못 넘어가게 막는 관문이 있는가?
한계: 체크리스트도 결국 사람이 통과시켜야 한다
자동 가드와 교차검증으로 오탐은 크게 줄었지만, 이 구조로도 못 막는 영역이 있습니다. “이 결과가 맞는가”라는 판단 자체가 필요한 곳 — 도메인 지식이 개입하거나 맥락을 따져야 하는 최종 결정 — 에서는 사람이 여전히 한 노드로 남아야 합니다. 체크리스트를 설계한 것도 사람이고, 마지막 관문을 열고 닫는 것도 결국 사람입니다.
마무리
솔직히 좀 번거롭습니다. 에이전트 하나면 될 일을 둘로 굴리니까 토큰도 더 들고, 파이프라인도 복잡해집니다. “더 믿을 만한 에이전트를 만들자”는 포기하고 “안 믿어도 되게 만들자”로 방향을 틀었더니 이 꼴이 났습니다.
그래도 매번 제가 “이거 진짜 됐어?”를 손으로 되묻던 루프를 생각하면 이게 낫습니다. AI가 더 똑똑해지면 알아서 검증하겠지라고 한참을 기대했는데, 어차피 사람 쓰는 회사도 리뷰어를 따로 두잖아요. 혼자 만드는 프로젝트라고 그걸 건너뛸 이유는 없었던 것입니다.
