Qwen3.8-27B-Human-KO-MerchantDesk-v0.1
우리나라 소상공인 사장님들을 위해 만든 모델입니다. 동네 음식점의 고객 문의를 사장님 대신 받는 매장 응대 데스크용 정책 모델입니다. 다키클라우드(ThakiCloud)의 한국어 모델 ThakiCloud/Qwen3.8-27B-Human-KO 에 LoRA 지도 미세조정을 한 뒤 병합했습니다.
이 모델이 배운 것은 가게에 대한 지식이 아닙니다. 매장 프로필과 고객 한마디를 읽고, 문의 의도(25종)와 슬롯을 고르고, 바로 답할지·되물을지·도구로 조회할지·사장님께 넘길지를 정하는 판단입니다. 가격·시간·메뉴 같은 사실은 모델이 외우지 않고 요청마다 넣어 주는 매장 프로필에서만 가져옵니다.
결과
벤치는 합성 매장 프로필 300개와 실제 고객 발화로 만든 블라인드셋입니다. IID 셋은 매장당 20건씩 6,000건이고, Hard 셋은 두 라벨러의 판단이 엇갈린 대화 600건입니다. 세 모델을 같은 프롬프트, 같은 프로필 직렬화, 같은 디코딩(greedy, 384 토큰, thinking off)으로 돌렸고, 모델 출력의 의도와 슬롯을 규칙 컴파일러가 받아 행동과 문장을 만들게 한 뒤 채점했습니다. 구간은 매장 단위 부트스트랩 2,000회의 95% 구간입니다.
| 지표 | 기준 모델 (Human-KO) | 이 모델 | 차이 (95% 구간) |
|---|---|---|---|
| 해결률, IID | 0.609 | 0.708 | +10.0%p (9.0 ~ 11.0) |
| 해결률, Hard | 0.473 | 0.557 | +8.3%p (4.1 ~ 12.7) |
| 의도 정확도, IID | 0.736 | 0.866 | +13.0%p (12.0 ~ 14.0) |
| 행동 정확도, IID | 0.817 | 0.881 | +6.4%p (5.5 ~ 7.4) |
| 과잉 연결(불필요하게 사장님께 넘김), IID | 0.104 | 0.042 | −6.2%p |
| 근거 없는 사실(컴파일러 적용) | 0 / 6,000 | 0 / 6,000 | 0 |
Qwen3.8-27B-Human-KO-Enterprise-v0.2(범용 정책 모델)는 직전 프롬프트 v1.1에서 같은 컴파일러를 붙여 기준 모델과 짝 비교했을 때 해결률이 IID에서 5.9%p(5.2 ~ 6.7), Hard에서 2.8%p(0.7 ~ 4.9) 낮았습니다. 이 과제에서는 범용 정책 학습이 옮겨 오지 않았고, 전용 학습이 필요했다는 뜻입니다.
시드 분산 (같은 데이터·설정, 시드만 다르게 3회 학습)
| 시드 | 해결률 IID | 기준 대비 | 해결률 Hard | 기준 대비 | 모델 문장의 근거 없는 사실(Hard, 컴파일러 없이) |
|---|---|---|---|---|---|
| 1 (이 저장소) | 0.708 | +10.0%p | 0.557 | +8.3%p | 7.5% |
| 2 | 0.716 | +10.8%p | 0.630 | +15.7%p | 16.7% |
| 3 | 0.750 | +14.2%p | 0.573 | +10.0%p | 3.5% |
| 평균 | 0.725 | +11.6%p | 0.587 | +11.3%p | 기준 모델 4.0% |
세 시드 모두 기준 모델보다 IID·Hard 에서 높았고, 모든 구간이 0을 넘었습니다. 컴파일러를 적용하면 근거 없는 사실은 세 시드 모두 0건입니다. 공개한 가중치는 시드 1로, 셋 중 해결률이 가장 낮아 위 결과표의 수치는 보수적인 쪽입니다. 반대로 모델이 직접 쓴 문장의 근거 없는 사실은 시드에 따라 3.5%에서 16.7%까지 크게 흔들렸습니다. 이 성질은 학습이 안정적으로 만들어 주지 않으므로, 컴파일러와 게이트를 함께 쓰는 것이 필수입니다.
일반 능력·안전 (기준 모델과 같은 조건에서 나란히 측정)
| 항목 | 기준 모델 | 이 모델 | 문항 수 |
|---|---|---|---|
| 영어 지식 (MMLU) | 92.6 | 94.7 | 95 |
| 한국어 지식 (KMMLU) | 62.0 | 63.0 | 100 |
| 코딩 (HumanEval) | 95.5 | 96.6 | 87~89 |
| 지시 따르기 | 82.0 | 74.0 | 100 |
| 유해 요청 거절 | 25/25 | 25/25 | 25 |
| 유해해 보이지만 정상인 요청을 거절한 수 | 0/25 | 2/25 | 25 |
문항 수가 적어 이 표본으로 확실히 구분되는 차이는 약 15%p 이상입니다. 지시 따르기가 8%p 낮게 나왔지만 통계적으로 구분되지는 않습니다. 다만 방향이 아래쪽이므로 형식 지시가 까다로운 용도라면 따로 확인하세요. 유해 요청은 두 모델 모두 전부 거절했습니다. BF16 병합본으로 잰 결과입니다.
사용법
system_prompt_v1.2.txt 를 시스템 메시지로, 매장 프로필과 대화를 사용자 메시지로 넣습니다. 형식은 example_user_message.txt 에 있습니다(프로필은 코드로 만든 합성 매장입니다). 응답은 JSON 객체 하나입니다.
{"intent": "reservation.create", "slots": {"date": "...", "time": "...", "party_size": 4},
"action": "answer|ask_clarification|tool_call|handoff_to_owner",
"tool": {"name": "...", "args": {}}, "answer": "...", "cites": ["..."]}
vLLM 등 Qwen3.8 호환 서빙에서 그대로 동작합니다. chat_template_kwargs={"enable_thinking": false} 로 평가했습니다.
⚠️ 모델 출력을 그대로 고객에게 보내지 마세요
위 수치는 모델의 intent·slots 만 쓰고, 행동·인용·문장은 코드가 프로필에서 만든 조건입니다. 모델이 직접 쓴 answer 문장을 그대로 채점하면 Hard 셋에서 프로필에 없는 사실을 말한 비율이 7.5%로, 기준 모델(4.0%)보다 높았습니다(+3.5%p, 구간 1.1 ~ 5.8). 이 모델은 판단은 더 잘하지만 문장을 더 대담하게 씁니다. 실제 서비스에서는 의도와 슬롯만 받아 쓰고, 고객에게 나가는 문장은 프로필 값으로 채우는 템플릿이나 규칙 엔진으로 만들고, 가격·시간·금액이 프로필과 맞는지 검사하는 게이트를 두시기 바랍니다.
학습
- 방법: LoRA r8, alpha 16, 모든 선형층, 1에폭, 학습 대화 7,518건, 이후 BF16 병합(496/496 모듈 적용 확인)
- 데이터: AI 허브 「소상공인 고객 주문 질의-응답 텍스트」의 학습(Training) 분할 발화에 합성 매장 프로필을 붙이고, 교사 응답은 사내 모델이 만든 뒤 금액·인용 게이트를 통과한 것만 썼습니다. 벤치는 같은 데이터셋의 검증(Validation) 분할에서만 뽑아 학습과 겹치지 않습니다.
- 학습 데이터와 벤치 파일은 공개하지 않습니다. 이 저장소에는 원본 데이터나 그 가공본이 들어 있지 않습니다.
한계
- 음식점 업종만 다룹니다. 미용·소매 등은 의도 체계부터 다릅니다.
- 학습은 v1 프롬프트로, 평가는 v1.2 프롬프트로 했습니다. 공개한 시스템 프롬프트는 v1.2 입니다.
- BF16 병합본의 결과입니다. 양자화본은 별도로 검증해야 합니다.
- 정답은 규칙 코드로 계산했고, 원본 데이터를 보지 않은 독립 판정자(200건)와의 행동 일치율은 95.5% 입니다.
출처
이 모델은 과학기술정보통신부의 재원으로 한국지능정보사회진흥원의 지원을 받아 구축된 AI 허브(https://aihub.or.kr) 데이터 「소상공인 고객 주문 질의-응답 텍스트」를 학습에 활용했습니다.