k
korAI
중급 전체
중급2026-04-167분

토큰을 미리 계산해서 비용과 한계를 통제하기

실행 전 토큰 수를 알면 비용 예측, 한계 초과 방지, 컨텍스트 잘라내기가 가능하다.

apicost

왜 미리 세나

  • 비용 예측: 10,000개 문서 요약 전에 대략 비용을 계산
  • 한계 방지: Sonnet 4.6은 1M 토큰이지만 input이 너무 크면 캐시 못 타고 느려짐
  • 잘라내기: 긴 로그를 보낼 때 토큰 기준으로 꼬리를 자름

Anthropic 공식 카운터

import Anthropic from "@anthropic-ai/sdk"
const client = new Anthropic()

const count = await client.messages.countTokens({
  model: "claude-sonnet-4-6",
  system: "너는 요약 봇이다.",
  messages: [{ role: "user", content: longDoc }],
})

console.log("input 토큰:", count.input_tokens)
// 이 값 × $3/1M = 예상 입력 비용

빠른 근사값 (API 호출 없이)

  • 한국어: 1자 ≈ 1.5~2토큰
  • 영어: 1단어 ≈ 1.3토큰, 4자 ≈ 1토큰
  • 코드: 영어 평균보다 20% 더 많음 (기호 때문)

정확한 값이 필요하면 countTokens API 호출이 정답. 대략이면 위 근사로 충분.

실전: 긴 문서 잘라내기

async function trimToLimit(text: string, maxTokens: number) {
  const est = Math.ceil(text.length * 1.8) // 한국어 근사
  if (est <= maxTokens) return text

  // 절반 자르고 실제 측정, 이분탐색
  let lo = 0, hi = text.length, best = ""
  while (lo < hi) {
    const mid = (lo + hi + 1) >> 1
    const slice = text.slice(0, mid)
    const { input_tokens } = await client.messages.countTokens({
      model: "claude-sonnet-4-6",
      messages: [{ role: "user", content: slice }],
    })
    if (input_tokens <= maxTokens) { best = slice; lo = mid }
    else hi = mid - 1
  }
  return best
}

비용 계산 템플릿

  • Opus 4.7: 입력 $5 / 출력 $25 per 1M
  • Sonnet 4.6: 입력 $3 / 출력 $15 per 1M
  • Haiku 4.5: 입력 $1 / 출력 $5 per 1M
  • Prompt caching read: 90% 할인
  • Batch API: 50% 할인

체크리스트

  • [ ] 프로덕션 호출 전 countTokens로 견적
  • [ ] 200k 이상 input은 캐시 전략 필수
  • [ ] 근사식과 실측 오차 10% 이내 확인
  • [ ] max_tokens은 여유 두고 설정 (과잉 청구 방지)