하는 일
Table | |
|---|
| 입력 | 여행 조건(지역·날짜·동행·취향) + 이미 짜인 일정(날짜·순서·시각 고정) + 장소별 개요 |
| 출력 | 가이드북 글만 담은 JSON. 제목, 소개, 하루 요약, 장소별 추천 이유 |
일정은 바꾸지 않습니다. 일정은 앞 단계에서 정하고, 이 모델은 "왜 여기인지"를 씁니다.
학습
- 데이터: 교사 모델
Qwen3-32B-AWQ로 정답을 만들고(증류), 규칙 검사기로 걸렀습니다.
- train 2,206쌍, valid 171쌍, test 200쌍(학습과 분리). 검사에 걸린 423쌍은 뺐습니다.
- 방식: bf16 LoRA. transformers
Trainer와 peft로 SFT를 직접 구현했습니다.
- loss는 정답 부분에만 걸었습니다.
- r=16, alpha=32, dropout 0.05, 모든 linear 층에 적용했습니다. 학습한 파라미터는 41.9M개(0.52%)입니다.
- 2 epoch, lr 1e-4(cosine, warmup 3%), 실효 배치 8, A100에서 552 step을 돌렸습니다.
- 버전 v1~v7을 거쳤고, v7에서 장소 개요를 입력에 넣었습니다.
평가
자동 규칙 검사 (test 200건): 학습 전 44건(22%) → v7 162건(81%)
- v6-B는 183건(91.5%)이었습니다. v7은 개요 덕분에 글이 길고 구체적이 되었고, 그만큼 같은 틀 반복·거리 언급 검사에 더 걸렸습니다.
블라인드 품질 비교 (GPT 심판, test 50건, 기준별 1~5점):
- 심판이 A/B 순서를 바꾼 10쌍에서 모두 같은 판정을 내려 일관성을 확인했습니다(10/10).
Table with columns: 기준, v7 / Sonnet (같은 입력)| 기준 | v7 / Sonnet (같은 입력) |
|---|
| 사실 | 95% |
| 입력과 맞음 | 88% |
| 구체성 | 84% |
| 자연스러움 | 79% |
| 반복 | 70% |
| 평균 | 84% (학습 전 74%) |
- 개요 효과: 이전 버전(v6-B) 대비 118%였고, 구체성 점수는 1.80점에서 3.96점(2.2배)으로 올랐습니다.
서빙
KGB에서는 RunPod Serverless(vLLM)로 매일 오후 1시~5시에 이 모델을 쓰고, 그 외 시간에는 Claude Sonnet을 씁니다.
아래는 vLLM, RunPod L4 측정 결과입니다(에러 0).
Table with columns: 동시 요청, 첫 토큰(TTFT), 시간당 처리, 비용 (Sonnet 대비)| 동시 요청 | 첫 토큰(TTFT) | 시간당 처리 | 비용 (Sonnet 대비) |
|---|
| 1 | 1.94초 | 55건 | 25% |
| 3 | 2.23초 | 141건 | 10% |
| 5 | 2.45초 | 189건 | 7% |
vllm serve kakaocorp/kanana-1.5-8b-instruct-2505 \ --enable-lora --max-lora-rank 16 \ --lora-modules writer=orbit01/kgb-writer-v7
model="writer"로 부릅니다. 개요는 학습 때와 같이 자릅니다.
- 공백을 합칩니다.
- 앞 200자만 남깁니다.
- 100자 이후에 마침표가 있으면 마지막 마침표까지만 남깁니다.
개요가 없는 장소는 overview 필드를 빼고 보냅니다.
한계
- 한국어 전용이며, KGB 입력 형식에 맞춰 학습했습니다.
- 전체 응답 시간은 Sonnet보다 약 4배 깁니다(출력 약 950토큰, L4 기준).
- 문장 틀 반복이나 거리·이동 시간 언급이 아직 남아 있습니다.
링크