⚡ 중급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은 여유 두고 설정 (과잉 청구 방지)