📝 자연어 주문 파싱 (Email/Chat/Voice → Standard Order)
B2B 자연어 주문(이메일·채팅·STT)을 LLM이 JSON으로 자동 변환 · 수동 입력 90% 자동화 · Pydantic 검증 · Whisper STT · 김지훈 수석연구원
B2B 영업 현장에서는 여전히 이메일 · 카카오톡 · 전화 음성으로 주문이 들어오는 비중이 크다. 운영자는 메시지를 읽고 SKU 코드를 찾고 수량·납기·주소를 OMS 화면에 다시 타이핑한다. RT-O9는 이 반복 작업을 제거하기 위해 LLM(JSON mode + few-shot) · Whisper STT(음성) · Pydantic 검증을 결합한 파이프라인을 구축한다.
입력 채널이 무엇이든 raw text로 변환한 뒤 LLM이 표준 OrderRequest JSON으로 추출하고, 모호한 필드는 사람에게 confirm 큐로 보낸다. SKU는 fuzzy 매칭으로 코드를 회수하고 주소는 행정구역 정규화로 정제한다. 5월 4주차 기준 자동화율 92%, 필드 F1 94%, 평균 처리 18초로 운영자 수동 입력 시간을 90% 이상 줄였다.
이메일/채팅/음성에서 raw text 추출. 음성은 Whisper로 텍스트 변환, 첨부파일은 OCR/엑셀 파싱.
LLM JSON mode + NL_PARSE_PROMPT few-shot으로 sku_codes / quantities / delivery_date / ship_to_address 추출.
Pydantic 모델로 타입·범위 검증. 모호 필드(신뢰도 < threshold)는 confirm queue로 라우팅.
SKU fuzzy 매칭(Levenshtein) 으로 정식 코드 회수, 주소는 geocode로 행정구역 정규화.
표준 OrderRequest 생성 후 RT-O1 DOM으로 라우팅. PromiseLog에 자연어 원문도 함께 보관.
# 이메일/채팅 자연어 -> 구조화 주문 변환 NL_PARSE_PROMPT = """ 다음 메시지에서 주문 정보를 추출하여 JSON으로 반환하세요. 필드: sku_codes, quantities, delivery_date, ship_to_address 메시지: {user_message} """ def parse_nl_order(message): response = openai.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": NL_PARSE_PROMPT.format(...)}], response_format={"type": "json_object"} ) return json.loads(response.choices[0].message.content) # Pydantic으로 타입 검증 + 모호 필드는 confirm 큐로 def validate_order(parsed): try: order = OrderRequest(**parsed) # Pydantic 2.x return "ok", order except ValidationError as e: return "confirm", e.errors()
OpenAI response_format={type:json_object}로 항상 유효한 JSON을 강제하고, Pydantic이 한 번 더 타입을 검증한다. 검증 실패 시 errors[] 를 운영자 confirm UI에 그대로 노출해 어떤 필드가 모호한지 즉시 알린다.
sku_codes 추출 정확도. fuzzy 매칭 후 정식 코드와 일치 여부로 평가quantities · SKU별 수량 매핑. 단위 추출(EA/박스/팔레트) 포함delivery_date · "다음주 화" / "25일 오전" 같은 상대 표현 → ISO 변환ship_to_address · 행정구역 + 도로명/번지 정규화 후 geocode 일치 여부예) "A-203 5박스, B-101 12개, 다음주 화요일까지 본사로 부탁" → sku=[A-203,B-101], qty=[5,12], date=2026-04-29, addr=본사주소 4필드 모두 정답. F1 = 1.0. 동일 메시지에서 주소만 "본사"로만 표기되면 addr 필드 confirm 큐로 라우팅 → 자동화 미달.
| 채널 | 텍스트 정확도 | 평균 처리시간 | 모호 비율 | 비고 |
|---|---|---|---|---|
| 96% | 12s | 8% | 형식적 · 첨부 엑셀 활용 | |
| KakaoTalk | 91% | 9s | 14% | 줄임말·이모지·맥락 의존 |
| SMS | 88% | 6s | 22% | 짧은 단문 · 정보 누락 다수 |
| 음성(STT) | 84% | 22s | 19% | Whisper · 번지/숫자 약점 |
이메일은 SKU 코드가 명시적이고 첨부 엑셀이 동반되는 경우가 많아 정확도가 가장 높다. 음성(STT)은 Whisper의 한국어 숫자/번지 인식 한계 때문에 모호 비율이 높지만, RT-O9는 confirm 큐로 흡수하므로 escalation은 1.6% 수준에 그친다.
[1] 김지훈, "자연어 주문 파싱 1차 보고서", IntraLogis 사내 보고서, 2026.05
[2] OpenAI, JSON Mode & Structured Outputs Documentation, 2024
[3] Radford, A. et al., "Robust Speech Recognition via Large-Scale Weak Supervision (Whisper)", OpenAI, 2022
[4] Pydantic Project, Pydantic 2.x Official Docs, 2025
[5] GS1, SKU 식별 표준 (GTIN/GLN), 2024
[6] 한국정보통신기술협회(TTA), 음성 데이터 표준 가이드라인, 2024