13.6.3 “모름(Unknown)” 및 “없음(N/A)“의 명시적 구분 요청
일반적인 인간 작업자는 종이 영수증을 육안으로 읽어내려가다가 커피 얼룩 번짐이나 용지 찢어짐으로 인해 숫자를 도저히 판독할 수 없으면, 솔직하게 백지에 “잘 안 보이는데요“라고 당당히 말할 수 있는 이성적 판단력을 지니고 있다.
하지만 본질적으로 그저 ’통계적으로 가장 확률이 높은 다음 단어(Next Token)’를 계산하여 무한히 뱉어내도록 훈련된 오토레그레시브(Auto-regressive) 앵무새인 거대 언어 모델(LLM)은, 태생적으로 ‘대답하지 않는 것(Silence)’ 그 자체를 지독하게 두려워하는 공학적 강박증을 안고 태어난다.
만약 B2B 영수증의 Tax Amount(세액) 필드가 스캔 노이즈에 완전히 가려져 검게 타버렸거나, 애초에 세금 항목 자체가 면세되어 기재조차 되지 않은 백지 영수증일 경우, LLM은 그 빈칸을 내버려 두지 못한다. 자신의 추론 엔진을 쥐어짜 내어 주변의 숫자 문맥을 그럴싸하게 조합해 낸 뒤, 이 세상에 존재하지도 않는 가상의 $10.00 이라는 유령 세금(Phantom Tax) 토큰을 무지성으로 창조하여 빈칸을 기어코 채워 넣고야 만다. 이른바 **능동적 환각(Active Hallucination)**의 가장 대표적이고 파괴적인 패턴이다.
이러한 지독한 능동적 환각을 통제하고 억제하기 위해 개발된 가장 효과적인 방어적 프롬프트 엔지니어링 메커니즘은, 바로 프롬프트 상단에 모델이 도망갈 수 있는 넓은 비상구, 즉 **‘정직한 포기(Honest Surrender)의 도망갈 구멍(Escape Hatch)’**을 명시적으로, 그리고 대대적으로 뚫어주는 것이다.
1. 도망갈 구멍(Escape Hatch)의 설계와 긍정적 보상(Reward) 체계
시스템 프롬프트의 제약 사항 란에 단순히 “절대 값을 네 맘대로 추론하지 마라“와 같은 차가운 네거티브(Negative) 제약만 걸어두는 것보다 훨씬 더 진보되고 우아한 형태의 메타 프롬프팅(Meta-Prompting)이 있다.
그것은 바로 모델의 AI 페르소나에게 “이미지에서 값을 도저히 확신할 수 없거나, 양식상 해당 항목이 물리적으로 존재하지 않는다면, 결코 스트레스받으며 상상력을 동원하지 말고 떳떳하고 당당하게 프로그래밍 언어의 null을 뱉어라“라고 **심리적인 면죄부와 긍정적 보상(Reward)**을 문서로 확실히 약속해 주는 것이다.
[SYSTEM PROMPT]
당신에게는 모든 필드를 무조건 다 채워내야 하는 완벽주의의 의무가 결코 없습니다.
오히려, 잘 모르는 것을 아는 척하며 가상의 숫자를 그럴싸하게 지어내는 행위(환각)야말로 우리 오라클 시스템에서 가장 엄벌에 처해지는 중대한 범죄입니다.
[명시적 널(Null) 라우팅 규칙 및 도망갈 구멍]
1. 명백한 값의 부재 (Not Applicable, N/A 도는 None):
- 문서의 레이아웃 양식 자체에 해당 필드(예: Shipping Cost 배송비)를 기재하는 공간이 아예 존재하지 않는다면,
억지로 `0`이나 `0.00`이라는 허위 수치를 창조해 채워 넣으려 시도하지 말고 반드시 `null` 객체를 반환해라.
2. 시각적 판독 불능 (Unknown / OCR Noise):
- 텍스트 픽셀이 찢어지거나 문서가 오염되어, 스스로의 시각적 추론에 90% 이상의 통계적 확신(Confidence)이 들지 않는다면,
글자 맥락을 통해 "대충 이 값이겠지"라고 건방지게 추론(Guess) 하지 말고 즉시 그 필드에 `null`을 반환해라.
우리 MLOps 파이프라인은 정직하게 텅 빈 `null`을 뱉는 당신을 절대 처벌하거나 질책하지 않으며, 오히려 그 정직한 `null` 데이터는 시스템 뒷단의 수동 심사(Human-in-the-Loop) 전문가 큐로 안전하게 이관되어 극진하게 환영받을 것이다.
2. Nullable의 철학과 Pydantic 스키마의 완벽한 조응(Alignment)
이러한 ‘명시적 포기 유도’ 프롬프트는 13.3.5절에서 우리가 앞서 뼈를 깎아 설계해 두었던 파이썬 Pydantic 스키마의 Nullable 옵션(예: Optional[float] = None, default=None) 아키텍처와 완벽하게 톱니바퀴처럼 맞물려 돌아가며 거대한 시너지를 폭발시킨다.
LLM이 프롬프트의 지시에 순응하여 정직하게 {"shipping_cost": null} JSON을 반환하면, 1단계 Pydantic 오라클은 이를 Type Error로 튕겨내거나 파이프라인을 크래시 시키지 않고 정상 스키마로 따뜻하게 품어준다. 그리고 이 트랜잭션 텐서는 파이프라인의 **‘결측치 전문 처리 큐(Imputation & HITL Queue)’**로 매우 부드럽고 스무스하게 라우팅 될 수 있다.
반면, 만약 프롬프트에 이러한 ’정직한 포기 지시(Honest Surrender Option)’의 심리적 트릭을 주입하지 않으면 어떻게 될까?
LLM은 내부의 원시적인 파라미터 강박 관념에 사로잡혀 무조건 Float 타입의 허위 숫자(예: $0.00)를 지어내어 강제로 반환할 것이다. 그리고 이 끔찍하게 조작된 유령 데이터는 1단계 구문 오라클(Type 유효성)을 완벽하게 속이고 무사통과할 것이며, 스노우볼처럼 불어나 결국 기업의 거대 데이터베이스를 아무도 모르게 내부에서부터 썩어 들어가게 오염시킬 것이다.
따라서 프롬프트 앞단에서의 “모름“에 대한 명시적 허용과 유도 전략은, LLM의 능동적 환각을 회피하면서도 파이프라인 후방의 오라클 시스템과 타협점(Trade-off)을 찾는 가장 아름답고 인간적인 우회 해킹 통제망(Psychological Trick)이다.