11.7.1 주요 실패 유형 1: 복합 문장(Multi-intent) 처리 실패 및 오라클 호출 누락

11.7.1 주요 실패 유형 1: 복합 문장(Multi-intent) 처리 실패 및 오라클 호출 누락

AI 챗봇 테스트 자동화 파이프라인에서 가장 높은 빈도로 쏟아지는 첫 번째 치명적인 실패(Failure) 유형은 바로 ‘복합 문장(Multi-intent)’ 처리 시의 어텐션(Attention) 붕괴와 그로 인한 핵심 레거시 도구 호출(Tool Invocation)의 완전한 누락이다.

인간의 실생활 대화는 결코 API 명세서처럼 단일 목적 함수로 깔끔하게 떨어지지 않으며, 여러 가지 감정과 요구사항이 한 문장 안에 맥락 없이 뒤섞여 파도처럼 밀려오는 것이 특징이다.

1. 최근성 편향(Recency Bias)에 의한 오라클 호출 누락(Omission) 현상

다음과 같이 악의적이면서도 지극히 현실적인 고객의 콤보 블로우(Combo-blow) 발화를 시스템에 주입했다고 가정해 보자.

[고객 발화]: “다음 달에 테슬라 새 차 뽑을 건데 나이 30살 기준으로 젤 싼 다이렉트 자동차 보험료 견적이나 한번 뽑아줘봐. 아 맞다, 그리고 어제 가입한 내 기존 암보험 계약서 좀 지금 당장 이메일로 쏴주고. 빨리.”

이 복합 문장 안에는 엔터프라이즈 시스템 관점에서 물리적으로 분리된 두 개의 독립적인 도구(Tool/Function)가 동시다발적으로 요구된다.

  1. 오라클 1: 자동차 보험 견적 도구 (calculate_car_insurance_premium)
  2. 오라클 2: 기존 계약서 발송 도구 (send_email_contract_document)

하지만 훈련이나 프롬프트 튜닝이 부족한 LLM 모델은, 인간의 기억력 한계와 유사하게 문장의 가장 마지막에 위치한 지시어(“당장 이메일로 쏴주고 빨리”)에만 어텐션 가중치(Attention Weight)가 기형적으로 크게 쏠리는 현상, 이른바 **최근성 편향(Recency Bias)**을 심하게 겪게 된다.

결과적으로 LLM은 앞단의 ’자동차 보험 시스템’이라는 무거운 오라클은 아예 호출할 시도조차 하지 않은 채, 가파른 판단으로 “네 고객님, 말씀하신 암보험 내역서를 이메일로 즉시 발송해 드렸습니다. 추가로 필요하신 사항이 있으실까요?“라고 단답형으로 빠르게 대화를 종료해 버리는 끔찍한 판단 미스를 저지른다. 디핑 검증기(Comparator)는 응답 내에 자동차 보험료 숫자가 아예 존재하지 않는 것을 감지하고 즉시 붉은색 AssertionError를 격발한다.

2. 병렬 도구 호출(Parallel Tool Calling)의 파라미터 오염(Bleeding)

이 문제를 고치기 위해 프롬프트를 수정하여 LLM이 똑똑하게 두 개의 도구를 동시에 호출(Parallel Tool Calling)하도록 유도할 때도 다른 측면의 치명적인 에러가 발생한다.

자신의 인지 부하(Cognitive Load)를 넘어서는 병렬 작업을 수행하던 LLM이, 암보험 발송에 필요한 contract_type: "CANCER" 파라미터를 자동차 보험 견적 도구의 인자로 잘못 섞어서 밀어 넣는(Parameter Bleeding) 현상이 흔하게 나타나는 것이다. 이 오염된 파라미터를 넘겨받은 자동차 보험 오라클은 500 Server Error나 황당한 결과값을 뱉어내고 파이프라인은 그대로 붕괴한다.

3. 원인 분석 및 아키텍처적 피드백(Feedback)

이러한 복합 문장(Multi-intent) 실패 케이스를 랭스미스(LangSmith) 같은 추적 툴로 수집하고 분석해 보면, 이는 결국 언어 모델 고유의 아키텍처적 한계인 시퀀스 길이 제한에 따른 어텐션 분산의 희생양임을 알 수 있다. 이 실패 빈도를 0%로 수렴시키기 위한 피드백 루프(Feedback Loop)의 핵심 액션 아이템은 다음과 같다.

  • 프롬프트 제약 조건의 강화: 시스템 지시문에 “사용자의 발화 내에 여러 개의 이질적인 업무 지시가 섞여 있다면, 한 번의 턴(Turn)에 두 개의 API를 무리해서 동시에 쏘지[Parallel Call] 마라. 대신 첫 번째 질문(자동차 보험)에 대한 정보를 수집하여 완전히 종결한 뒤, 다음 대화 턴(Turn)에서 영수증을 보내는 ‘직렬(Serial) 처리’ 방식을 강제한다.“라는 문구를 주입한다.
  • 라우터(Router) 계층의 신설: 프론트엔드 LLM이 일을 전부 떠맡지 않도록, 사용자의 복합 문장이 들어오자마자 이를 ["자동차 견적 요청", "이메일 발송 요청"]이라는 순수 텍스트 배열로만 무식하게 쪼개 주는(Chunking) 가벼운 ’의도 분리용 라우터 LLM 모듈’을 마이크로서비스 앞단에 배치한다.

이러한 철저한 실패 분석과 루프 피드백이야말로, 어설프게 똑똑한 챗봇 장난감을 엔터프라이즈의 거대한 마이크로서비스 아키텍처(MSA)와 안전하게 결속시키는 유일한 설계 지침이 된다.