LLM 비용 라우팅 — 질문 난이도별 모델 티어 분리
목차
TL;DR
- 증상: AI 집사의 모든 응답에 최상위 모델을 고정해두니, 일상 잡담에도 가장 비싼 모델이 호출됨
- 원인: “좋은 모델 = 항상 좋다”는 단일 기준. 질문 난이도와 모델 등급을 매칭하지 않음
- 해결: 질문을 trivial / normal / deep 세 단계로 분류해 모델 티어를 라우팅
- 효과: normal(일상) 쿼리당 약 40% 비용 절감, 전체 API 비용 약 20~28% 절감 예상
- 한계: 무조건 싼 모델로 내리면 품질이 깨지는 구간이 있다(감정·민감 대화). 분류 기준에 예외를 넣어야 함
토큰 내역을 보다가 멈칫했습니다
저는 Jarvis라는 AI 집사를 혼자 만들어서 24시간 돌립니다. 처음엔 단순하게 생각했습니다. 기왕이면 제일 똑똑한 모델로 답하게 하자. 그래서 모든 응답을 최상위 모델(Opus급)에 고정해뒀습니다.
한동안 잘 썼습니다. 그러다 어느 날 토큰 사용 내역을 들여다보다 멈칫했습니다. “오늘 일정 뭐 있어?”, “안녕”, “응 고마워” 같은 한 줄짜리에도 가장 비싼 모델이 풀로 돌고 있었습니다. 이런 건 훨씬 가벼운 모델로도 충분한데 말입니다.
식당에서 물 한 잔 따르는 데 수석 셰프를 부르는 격이었습니다. 물은 누가 따라도 물입니다.
“좋은 모델은 항상 좋다”는 함정
제가 깔고 있던 가정은 “비싼 모델 = 항상 더 나은 선택”이었습니다. 틀린 말은 아닙니다. 같은 질문이면 더 좋은 모델이 더 잘 답합니다. 문제는 모든 질문이 같은 난이도가 아니라는 것입니다.
질문을 실제로 들여다보니 세 종류로 갈렸습니다.
- 사소한 것: “응”, “고마워”, “지금 몇 시야” — 누가 답해도 똑같음
- 보통: “오늘 일정 정리해줘”, “이거 어떻게 생각해” — 무난한 모델로 충분
- 어려운 것: 코드 리뷰, 아키텍처 설계, 장애 원인 분석 — 여기서만 최상위 모델이 값을 함
최상위 모델의 진짜 가치는 세 번째 칸에서 나옵니다. 첫 번째, 두 번째 칸에 최상위 모델을 쓰는 건 품질은 거의 안 오르는데 비용만 몇 배로 내는 거예요. “좋은 모델은 항상 좋다”는 프레이밍이 이 차이를 가려버렸습니다.
질문을 분류해서 모델을 갈아 끼웠습니다
해결은 질문을 받자마자 난이도로 분류하고, 그에 맞는 모델 티어로 보내는 거였습니다. 라우팅 규칙은 이렇게 잡았습니다.
deep → 최상위 모델 유지 (품질 보장)
normal → 중간 모델로 합리적 다운 (비용 최적화)
trivial → 가장 가벼운 모델 (비용 절감)분류 기준은 무겁지 않게 만들었습니다.
- deep: 코드 블록이 있거나, 리뷰·설계·아키텍처·트레이드오프·디버그·최적화·장애·성능 같은 키워드가 잡히는 질문
- trivial: 20자 미만이면서 yes/no·숫자·상태 요약 같은 짧은 패턴
- normal: 나머지 전부
핵심은 deep만 비싼 모델을 유지하고, 나머지는 과감히 내린다는 거예요. 어려운 질문에서 품질을 깎는 건 절대 안 되니까, 거기만 안 건드리고 나머지에서 아끼는 식입니다.
비용 차이를 따져보면 이렇습니다. 일상(normal) 응답 하나를 최상위 모델 대신 중간 모델로 처리하면 출력 비용이 대략 60% 수준으로 떨어집니다. 응답당 약 40% 절감입니다. 제 사용 패턴을 보니 전체 대화의 절반 이상이 normal·trivial이었습니다. 그래서 전체 API 비용으로는 약 20~28% 절감이 예상됐습니다.
숫자만 보면 별거 아닌 것 같습니다. 응답 하나에 몇십 원 차이입니다. 그런데 24시간 돌아가는 봇이라 이게 쌓입니다. 매일 커피값 하나가 그냥 새던 게, 한 잔이 반 잔으로 줄어든 셈입니다. 한 달이면 무시 못 합니다.
싸게 내렸다가 한 번 데였습니다
여기까지면 깔끔한 성공담인데, 사실 중간에 한 번 크게 데였습니다.
“normal은 무조건 중간 모델로 내린다”를 너무 곧이곧대로 적용했더니,