KT Shop 인터넷·TV·결합 상품의 상담부터 추천·예약·가입 신청까지,
하나의 대화 흐름으로 처리하는 AI 에이전트입니다.
A conversational AI agent that handles consultation,
recommendation, and sign-up in a single flow.
2026.02 — 2026.06
Pain Point & Solution
유선상품 가입 과정에서 도출된 네 가지 핵심 문제 — 복잡한 상품 구조, 단절된 경험, 토큰 낭비·지연, 개인정보 우려 —를
각각 대화형 추천 · 단일 오케스트레이션 · 토큰 최적화·병렬 호출 · 보안 설계로 풀어낸 AI 백엔드의 핵심 기능입니다. 카드를 누르면 상세 구현이 펼쳐집니다.
PAIN
복잡한 상품 구조·약정 조건
Complexity of plans and contract terms
PAIN
단절된 상담·예약·가입 경험
Fragmented consult, booking and sign-up flow
PAIN
장황한 응답·토큰 낭비와 지연 누적
Verbose responses, token waste and latency buildup
PAIN
개인정보 노출 우려
Concern over personal data exposure
추천 단계 진입 시 분류 LLM이 발화를 먼저 읽어 유형을 판별하고, 유형별 전용 조회 경로로만 진입시켜 멀티턴 누적 시에도 불필요한 API 호출을 차단했습니다.
분류 LLM이 발화를 읽어 멀티턴 > 사은품 > 비교 > 특정상품 > 일반추천 우선순위로 분기, 유형별 전용 경로로만 진입시켜 무거운 조회를 사전 차단.
상품 검색 → API 추천 → 상담 전환 → 지식(RAG) Fallback으로 수렴시켜 어떤 발화도 응답 없이 끝나지 않도록 보장.
단품 3단계(정확·유사·미존재)·결합 4단계로 매칭 유형을 나눠 유형별 안내 멘트와 대체 추천을 생성.
상품 슬라이드·바텀시트·달력·프로모션 스크롤 등 8종 UI를 Tool 레이어가 완성 JSON으로 반환해 파싱 에러 제거.
Architecture
매 턴 상태 객체를 읽어 '의도 분류부터 다시 태울지(최초진입), 진행 중이던 단계로 이어붙일지(재진입)'를 먼저 판정하고, 추론 책임을 상태확인 → 주제분류(9라벨) → 서브에이전트 선택 → 추천 유형 분류 → 답변 생성으로 분리해 계층적으로 통과시키는 구조입니다. 8개 서브에이전트와 가입 slot 체인(사은품→주소→일자→시간→본인인증)이 모두 종단의 답변생성 노드로 수렴합니다.
Key Decisions
멀티 에이전트 플랫폼 특성상 사용자가 가입 도중 지식·요금제·빠른상담 등 타 에이전트로 이탈 후 복귀하거나, 단계를 앞질러 발화하는 비선형 흐름에서 진행 맥락 소실·단계 꼬임·정보 재입력 요구로 가입 여정이 중단됐습니다.
대화에 필요한 모든 정보(현재 단계·가입 입력값·직전 의도·선택지·경유 에이전트 코드)를 요청·응답마다 함께 주고받는 단일 JSON 상태 객체로 정의하고, 매 턴 '읽기(상태 복원) → 갱신(발화·버튼 반영) → 라우팅(다음 단계 결정)' 사이클을 수행. 상태를 서비스 코드 외부 객체로 분리해 어느 에이전트를 경유하든 동일 상태를 이어받도록 설계.
슬롯 값 유무만으로 흐름을 재구성해 건너뛰기·복귀를 동일 로직으로 처리. 비선형 입력에서도 진행 맥락을 무손실 보존.
하나의 LLM이 상품 조회·조건 비교·가입 절차 안내까지 모두 직접 수행하면 응답 일관성 부족·환각·운영 정책 반영 어려움의 구조적 결함이 발생합니다.
추론 책임을 상태확인 → 주제분류 → 서브에이전트 선택 → 추천 유형 분류 → 답변 생성으로 분리한 다단계 라우터 구조를 설계. 실제 상품 연동·조건 비교·유효성 검증은 Python 비즈니스 로직 계층이 담당하도록 계층화.
운영 정책은 백엔드 코드에서, 답변 표현은 프롬프트에서 각각 수정 가능해 변경 대응 속도 향상. LLM 판단 범위를 줄여 같은 입력에 일관된 응답 확보.
멀티턴 환경에서 상용 백엔드 API의 방대한 JSON 응답이 Context Window에 지속 누적돼 1회 대화당 76k+ 입력 토큰 낭비와 추론 지연이 발생했습니다.
중괄호·따옴표·키가 행마다 반복되는 JSON을, 키를 한 번만 적고 값을 행으로 나열하는 경량 표 형식(TOON)으로 변환하는 커스텀 파서를 개발·적용. 추천·안내에 실제 필요한 필드만 남기도록 정제.
평균 대화 입력 토큰 63.4% 절감(76.59k→27.97k), 추론 속도 향상과 API 연동 운영 비용 절감을 동시 달성.
1차 개발 에이전트는 모든 LLM 호출이 직렬로만 실행되는 단방향 구조여서, 주제 분류·단계 판단·API 조회 등 판정 단계가 누적될수록 응답 지연이 선형적으로 증가하는 한계가 있었습니다.
단방향 워크플로는 유지하되, 상호 의존성이 없는 LLM 판정·조회 호출을 병렬 실행하도록 재설계. 버튼 선택 처리 코드 3개(고정메뉴·바텀시트·리스트)도 병렬 실행 후 우선순위로 취합하고, 상품·혜택 조회는 ThreadPoolExecutor로 병렬화.
다단계 분리 구조의 판정 정확도를 유지하면서 단계 누적에 따른 응답 지연 증가를 억제.
가입 최종 관문인 본인인증에서 정책상 비대면 셀프 가입이 불가한 고객 유형이 존재함에도, 백엔드 분기가 없으면 흐름 단절·세션 꼬임·오주문으로 이어질 수 있었습니다.
인증 응답의 결과 구분값·자격 관련 코드를 실시간 파싱해 상태값과 UI 바인딩을 동적 제어하는 장애 격리 전처리 모듈을 설계. 셀프 가입 불가 유형은 누적 정보 초기화 후 정책 안내 멘트와 상담 전환 버튼으로 라우팅하고, 정상 고객은 입력 정보 확인 카드로 가입 신청까지 안정 연결.
가입 자격 검증을 백엔드로 자동화해 엣지 케이스 이탈을 방어하고, 셀프 가입 불가 고객을 유효 상담 경로로 전환.
LLM이 슬라이드·바텀시트·버튼 구조를 직접 생성하면 형식이 불안정해 파싱 에러가 발생하고, 상품 데이터가 바뀌면 UI가 깨졌습니다.
전용 UI 빌더 Tool이 상품 슬라이드·'내게 맞는 상품' 설문 폼(바텀시트)·연관 프로모션·추천 질문·피드백 버튼까지 완성된 챗봇 UI JSON을 반환하도록 설계. LLM은 도메인 판단·흐름 제어에만 집중.
UI 형식을 Tool 레이어에서 보장해 파싱 에러 제거. 상품 데이터 변경이 UI에 자동 반영되고, LLM 출력 토큰도 정형화로 절감.
Challenges & Solutions
단일 발화에 복수 의도가 섞이거나(가입·탐색 ↔ 해지·조회·변경) 도메인이 2개 이상 포함되는 케이스에서 오작동이 발생했습니다.
명시적 선행 표현('~부터')을 최우선 처리하고 인과·발화 순서를 고려해 첫 의도 응답 후 다음 의도를 마지막 줄에서 문의. 2순위 의도는 임시 버퍼에 보관(최대 2개), 결합 가능 도메인은 병합 안내로 분기.
사용자가 현재 단계를 앞질러 미래 단계 정보를 함께 말하는 케이스(주소 입력 화면에서 날짜·시간까지 동시 발화)에서 정보가 유실됐습니다.
현재 단계에 속하지 않는 데이터(사은품·날짜·시간)와 2순위 복합 의도를 선입력 임시 버퍼(Look-ahead Buffer)에 적재했다가 해당 단계 도달 시 소비하는 구조 구현.
특정 상품군 과매칭·결합상품 분리·기이용자 오가입 등 운영 사고로 직결되는 오분류·과매칭이 잦았습니다.
운영 사고 케이스를 프롬프트 가드레일 규칙으로 차단 — 명시 키워드가 없으면 매칭 금지, 유사도 임계값 기반 매칭, 결합 대상 도메인 강제 병합, 기이용자·상담 필요 건은 상담 플로우로 전환하도록 규칙화.
오타·구어체·비표준 단위 표현이 섞인 발화가 분류 정확도를 떨어뜨리고, 같은 의미의 표현이 제각기 다른 결과로 갈렸습니다.
라우터 프롬프트 단계에서 발화를 표준 표현으로 교정하고(오타·구어체), 단위·옵션 표현을 정규화하는 전처리 사전을 두어 분류 정확도를 확보. 표준화된 발화만 하위 로직으로 흘려보내 downstream 분기의 일관성을 보장.
타사 브랜드·단순 부가서비스 발화나 모호한 지식성 질의가 상품 가입 흐름으로 잘못 유입돼 오작동으로 이어졌습니다.
과업 단위 분류(가입·상담·조회·해지·FAQ 등)에 경쟁사·부가서비스 예외 라벨 체계를 더한 9라벨 주제 분류를 수립하고, 지식성 질의는 검색에 적합한 완결 질문으로 재작성해 오분류율을 개선.
Beyond Sign-up
상품 추천·가입뿐 아니라 상담 예약·내역 조회·해지·주소 변경까지 유선 여정 전체를 하나의 대화 흐름으로 처리하도록 백엔드를 설계했습니다.
Tool Layer
LLM이 직접 하지 않는 실제 상품 연동·조건 비교·유효성 검증·UI 생성을 전담하는 Python Tool 15종을 설계·개발했습니다. 무거운 조회는 ThreadPoolExecutor로 병렬화하고, 개인정보는 AES 복호화 후 서버 측에서만 처리합니다.
전 상품과 사은품을 ThreadPoolExecutor로 동시 조회해 조회 지연 최소화
카테고리·도메인 코드로 조회 범위를 좁혀 필요한 상품만 로드
상품 카테고리 체계 조회로 추천 범위 결정
셀프 가입 불가·전화상담 전용 상품 목록 분리 조회
본인인증·동의 단계에 필요한 표준약관 조회
4문항 객관식 설문 응답으로 발화가 모호한 사용자에게 맞춤 상품 추천
여러 상품의 사은품·프로모션을 병렬 집계하고 선택지 상태를 갱신
단일 상품의 사은품·프로모션을 조회·병합해 안내 데이터 구성
식별자를 AES 복호화해 보유 회선 정보를 실시간 조회 (LLM 비노출)
최근 예약·가입 이력을 복호화해 카드로 안내
최종 확정된 가입 신청을 안전하게 저장
상담 예약을 적재하고 주문번호 반환
정책상 예약 가능일(영업일·비공휴일 등)만 선택 허용하도록 검증
영업시간·정시 단위 범위로 예약 시간 제한
상품 슬라이드·설문 폼·프로모션·추천 질문·피드백까지 완성된 챗봇 UI JSON을 조립해 반환
Integrations
상품·혜택·주문·고객 회선 등 성격이 다른 다수의 상용 백엔드 시스템을 하나의 대화 흐름으로 묶고, 방대한 응답을 경량화해 LLM에 전달했습니다.
상품 조회·카테고리·사은품·프로모션·약관·맞춤 검색·주문 저장/조회를 연동. 무거운 조회는 병렬(ThreadPoolExecutor) 처리하고 추천에 필요한 필드만 정제해 호출.
로그인 고객의 보유 회선·할인 정보를 실시간 조회해 이름·번호 등을 자동 선반영. 식별자는 AES 복호화 후 서버에서만 처리.
이종 시스템의 방대한 JSON 응답을 경량 표 형식(TOON)으로 변환하는 커스텀 파서로, 멀티턴 누적 시에도 컨텍스트·API 비용이 불필요하게 늘지 않도록 통제.
Performance
Impact
Live Demo
상담 → 추천 → 예약까지, 대화 흐름 그대로의 실제 작동 모습입니다.
Stack