11.7.2 주요 실패 유형 2: 숫자 및 단위 변환 오류 (예: '천만 원' -> 10,000,000)

11.7.2 주요 실패 유형 2: 숫자 및 단위 변환 오류 (예: ‘천만 원’ -> 10,000,000)

이원화 검증 시스템을 도입한 MLOps 엔지니어가 대시보드에서 두 번째로 마주하게 되는 압도적인 물량의 붉은색 AssertionError는, 한국어와 같은 고도의 교착어 특유의 다형성 있는 숫자 단위 변환 과정에서 발생하는 **산술적 환각(Arithmetic Hallucination)과 단위 소실(Unit Truncation)**이다.

이 악질적인 오류는 LLM이 사용자의 말을 파라미터 JSON으로 추출하여 오라클에 넘기는 입력 단계(Input)와, 오라클의 결괏값을 받아 고객에게 자연어 응답으로 출력하는 렌더링 단계(Output) 양쪽의 경계면에서 매우 고질적이고 치명적으로 발생한다.

1. 자연어 숫자의 역방향 JSON 파싱 실패 (Input Error)

고객이 챗봇에게 “이번에 뽑은 차 중고가가 대충 이천오백 정도 되는데, 대물 배상 한도를 가액의 2배로 빵빵하게 맞춰서 견적 줘“라고 다소 건방지고 모호하게 입력했다고 가정해 보자. 백엔드의 보험 룰 엔진 오라클(BRE API) 시스템은 자동차 가액(Vehicle Price)을 순수 Integer 형식인 25000000으로, 그리고 대물 한도를 50000000으로 엄격하게 요구한다.

이 지점에서 컨텍스트 유지가 미흡한 방어적 LLM은 “이천오백“이라는 피상적인 텍스트 토큰(Token)의 표면에만 매몰되어, 자동차의 가액을 2500원이라는 비상식적인 Integer 숫자로 변환하여 JSON 구조체에 우겨넣는 대참사를 빚는다. 결과적으로 오라클 API는 이 오염된 스키마를 받아서 단돈 2,500원짜리 다이캐스트 장난감 자동차에 대한 보험료를 진지하게 계산하여 {"final_premium": 15원}이라는 황당하기 그지없는 런타임 결과값을 반환한다.

이러한 형태의 실패는 모델이 비즈니스 도메인의 상식적인 하한선(Lower Bound Guardrail)을 완전히 망각하고, 문맥이 거세된 채 순수 텍스트-대-텍스트 매핑(Text-to-text Mapping) 엔진으로만 고립되어 작동할 때 필연적으로 발생한다.

2. 오라클 반환값의 텍스트 렌더링 병합 및 절삭 실패 (Output Error)

반대로 파싱은 완벽하게 이루어졌고 오라클이 정확한 숫자를 텐서로 뱉어주었음에도, LLM이 이를 고객에게 부드럽게 포장해서 읽어주려다 자폭하는 출력단 에러도 매우 흔하다.

  • 오라클 결과: {"liability_max_limit": 20000000} (수학적 진리: 이천만 원)
  • LLM 출력 환각 A (절삭): “고객님의 대물 배상 한도는 200만 원으로 안전하게 설정되었습니다.” (0 토큰 1개가 누락된 치명적 계약 위반)
  • LLM 출력 환각 B (병합오류): “대물 배상 한도는 이억만 원으로 세팅해 드렸습니다.” (“이천“과 “일억” 사이에서 모델의 확률적 갈등이 빚어낸 괴물 텍스트)

소프트웨어 시스템에서 소수점 에러(Floating-point Error)만큼이나 무서운 것이, 생성형 생태계에서만 발생하는 이러한 언어 모형 단위의 ’토큰 절삭(Truncation)’이나 ‘의미론적 병합(Semantic Merging)’ 현상이다.

3. 원인 진단 및 근본적 해법: 전/후처리 파서의 강화 및 페르소나 제약

이러한 화폐 단위 실패 곡선의 기울기를 Prompt Engineering 하나만으로 통제하려고 시도하는 것은 엔지니어의 만용이다. 가장 효과적이고 실질적인 피드백 루프(Feedback Loop)의 행동 양식은, 언어 모델의 추론 구간 앞뒤로 **강력한 수치형 전처리/후처리 정규화 파서(Numerical Normalization Parser)**를 Python 물리적 코드(Hard Code)로 덧대는 것이다.

이와 동시에, 시스템 프롬프트(System Prompt)에 다음과 같은 극단적인 도메인 제약(Domain Constraint)을 강력하게 지시하여 모델의 상식을 강제 튜닝(Tuning)해야 한다.

[Domain Constraints]: “자동차 가액(vehicle_price) 파라미터는 대한민국 원화(KRW) 기준 절대 최소 1,000,000 단위에서 시작한다. 사용자가 ‘천오백’, ’이천오백’이라고 축약하여 입력한다면 이는 절대 1,500원이나 2,500원이 아니라 15,000,000원과 25,000,000원을 뜻한다. 반드시 보유한 상식(Common Sense)을 동원하여 누락된 ’만 단위의 0’을 문맥적으로 복원하여 JSON을 조립하라.”

실패 사례 로그를 하나씩 분석하며 디버깅하다 보면, 우리는 결국 인공지능에게 밥 먹는 법부터 숨 쉬는 법까지 아주 구체적이고 치졸할 정도로 세세한 제약(Rule)을 시스템적으로 주입해야만, 이 거대한 확률 기계가 비로소 엔터프라이즈 비즈니스 인간의 흉내를 낼 수 있다는 서늘한 시스템 공학의 진실을 마주하게 된다.