"Multi-Provider Routing — 어느 모델에게 어떤 일을 보낼 것인가 (하네스 시리즈 5/6)"
카테고리별 1위 모델은 시리즈 ①에서 봤다. 9개 다 쓰면 좋은데, 매번 어느 걸 쓸지 어떻게 결정하나? 답은 라우팅 레이어.
이 글은 작업 단위로 적절한 모델을 자동 선택하는 라우팅 시스템 설계를 다룬다. 비용/품질 트레이드오프, fallback 전략, 분류기 구축, OpenRouter 같은 통합 게이트웨이 비교까지.
시리즈 (6편)
- 하네스 엔지니어링이란
- Context Engineering
- Memory Systems
- Tools & Sandboxing
- Multi-Provider Routing ← 이 글
- Evaluation & Ops
1. 왜 Multi-Provider인가
단일 제공자 리스크
- API 다운타임 (Anthropic 2024 사례)
- 가격 갑자기 인상
- 모델 deprecation
- 지역 제한 (Seedance 2.0 = 미국 차단)
작업별 최적 모델이 다르다
시리즈 ① 결과를 다시 보면: - 종합 1위 GPT-5.5 ($5/$30) — 비싸지만 정확 - 가격 1위 DeepSeek V4-Flash ($0.14/$0.28) — 36× 저렴 - 코딩 1위 Kimi K2.6 ($0.95/$4) — GPT-5.4 추월 - 에이전트 1위 MiniMax M2.7 ($0.30/$1.20) — GDPval ELO 1위 - 로컬 Qwen3.6-27B — $0
같은 사용자가 시간당 100회 호출하는데, 다 GPT-5.5로 보내면 한 시간에 $50~$100. 작업별로 라우팅하면 그중 80%는 V4-Flash나 로컬로 갈 수 있다 → 80% 비용 절감.
2. 라우팅 차원
라우팅 결정에 들어가는 변수:
2-1. 작업 유형
- 챗·요약 → V4-Flash 또는 Sonnet 4.6
- 복잡 추론 → Opus 4.7 또는 GPT-5.5
- 코딩 → Kimi K2.6 또는 Sonnet 4.6
- 에이전트 도구 호출 → MiniMax M2.7
- 이미지 → GPT Image 2 또는 Nano Banana 2
2-2. 입력 크기
- 4K 토큰 미만 → Haiku 4.5 (저렴)
- 4K~32K → Sonnet 4.6
- 32K+ → Opus 4.7 또는 V4-Pro
- 200K+ → GPT-5.5 (1.05M) 또는 V4 (1M)
2-3. 비용 민감도
- 무료 플랜 사용자 → 로컬 우선
- 유료 사용자 → balanced
- 프리미엄 사용자 → quality 우선
2-4. 정확도 요구
- 의료·법률 → Opus 4.7 + verification
- 일반 챗 → Sonnet 4.6
- 데이터 변환 → Haiku 4.5
2-5. 보안 / 데이터 정책
- PII 포함 → 로컬 (oMLX) 강제
- 사내 코드 → 로컬 또는 enterprise 계약
- 일반 → managed API
3. 라우팅 패턴
3-1. Static Routing (가장 단순)
규칙 테이블:
- if: task_type == "chat" and input_size < 4000
use: anthropic/claude-haiku-4.5
- if: task_type == "code"
use: moonshot/kimi-k2.6
- if: task_type == "reasoning" and complexity == "high"
use: anthropic/claude-opus-4.7
- default: deepseek/v4-flash
장점: 명확, 디버깅 쉬움. 단점: 새 케이스마다 수정 필요.
3-2. Classifier-Based Routing
별도 모델(Haiku 4.5 같은 빠른 모델)이 입력을 보고 적절한 모델 분류:
User: "Refactor this function for thread safety"
Classifier: → "task=code, complexity=high, est_tokens=8K"
Router: → moonshot/kimi-k2.6
장점: 새 케이스 자동 처리. 단점: 분류 비용 (분류 자체에 토큰).
3-3. Cascade Routing
싼 모델 먼저 → 결과 평가 → 만족하면 종료, 부족하면 비싼 모델로 escalate.
1. Try Haiku 4.5 ($0.80/$4)
2. Eval: confidence < 0.7?
3. If yes: retry on Opus 4.7 ($15/$75)
장점: 평균 비용 ↓. 단점: 실패 케이스에서 총 비용 더 높음.
3-4. Ensemble Routing
같은 입력을 여러 모델에 보내고 합의: - 의료·법률 critical 작업 - 비용 비싸지만 정확도 ↑
4. Fallback 전략
Provider Outage
Anthropic이 다운되면 → OpenAI로 OpenAI도 다운이면 → DeepSeek로 모두 다운이면 → 로컬 (oMLX)
Rate Limit
Provider별 분 단위 토큰 한도가 있음. 한도 도달 시 다른 provider로 전환.
코드 예 (의사코드)
async def call_model(prompt, primary, fallbacks):
try:
return await primary.complete(prompt)
except (RateLimitError, ServerError, TimeoutError):
for fb in fallbacks:
try:
return await fb.complete(prompt)
except Exception:
continue
raise AllProvidersFailedError()
Circuit Breaker
한 provider가 5분 내 3회 실패 → 5분간 그 provider 차단. 자동 복구 시도.
5. OpenRouter — 통합 게이트웨이
무엇인가
모든 주요 LLM provider의 API를 하나의 OpenAI 호환 엔드포인트로 통합한 서비스.
import openai
client = openai.OpenAI(
api_key="sk-or-v1-...",
base_url="https://openrouter.ai/api/v1"
)
response = client.chat.completions.create(
model="anthropic/claude-opus-4.7",
messages=[...]
)
장점
- 단일 API 키로 모든 provider 접근
- 자동 failover (조건 설정 가능)
- 비용 비교 + 통계 대시보드
- 캐시 적중 가격 (지원 provider 한정)
- 클로즈드 모델 + 오픈소스 모델 통합
단점
- 5~10% 마크업
- 스트리밍 일부 차이
- 신규 모델 통합까지 며칠 ~ 일주일
대안
- LiteLLM (오픈소스, 자체 호스팅)
- Vercel AI Gateway
- Portkey
- 자체 라우터 (Router_Control 같은 사례)
6. 자체 라우터 vs 통합 게이트웨이
자체 구축
- 모든 provider 직접 통합
- 자체 정책 + 캐시
- API 키 관리 직접
- 예: Router_Control (Node.js + 분류기 + 프록시)
통합 게이트웨이 (OpenRouter 등)
- 빠른 시작
- 마크업 비용
- 정책 커스텀 한계
권장: - 시작 단계: OpenRouter - 월 호출 100만+ 또는 특수 정책 필요: 자체
7. 캐시 — 비용의 가장 큰 변수
Anthropic Prompt Caching
- 5분 cache: write 1.25× / read 0.1× (10× 저렴)
- 1시간 cache: write 2× / read 0.1×
- Claude Code는 1시간 cache 사용 → write 2× 배수 비용 적용
OpenAI Prompt Caching
- Automatic, 50% 할인 캐시 적중
DeepSeek V4
- Cache hit input $0.0028 (V4-Flash) — 일반의 1/50
- 사내 챗봇처럼 고정 시스템 프롬프트면 캐시 적중률 90%+
캐시 전략
- 시스템 프롬프트는 고정해서 캐시 활용 극대
- 자주 바뀌는 부분은 맨 끝에 (캐시 prefix 무효화 방지)
- 사용자별 변동 정보는 메모리 시스템에서 동적 주입
8. 비용 추적 + 분석
Per-call cost 계산
cost_per_call = (input_tokens × input_price + output_tokens × output_price) / 1M
Per-user / Per-task 누적
- 사용자별 비용 → 가격 정책 설계
- 작업 유형별 → 라우팅 정책 개선
이상치 감지
- 평균보다 10× 비싼 호출 → 알림 (RAG 폭주, 무한 루프)
- 시간 단위 갑작스러운 spike
도구
- LangSmith (managed)
- Langfuse (오픈소스)
- Helicone
- 자체 SQLite + 대시보드
9. Anti-patterns
9-1. "항상 가장 비싼 모델"
80% 케이스가 V4-Flash로 충분한데 GPT-5.5만 쓰면 → 비용 폭발.
9-2. "Static rule 너무 많음"
50줄 if-else 규칙 → 유지보수 비용 ↑. 분류기 도입 시점.
9-3. "Fallback 없음"
Anthropic 한 번 다운 → 서비스 전체 다운. multi-provider는 옵션이 아니라 보험.
9-4. "캐시 무관심"
5만 토큰 시스템 프롬프트가 매번 새로 prefill → 같은 사용자 100번 호출에 5M 토큰 = $25 (GPT-5.5). 캐시 있으면 $2.50.
9-5. "비용 추적 없음"
월 청구서 보고 놀라기 전까지 모름. 실시간 추적 필수.
10. 실전 라우팅 정책 예 (코딩 어시스턴트)
routing:
rules:
- condition: input_tokens < 1000 and task == "code_completion"
model: local/qwen3.6-27b # oMLX, $0
- condition: task == "explain_code" and input_tokens < 8000
model: anthropic/claude-haiku-4.5 # $0.80/$4
- condition: task == "refactor" or task == "implement"
model: moonshot/kimi-k2.6 # $0.95/$4, SWE-Pro 58.6%
- condition: task == "architecture_review" or complexity == "high"
model: anthropic/claude-opus-4.7 # $15/$75
- default: deepseek/v4-flash # $0.14/$0.28
fallback:
primary_failure: openrouter
rate_limit: backup_provider
cache:
system_prompt: true
duration: 1h
이 정책으로: - 80% 호출: 로컬 + Haiku + V4-Flash → 비용 ~$0.30 - 15% 호출: Kimi K2.6 → 비용 ~$1 - 5% 호출: Opus 4.7 → 비용 ~$10
가중 평균 약 $1/시간. 모두 Opus 4.7이면 $20/시간 — 20× 차이.
정리
| 결정 변수 | 권장 |
|---|---|
| 시작 단계 | OpenRouter + static rules |
| 성장 단계 | + classifier 추가 |
| 비용 critical | cascade + 캐시 극대화 |
| 보안 critical | 로컬 (oMLX) 우선, managed는 fallback |
| 다운타임 | 최소 2개 provider, 자동 failover |
핵심 한 문장: "단일 모델 사용은 2026년에 더 이상 합리적이지 않다."
다음 편(6/6, 마지막)은 모든 것을 측정하는 영역 — Evaluation & Operations.
참고 자료 (1차 출처)
- OpenRouter: openrouter.ai/docs
- Anthropic Prompt Caching: docs.anthropic.com/en/docs/build-with-claude/prompt-caching
- DeepSeek V4 가격: api-docs.deepseek.com/quick_start/pricing
- LangSmith: docs.smith.langchain.com
- Langfuse: langfuse.com
댓글
댓글 쓰기