← BLOG✎ 편집

AI는 자기 글자 수도 못 셉니다, 자기검증을 외부검증으로 바꿔야 하는 이유

글 한 편을 써 달라고 했습니다. 분량은 2,000자. 모델은 깔끔하게 써 내려가고는 "3,020자 정도 됩니다"라고 보고했습니다. 그 글을 그대로 글자 수 세는 도구에 넣어 봤습니다. 1,655자. 모델은 자기가 방금 쓴 글의 길이를 거의 두 배로 잘못 본 겁니다.

3,020 → 1,655모델이 추정한 글자 수와 외부 도구로 실측한 글자 수 (같은 글, 같은 순간)

오타나 일회성 실수가 아닙니다. 같은 작업을 여러 번 돌려 보면 방향이 한결같습니다. 모델은 거의 늘 자기 결과물을 실제보다 길다고 봅니다. 짧게 쓰라고 하면 충분히 줄였다고 우기고, 길게 쓰라고 하면 이미 채웠다고 답합니다. 정작 자를 대 보면 어긋나 있습니다.

AI에게 글이나 코드를 맡겨 보신 분이라면 한 번쯤 겪으셨을 겁니다. "요청대로 다 반영했습니다"라는 말을 믿고 넘어갔다가, 나중에 빠진 항목을 발견하는 일 말입니다. 글자 수는 그 문제의 가장 단순하고 측정하기 쉬운 형태일 뿐입니다. 셀 수 있는 것조차 못 센다면, 더 흐릿한 판단은 어떻겠습니까.

왜 자기평가는 실패하나

핵심은 단순합니다. 글을 쓴 모델과 그 글을 채점하는 모델이 같다는 데 있습니다. 출제자가 답안을 쓰고 같은 출제자가 채점하면, 자기 답을 후하게 봅니다. 사람도 그렇고 모델은 더 그렇습니다.

게다가 LLM은 글자를 세도록 만들어진 물건이 아닙니다. 텍스트를 토큰이라는 덩어리로 끊어 처리합니다. 한글 한 글자가 토큰 하나일 때도, 두세 개로 쪼개질 때도 있습니다. 그러니 "몇 자인가"라는 질문에 모델은 실제로 세는 대신, 그동안 본 글들의 길이 감각을 끌어와 어림합니다. 어림은 늘 어긋날 여지를 안고 있습니다.

모델의 자기평가
  • 글을 쓴 주체가 스스로 채점
  • 토큰 감각으로 길이를 어림함
  • 거의 늘 한 방향으로 치우침
외부 도구 측정
  • 글과 무관한 함수가 글자를 셈
  • wc -m 한 줄이면 정확한 값
  • 편향 없이 같은 입력에 같은 값

문제의 결은 분명합니다. 모델은 판단은 잘하지만 측정은 못합니다. 글이 늘어지는지, 논지가 흐려지는지 같은 판단은 외려 잘 짚어 줍니다. 하지만 "이 글이 정확히 1,655자인가"는 판단이 아니라 측정입니다. 측정은 세는 일이고, 세는 일은 모델이 가장 약한 자리입니다.

이 둘을 섞으면 사고가 납니다. 측정해야 할 질문을 모델의 판단에 맡기면, 모델은 그럴듯한 숫자를 지어내 답합니다. 거짓말을 하려는 게 아니라 세는 능력이 없어 어림으로 메우는 겁니다. 그럴듯해서 더 위험합니다. 틀린 답이 자신만만한 말투로 돌아오니까요.

외부검증 루프의 설계 원칙

해결책은 모델을 더 다그치는 게 아니었습니다. 똑똑한 모델로 바꿔도 자기 글자 수는 여전히 못 셉니다. 구조를 바꿔야 했습니다. 측정은 도구에 맡기고, 모델에는 판단만 남기는 구조입니다.

실제로 돌리는 루프는 이렇습니다. 모델이 초안을 씁니다. 그다음 wc -m 같은 외부 함수가 글자 수를 잽니다. 그 값이 목표의 ±20% 안에 들면 통과시킵니다. 벗어나면 실측한 숫자를 모델에게 도로 건네주고 다시 쓰게 합니다. 통과할 때까지 이 고리를 돕니다.

  1. 01초안 작성
  2. 02외부 도구로 실측
  3. 03목표 ±20% 판정
  4. 04벗어나면 재작성

여기서 사람이 잡아야 할 자리는 가운데 판정 단계입니다. 무엇을 기준으로 통과·실패를 가를지는 사람이 정합니다. 세는 일은 함수가 하고, 다시 쓰는 일은 모델이 합니다. 셋의 역할이 겹치지 않습니다.

한 가지가 결정적입니다. 모델에게 다시 쓰라고 할 때 "너무 길다"는 말로는 부족합니다. 실측한 숫자를 함께 줘야 합니다. "3,020자라고 했지만 실제로는 1,655자입니다. 목표는 2,000자입니다." 이렇게 자기 어림이 틀렸다는 사실을 외부 숫자로 들이밀어야 합니다. 그래야 다음 시도가 감이 아닌 사실 위에서 출발합니다. 이 한 번의 되먹임이 빠지면 루프는 같은 착각을 무한히 반복할 뿐입니다.

당신의 AI 워크플로우에 옮긴다면

이 이야기는 글자 수만의 문제가 아닙니다. 모델에게 무언가를 자기 점검시키는 모든 자리에 같은 함정이 있습니다. "이 코드에 버그 없지?" "이 요약 빠진 내용 없지?" "이 번역 다 맞지?" 모델은 대개 괜찮다고 답합니다. 자기가 만든 결과물이니까요.

세무 사무소에서 AI에 장부를 정리시키는 장면을 떠올려 보세요. "검산 끝났습니다, 합계 맞습니다"라는 모델의 말을 그대로 믿으면 위험합니다. 합계가 맞는지는 모델의 자기보고로 알 수 없습니다. 별도의 계산 함수가 다시 더해 봐야 압니다. 측정 가능한 것은 측정하게 만들어야 합니다.

"이거 맞아?" 라고 모델에게 묻는다
맞는지 재 줄 함수를 따로 둔다
모델의 자기보고를 그대로 신뢰한다
외부 측정값을 모델에 도로 건넨다
통과 여부를 모델이 판단하게 둔다
통과 기준은 사람이 코드로 박는다

원칙은 한 줄로 줄어듭니다. 검증의 무게중심을 모델 안에서 모델 밖으로 옮기는 겁니다. 자기검증은 빼고 외부검증을 넣습니다. 측정할 수 있는 것은 도구가 재게 하고, 모델에게는 그 결과를 받아 다음을 판단하는 일만 맡깁니다.

AI에게 일을 맡길수록 정작 우리가 설계해야 할 것은 똑똑한 프롬프트가 아닙니다. 결과를 되받아 재는 고리입니다. 모델이 "다 됐습니다"라고 말할 때, 그 말을 믿지 않고 한 번 더 재 보는 자리를 만들어 두세요. 그 한 줄의 측정이 자기보고 백 마디보다 멀리 갑니다.

개념 출처
  • LLM 토크나이저
  • 자기일관성·자기평가 편향
  • wc (word count) 유닉스 도구
이 글 공유