API 비용 계산기: Tokens, Cache, 요청량

공식과 Python 계산기를 사용해 input, output, cache write, cache read 비용을 세 가지 시나리오에서 추정합니다.

API 비용 계산기는 각 사용 범주에 현재 요금과 호출 수를 곱합니다. input, output, cache write, cache read는 따로 계산하고, 모든 요금은 같은 통화의 100만 tokens당 값으로 맞추세요. 알 수 없는 값을 조용히 0으로 바꾸면 안 됩니다. 먼저 기준 요청을 정의한 다음 호출량과 cache hit rate를 추가합니다.

계산기에 필요한 데이터

텍스트 API에는 다음 일곱 입력값이 필요합니다.

input_tokens_per_call output_tokens_per_call cache_write_tokens_per_miss cache_read_tokens_per_hit calls cache_hit_rate prices_per_1m_tokens

예측을 실제 호출과 대조하고 싶으신가요? BetterToken 계정과 API Key를 생성하고 가격 페이지에서 현재 요금을 가져와 제어된 요청 한 건을 실행하세요. 그 다음 Dashboard에서 모델, status, input, output, 해당 cache token, 소비량을 비교하면 수정할 가정을 바로 확인할 수 있습니다.

Caching은 모델과 프로토콜에 따라 달라집니다. 필드를 채우기 전에 BetterToken API reference, OpenAI Prompt Caching, Anthropic Prompt Caching을 확인하세요.

공통 공식

기호:

I — 일반 input tokens O — output tokens W — cache write / creation tokens R — cache read / cached tokens Pi — 100만 tokens당 input 가격 Po — 100만 tokens당 output 가격 Pw — 100만 tokens당 cache write 가격 Pr — 100만 tokens당 cache read 가격

호출 한 번의 비용:

C = I / 1_000_000 × Pi + O / 1_000_000 × Po + W / 1_000_000 × Pw + R / 1_000_000 × Pr + Cextra

Cextra에는 web search, 이미지, audio, storage, tools 등 별도 과금 단위가 포함됩니다. 없다면 값은 0입니다. 추가 요금 여부를 모른다면 필드를 미확인으로 남기고 문서를 확인하세요. 0은 거짓 정확도를 만듭니다.

수동 계산에서 가장 흔한 실수는 100만으로 나누는 것을 빼먹는 것입니다. 요금이 100만 tokens당이라면 먼저 tokens를 1_000_000으로 나누고 요금을 곱합니다.

복사 가능한 Python 계산기

이 스크립트에는 가격이나 API Key가 들어 있지 않습니다. 값을 입력받아 하나의 시나리오를 계산합니다. 결과 통화는 입력한 요금의 통화와 같습니다.

from decimal import Decimal, InvalidOperation MILLION = Decimal("1000000") def read_decimal(label: str, *, allow_empty: bool = False) -> Decimal: raw = input(label).strip().replace(",", ".") if allow_empty and raw == "": return Decimal("0") try: value = Decimal(raw) except InvalidOperation as exc: raise SystemExit(f"Invalid number for {label!r}") from exc if value < 0: raise SystemExit(f"Negative value is not allowed for {label!r}") return value input_tokens = read_decimal("Input tokens per call: ") output_tokens = read_decimal("Output tokens per call: ") cache_write_tokens = read_decimal("Cache write tokens per call: ") cache_read_tokens = read_decimal("Cache read tokens per call: ") calls = read_decimal("Number of calls: ") price_input = read_decimal("Input price per 1M tokens: ") price_output = read_decimal("Output price per 1M tokens: ") price_cache_write = read_decimal("Cache write price per 1M tokens: ") price_cache_read = read_decimal("Cache read price per 1M tokens: ") extra_per_call = read_decimal("Extra cost per call (empty = 0): ", allow_empty=True) per_call = ( input_tokens / MILLION * price_input + output_tokens / MILLION * price_output + cache_write_tokens / MILLION * price_cache_write + cache_read_tokens / MILLION * price_cache_read + extra_per_call ) total = per_call * calls print(f"Cost per call: {per_call:.8f}") print(f"Total cost: {total:.8f}")

코드를 api_cost_calculator.py로 저장한 다음 실행하세요.

python3 api_cost_calculator.py

현재 Endpoint가 이 범주를 분리해 주지 않는다면 cache write/read 필드에 실제 tokens를 넣지 마세요. 먼저 usage를 상호 배타적인 그룹으로 변환해 같은 token을 두 번 계산하지 않도록 합니다.

Cache hit rate 반영하기

연속된 요청은 cache hit와 miss를 분리하는 편이 편리합니다.

N — 총 호출 수 h — 0에서 1 사이의 cache hit rate Nhits — N × h Nmiss — N - Nhits Chit — cache read가 있는 호출 비용 Cmiss — hit가 없거나 cache write가 있는 호출 비용

결과:

Ctotal = Nhits × Chit + Nmiss × Cmiss + Cextra_total

계획할 때는 Nhits를 내림하고 Nmiss를 올림하세요. 실제 로그에서는 각 호출 유형의 실제 수를 사용합니다.

하나의 숫자 대신 세 가지 시나리오

기본 시나리오

최근 작업의 median input과 output, 예상 호출 수, 관측한 cache hit rate를 사용합니다. 이력이 없다면 값을 가정으로 표시하세요.

유리한 시나리오

안정적인 긴 prefix, 높은 cache hit rate, 제한된 output, 반복 오류 없음입니다. 하한을 보여 주지만 예산 약속이 되어서는 안 됩니다.

최악의 경우

cache miss, 긴 output, 한 번의 제한된 retry, 별도 과금 tools를 추가합니다. 모든 매개변수를 임의로 올리지 마세요. 각 가정은 실제 프로세스 위험에 대응해야 합니다.

결과는 간단한 시트에 기록합니다.

scenario, calls, hit_rate, input, output, write, read, extra, total base, ..., ..., ..., ..., ..., ..., ..., ... low, ..., ..., ..., ..., ..., ..., ..., ... high, ..., ..., ..., ..., ..., ..., ..., ...

Agent workflow 평가하기

화면에서 보이는 Agent 실행 한 번이 항상 모델 호출 한 번은 아닙니다. 내부에 planning, tool call, tool result, retry, 최종 응답이 있을 수 있습니다. 따라서:

  1. 안전한 테스트 작업을 하나 실행합니다.
  2. 실제 API 호출을 셉니다.
  3. 모델과 usage 범주별로 묶습니다.
  4. 각 그룹에 공식을 적용합니다.
  5. tool 또는 search 단위를 따로 더합니다.
  6. 금액을 Dashboard와 비교합니다.

요청 길이가 크게 다르면 임의의 한 호출 비용에 사용자 수를 곱하지 마세요. 짧은 질문, 파일 review, Agent 작업처럼 여러 작업 클래스를 계산하는 편이 낫습니다.

예측과 실제를 대조하는 방법

테스트 호출 후 다음을 대조하세요.

  • 시간과 request status;
  • Model ID;
  • input 및 output tokens;
  • cache 범주;
  • retries 수;
  • 실제 소비;
  • 통화와 가격 날짜.

차이는 대개 잘못된 요금, cached tokens의 이중 계산, 숨은 retry 또는 추가 과금 거래를 가리킵니다. BetterToken은 현재 가격 페이지를 사용하고 실제 Dashboard 기록을 확인하세요. 오래된 스크린샷이나 글의 가격을 옮기지 마세요.

계산기의 한계

공식은 알려진 범주만 다룹니다. 요금 변화, 미래 가격, dynamic routing, Agent 단계 수는 예측하지 않습니다. 이미지, audio, web search, storage, 일부 tools에는 고유 단위가 있을 수 있습니다.

또한 응답 품질도 평가하지 않습니다. 수동으로 다시 해야 하는 더 저렴한 호출은 전체 작업 비용을 높일 수 있습니다. 이는 만들어 낸 계수가 아니라 별도 실험으로 측정해야 합니다.

FAQ

Cache를 사용하지 않으면 무엇을 넣나요?

Endpoint가 실제로 cache를 사용하지 않은 경우에만 cache write와 cache read를 0으로 둡니다. 알 수 없는 값은 먼저 usage를 확인하세요.

결과는 어떤 통화로 표시되나요?

결과는 입력한 요금과 extra_per_call의 통화를 사용합니다. 명시적인 환율과 날짜 없이 달러와 루블을 섞지 마세요.

Cached tokens는 input tokens에 포함되나요?

특정 API의 usage 형식에 따라 다릅니다. 계산 전에 문서를 확인하고 필드를 상호 배타적인 범주로 변환해 이중 계산을 피하세요.

한 달 비용은 어떻게 계산하나요?

먼저 하나의 작업 클래스 비용을 계산한 뒤 실제 또는 예상 호출 수를 곱합니다. 다른 모델과 작업에는 별도 행을 만들고 합계를 더합니다.

실제 청구가 추정보다 높은 이유는 무엇인가요?

output, retries, Agent 단계, cache miss, 추가 tools를 확인하세요. 총계만 보지 말고 각 usage 행을 Dashboard와 대조하세요.

LLM 워크플로를 최적화할 준비가 되셨나요?

하나의 API로 모델을 연결하고 키와 AI 비용을 관리하세요.