매번 GPT-5를 호출하는 대신 프롬프트 최적화를 위한 3단계 라우팅 시스템 구축하기
Building a 3-tier routing system for prompt optimization instead of just calling GPT-5 every time
핵심 요약
프롬프트 복잡도에 따라 규칙 기반, 하이브리드, LLM 최적화로 나누어 비용과 지연 시간을 줄이는 라우팅 시스템 설계법입니다.
- 3단계 라우팅 — 규칙 기반, 하이브리드, LLM 최적화로 워크로드를 분산함
- 복합 점수 산정 — 컨텍스트 가중치, 정교함, 시스템 부하를 고려해 최적화 경로를 결정함
- 성능 최적화 — 전체 LLM 호출을 75% 줄이고 응답 속도와 비용을 획기적으로 개선함
- 모델 독립적 설계 — 특정 LLM에 종속되지 않고 다양한 모델을 계층별로 구성 가능함
프롬프트 최적화에 대한 뻔한 접근 방식: 아무 프롬프트나 가져와서 "이거 개선해줘"라는 시스템 메시지와 함께 성능 좋은 LLM에 던지고, 결과물을 돌려받는다.
문제는 이거다. 프롬프트의 40~60%는 LLM 최적화가 필요 없다. 이미 명확하고 간단한 프롬프트를 "개선"하겠다고 최상위 모델을 호출하는 건 지연 시간과 비용만 늘릴 뿐이고, 오히려 결과물이 더 구려지는 경우도 많다(LLM이 불필요하게 복잡하게 만들어버리거든).
그래서 우리는 라우팅 시스템을 만들었다. 작동 방식은 다음과 같다.
3단계 계층:
1단계: 규칙 기반 (결정론적, 10ms 미만) 패턴 매칭 최적화 — 감지된 컨텍스트에 맞춰 알려진 변환을 적용한다. Terraform 프롬프트를 작성 중이라면 IaC (Infrastructure as Code) 특화 구조를 추가하고, JSON 변환 프롬프트라면 필드 보존을 강제하는 식이다. LLM 호출도 없고, 지연 시간도 없다.
복합 점수 ≤ 0.40일 때 이쪽으로 라우팅됨.
2단계: 하이브리드 (규칙 + LLM, 적당한 지연 시간) 규칙이 먼저 처리하고, 그 뒤에 컨텍스트별 시스템 프롬프트를 사용해 타겟팅된 LLM 호출을 수행한다. 전체 LLM 최적화보다 가볍다. 규칙이 빡센 작업은 다 하고, LLM은 애매한 부분만 처리하니까.
복합 점수 0.40~0.85일 때 이쪽으로 라우팅됨.
3단계: 전체 LLM (최고 품질, 최고 비용) 컨텍스트를 인식하는 프롬프팅을 통해 LLM이 처음부터 끝까지 다시 쓴다. LLM 호출이 확실히 정당화되는 복잡하고 중요한 전문가급 프롬프트에만 사용한다.
복합 점수 ≥ 0.85일 때 이쪽으로 라우팅됨.
라우팅 점수:
composite = (context_weight × 0.5) + (sophistication × 0.3) + (load_factor × 0.2)
- 컨텍스트 가중치 (50%로 가장 중요): 컨텍스트 감지 신뢰도에서 나옴. 이미지 생성 신뢰도가 높으면 → LLM 단계로 가중치가 높아짐(창의적인 개선이 필요하니까). 구조화된 출력 신뢰도가 높으면 → 가중치가 낮아짐(규칙만으로 충분함).
- 정교함 (30%): 프롬프트 복잡도. "헬로 월드 생성해줘" → 기본. "RPO 제약 조건이 있는 다중 리전 장애 조치 아키텍처 설계해줘" → 전문가.
- 부하 계수 (20%): 시스템 부하. 부하가 심할 때는 LLM 단계에 해당할 법한 프롬프트라도 규칙/하이브리드 단계로 돌려버림.
신뢰도 폴백: 컨텍스트 감지 신뢰도가 0.6 미만이면, 다른 점수와 상관없이 무조건 규칙 단계로 폴백한다. 뭔지 확실하게 분류도 못 하는 프롬프트에 괜히 복잡한 최적화 돌리지 마라.
실제 적용 시:
일반적인 작업 부하 분포를 보면:
- ~40%는 규칙 단계로 라우팅 (빠르고, 공짜고, LLM 호출 없음)
- ~35%는 하이브리드 단계로 라우팅 (타겟팅된 LLM 호출 1회)
- ~25%는 전체 LLM 단계로 라우팅 (전체 최적화)
"그냥 다 GPT-4에 때려 박는" 방식과 비교하면, 전체 LLM 호출은 약 75% 줄어들고, 규칙 단계는 10ms 미만으로 끊기며(기존 1~3초 대비), 대규모 운영 시 비용이 획기적으로 줄어든다.
단점: 감지기랑 라우팅 로직을 직접 짜야 한다. 하지만 한번 만들어두면 확장성은 끝내준다. 라우팅 결정은 껌값이고, LLM 호출은 꼭 필요할 때만 하니까.
모델 독립적인 관점:

