제가 만드는 수학 학습 플랫폼에는 AI가 학생의 시험 결과를 분석해 리포트를 자동으로 써주는 기능이 있어요. 편하긴 한데, 쓰다 보니 불안한 마음이 들더라고요. “이 리포트, 그냥 믿고 학부모한테 보내도 되나?” AI는 그럴듯하게 틀리는 데 선수잖아요. 그래서 저는 AI가 쓴 걸 또 다른 AI가 검수하게 만들어봤습니다. 오늘은 그 ‘critic loop’를 붙이면서 챙긴 세 가지 — 편향, 무해한 도입, 안전장치 이야기를 정리할게요.
critic loop: 생성한 결과물을 곧바로 내보내지 않고, 별도의 ‘검수자(critic)’가 품질을 채점·지적하고 필요하면 다시 만들게 하는 구조.
왜 필요했나 — 그럴듯하게 틀리는 게 문제
리포트는 학생의 약점과 다음 학습 방향을 담아요. 여기서 AI가 사실과 다른 진단을 내리면, 그럴듯한 문장 때문에 오히려 틀린 걸 눈치채기 더 어렵습니다. 채점으로 치면, 답은 틀렸는데 풀이가 깔끔해 보여서 그냥 넘어가는 것과 같아요. 그래서 “생성 다음에 한 번 더 거르는 단계”가 필요했습니다.
기본 아이디어는 단순해요. 리포트를 만든 뒤, 검수자가 그걸 읽고 점수와 지적을 내놓습니다. 품질이 기준에 못 미치면 그 지적을 반영해 다시 쓰게 하고요. 사람 편집자가 초고를 보고 빨간펜을 드는 것과 같은 흐름이에요.
함정 1 — 자기가 만든 걸 자기가 채점하면 후해진다
여기서 제일 조심한 게 self-bias였어요.
self-bias(자기평가 편향): 어떤 모델이 만든 결과를, 같은 계열의 모델이 채점하면 자기 결과에 후한 점수를 주는 경향.
생성도 검수도 같은 모델한테 맡기면, “내가 쓴 거니까 잘 썼지” 하는 편향이 생겨 검수가 물러집니다. 검수의 의미가 없어지는 거죠. 그래서 저는 리포트를 만드는 모델과 다른 계열의 모델을 검수자로 뒀어요. 실제로 검수 결과에 “평가자는 생성 모델과 다른 계열이라 self-bias가 낮다”는 근거를 함께 남기도록 했고요. 서로 다른 눈으로 봐야 진짜 검수가 됩니다.
한 가지 정직하게 덧붙이면, 이걸로 편향이 0이 되는 건 아니에요. 다만 검수를 점수(주관)만이 아니라 정적 근거로 뒷받침하게 하면 모델 편향의 영향이 줄어요. 예를 들어 “타입 검사가 통과했다”, “이 값이 코드에서 이렇게 정의돼 있다” 같은 확인 가능한 사실을 근거로 붙이면, 누가 채점하든 흔들리지 않죠.
함정 2 — 새 기능을 붙이되 기존 걸 안 건드리기
검수 기능은 실험적이라, 붙였다가 기존 리포트 생성이 망가지면 큰일이에요. 그래서 기능 플래그로 감쌌습니다.
기능 플래그(feature flag): 코드에 넣되 스위치로 켜고 끄는 장치. 기본은 꺼두고, 준비되면 켠다.
핵심은 이 플래그를 기본값 OFF로 두고, 검수 로직 전체를 그 스위치 뒤에 두는 거였어요. 플래그가 꺼져 있으면 검수 코드에는 아예 진입조차 안 합니다. 그래서 이 기능을 머지해도 스위치를 켜기 전까지는 기존 동작이 한 글자도 안 바뀌어요. “머지해도 무해하다”가 보장되는 거죠. 새 기능을 안전하게 넣는 가장 든든한 방법이더라고요 — 완성 안 된 걸 꺼진 채로 미리 합쳐두고, 준비되면 스위치만 올리는 것.
이걸 확실히 하려고 테스트도 “플래그가 꺼졌을 때 결과물이 이전과 똑같은가”를 못박아뒀어요. 무해성은 말로만 주장하지 않고 테스트로 증명해야 안심이 됩니다.
함정 3 — 검수자가 터지면 어떡하지
또 하나. 검수자도 결국 AI 호출이라 실패할 수 있어요. 네트워크 문제로 검수가 도중에 터졌다고, 멀쩡히 만들어둔 리포트까지 같이 날아가면 안 되잖아요.
그래서 fail-safe로 설계했습니다.
fail-safe(안전 실패): 부가 기능이 실패해도 본체는 살아남게 하는 설계. 검수가 깨져도 원래 리포트는 그대로 나간다.
검수 단계에서 문제가 생기면, 검수를 포기하고 원래 생성한 리포트를 그대로 내보냅니다. 검수는 어디까지나 ‘있으면 더 좋은’ 단계지, 그게 없다고 리포트 자체가 막히면 안 되니까요. 부가 기능은 항상 “실패해도 본체를 안 죽인다”를 지켜야 오래 켜둘 수 있어요.
그래서 뭘 하면 되나
AI 결과물을 또 다른 AI로 검수하는 구조를 붙일 때, 이 표대로 챙기세요.
| 포인트 | 왜 | 어떻게 |
|---|---|---|
| 검수자는 다른 모델 계열로 | 자기평가 편향(self-bias) | 생성 모델과 다른 계열을 채점자로 |
| 점수보다 확인 가능한 근거 | 주관 흔들림 방지 | 타입검사·코드사실 등 정적 근거 첨부 |
| 기능 플래그로 감싸기 | 머지 무해 보장 | 기본 OFF, OFF면 진입 불가 |
| 무해성은 테스트로 | 말뿐인 안전은 안 됨 | “플래그 OFF면 결과 동일” 테스트 |
| 검수는 fail-safe | 부가 기능이 본체를 죽이면 안 됨 | 검수 실패 시 원본 리포트 폴백 |
한 문장 요약: AI 결과를 AI로 검수할 땐 — 편향을 줄이려 다른 모델 계열로 채점하고, 점수 대신 확인 가능한 근거를 붙이고, 기능 플래그로 무해하게 넣고, 검수가 터져도 본체는 살아남게(fail-safe) 하라.
돌아보면 이 작업의 핵심은 “AI를 얼마나 믿을까”가 아니라 안 믿어도 되게 어떻게 감싸나였어요. AI는 언제든 그럴듯하게 틀릴 수 있다고 보고, 그 위에 검수·플래그·안전장치를 겹겹이 두른 거죠. 특히 학생 데이터처럼 틀리면 안 되는 영역일수록, 똑똑한 AI 하나보다 틀려도 안전한 구조가 훨씬 든든하더라고요.