본문 바로가기
AI2026년 5월 6일7분 읽기

LLM 추론 비용 최적화 — 캐싱·배치·라우팅으로 70% 절감하는 7가지 기법

YS
김영삼
조회 540
LLM 추론 비용 최적화 — 캐싱·배치·라우팅으로 70% 절감하는 7가지 기법

핵심 요약

월 $10,000 LLM 비용을 $3,000으로 줄였던 7가지 기법을 정리. 모두 정확도 손실 없이 적용 가능.

1. 프롬프트 캐싱 — 가장 큰 효과

긴 시스템 프롬프트·지식베이스를 캐시. Anthropic·OpenAI 둘 다 90% 할인.

const res = await client.messages.create({
  model: 'claude-opus-4-7',
  system: [
    { type: 'text', text: '당신은 시니어 개발자.' },
    { type: 'text', text: HUGE_KB, cache_control: { type: 'ephemeral' } },
  ],
  messages: [...],
})
비용일반캐시 쓰기캐시 히트
Claude Opus 4.7$5/M$6.25/M (1.25x)$0.50/M (0.1x)

핵심: 동일 시스템 프롬프트를 5분 안에 5번 호출하면 첫 번째만 풀 비용, 나머지는 10%. 5번 호출 시 평균 28%만 지불.

2. Batch API — 50% 할인

실시간 응답 안 필요한 작업은 Batch로 제출 → 24시간 내 결과 + 50% 할인.

// OpenAI Batch API
const batch = await openai.batches.create({
  input_file_id: file.id,
  endpoint: '/v1/chat/completions',
  completion_window: '24h',
})

// Anthropic Message Batches
const batch = await anthropic.messages.batches.create({
  requests: [
    { custom_id: 'r1', params: { model: 'claude-sonnet-4-7', ... } },
    ...
  ],
})

적합한 워크로드: 대량 분류, 임베딩, 요약, 데이터 정제, 백오피스 분석.

3. 모델 라우팅 — 작업별 최저가 모델

function routeModel(task: Task) {
  // 1. 정형화된 분류 — Haiku로 충분
  if (task.type === 'classify' && task.tokens < 1000) {
    return 'claude-haiku-4-5'  // $0.80/M
  }
  // 2. 일반 코딩 — Sonnet
  if (task.type === 'code') return 'claude-sonnet-4-7'  // $3/M
  // 3. 복잡 추론·대형 컨텍스트 — Opus
  return 'claude-opus-4-7'  // $5/M
}

실제 수치: 분류 작업의 60%를 Haiku로 보내자 비용 −42%·정확도 −0.3%p.

4. 출력 길이 강제

출력 토큰이 입력보다 5배 비싸다(Anthropic·OpenAI 평균). 출력 한도를 명시하면 절약.

// 안티패턴
"이 코드를 분석하고 설명해줘"  // 평균 800 토큰 출력

// 권장
"이 코드를 5줄 이내로 핵심만 설명해줘"  // 평균 120 토큰
// 또는 max_tokens 강제
{ max_tokens: 200 }

또한 JSON 모드/Structured Outputs로 형식 고정 — 부가 토큰 제거.

5. 컨텍스트 줄이기 — RAG 정제

"전체 문서 100만 토큰 통째 → 1M 컨텍스트로 답하기"는 비싸다. RAG로 관련 5K 토큰만 골라서 보내면 비용 200분의 1.

// 안티패턴
const allDocs = await loadAllDocs()  // 100만 토큰
ask(model, query, allDocs)

// 권장 — 임베딩 검색 후 상위 5개
const top5 = await vectorSearch(query, 5)  // ~5K 토큰
ask(model, query, top5)

6. 프롬프트 압축

같은 의도를 더 짧게. 평균 30% 단축 가능.

안티패턴권장
"당신은 매우 친절하고 정확한 어시스턴트입니다. 다음 작업을 신중하게 수행해주세요.""정확하게 답한다."
"---"·이모지·과도한 마크다운최소 마크다운
예시 10개다양한 예시 3개 (실측 후)

도구: llmlingua·microsoft/LLMLingua — 의미 보존 압축 라이브러리.

7. 캐시 가능한 응답은 자체 캐시

같은 질문이 반복되면 LLM에 또 보내지 말고 자체 캐시. Redis·DynamoDB로.

const key = sha256(model + system + JSON.stringify(messages))
const cached = await redis.get(key)
if (cached) return JSON.parse(cached)

const res = await llm.complete({ ... })
await redis.set(key, JSON.stringify(res), 'EX', 3600)
return res

한국어 자주 묻는 질문(FAQ) 챗봇에서 캐시 히트율 35%, 비용 −34%.

8. 비용 모니터링 — 실시간 알람

// Anthropic Console·OpenAI Usage Dashboard에서
//  - 일/주/월 한도 알람 설정
//  - 모델별 사용량 분리

// 코드 측 — 토큰 카운터 미들웨어
async function withMetrics(fn: () => Promise<Response>) {
  const start = Date.now()
  const r = await fn()
  metrics.histogram('llm.input_tokens', r.usage.input_tokens)
  metrics.histogram('llm.output_tokens', r.usage.output_tokens)
  metrics.timing('llm.latency_ms', Date.now() - start)
  return r
}

9. 효과 적용 순서 — 우선순위

기법난이도예상 절감
프롬프트 캐싱20~50%
모델 라우팅20~40%
Batch API30~50% (해당 작업만)
출력 길이 제한10~20%
RAG 정제50~95%
프롬프트 압축10~30%
응답 캐시20~40% (반복 쿼리)

10. 안티패턴

  • "항상 가장 비싼 모델" — Haiku로 충분한 분류에도 Opus
  • "무한 컨텍스트 = 좋다" — 1M 채우면 비용·지연·정확도 모두 손해
  • "캐시 한 번 설정하면 끝" — 5분 TTL이라 호출 패턴이 흩어지면 무효
  • "실시간 응답 강박" — 백오피스 작업의 90%는 Batch로 가능

참고

  • docs.anthropic.com/en/docs/build-with-claude/prompt-caching
  • platform.openai.com/docs/guides/batch

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록