"Multi-Provider Routing — 어느 모델에게 어떤 일을 보낼 것인가 (하네스 시리즈 5/6)"

카테고리별 1위 모델은 시리즈 ①에서 봤다. 9개 다 쓰면 좋은데, 매번 어느 걸 쓸지 어떻게 결정하나? 답은 라우팅 레이어.

이 글은 작업 단위로 적절한 모델을 자동 선택하는 라우팅 시스템 설계를 다룬다. 비용/품질 트레이드오프, fallback 전략, 분류기 구축, OpenRouter 같은 통합 게이트웨이 비교까지.

시리즈 (6편)

  1. 하네스 엔지니어링이란
  2. Context Engineering
  3. Memory Systems
  4. Tools & Sandboxing
  5. Multi-Provider Routing ← 이 글
  6. 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

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"