APIコスト計算機:Tokens、Cache、リクエスト数

計算式とPython計算機を使い、input、output、cache write、cache readの費用を3つのシナリオで見積もります。

APIコスト計算機は、各利用カテゴリに現在の料金と呼び出し数を掛けます。input、output、cache write、cache readは分けて計算し、すべての料金を同じ通貨の100万tokens当たりにそろえてください。不明な値を黙ってゼロに置き換えてはいけません。まず基準となるリクエストを定義し、その後に呼び出し数とcache hit rateを加えます。

計算機に必要なデータ

テキストAPIでは、次の7つを準備します。

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を作成し、価格ページから現在の料金を取り、管理された1件のリクエストを実行します。次にDashboardでモデル、status、input、output、該当するcache token、消費を比較すれば、修正すべき前提が分かります。

Cachingはモデルとプロトコルで異なります。入力前にBetterToken API referenceOpenAI Prompt CachingAnthropic 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価格

1回の呼び出しの費用:

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など別途課金される単位です。なければゼロです。追加料金があるか不明なら、未知のままドキュメントを確認してください。ゼロにすると誤った精度になります。

手計算で最も多いミスは100万で割り忘れることです。料金が100万tokens当たりなら、まずtokensを1_000_000で割り、それから料金を掛けます。

コピー可能なPython計算機

このスクリプトには料金もAPI Keyも含まれません。入力値を尋ね、1つのシナリオを計算します。結果の通貨は入力した料金と同じです。

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を切り上げます。実際のログでは各種類の実数を使ってください。

1つの数字ではなく3つのシナリオ

基本シナリオ

最近のタスクのinputとoutputの中央値、予想呼び出し数、観測済みのcache hit rateを使います。履歴がなければ、値を仮定として明記します。

好条件シナリオ

安定した長いprefix、高いcache hit rate、限定的なoutput、再発するエラーなしです。下限は示せますが、予算の約束にしてはいけません。

最悪ケース

cache miss、長いoutput、1回の制限付きretry、別途課金されるtoolsを加えます。全パラメーターを任意に増やさず、各仮定を実際のプロセスリスクに対応させます。

結果を簡単なシートに記録します。

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

Agent workflowの評価

画面上のAgent実行1回が、常にモデル呼び出し1回とは限りません。内部にplanning、tool call、tool result、retry、最終応答が含まれます。したがって:

  1. 安全なテストタスクを1つ実行する。
  2. 実際のAPI呼び出しを数える。
  3. モデルとusageカテゴリでグループ化する。
  4. 各グループへ式を適用する。
  5. toolまたはsearchの単位を別に追加する。
  6. 金額をDashboardと比較する。

リクエストの長さが大きく異なるなら、任意の1呼び出しの費用にユーザー数を掛けないでください。短い質問、ファイル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をゼロにします。不明なら先にusageを確認してください。

結果の通貨は何ですか?

結果は入力した料金とextra_per_callの通貨です。明示的な為替レートと日付なしにドルとルーブルを混在させないでください。

Cached tokensはinput tokensに含まれますか?

特定APIのusage形式によります。計算前にドキュメントを確認し、二重計上を避けるためフィールドを相互排他的なカテゴリに変換します。

月額費用はどう計算しますか?

まず1つのタスククラスの費用を計算し、実際または予測の呼び出し数を掛けます。モデルとタスクが異なる場合は別行にし、合計します。

実際の請求が見積もりより高いのはなぜですか?

output、retries、Agentステップ、cache miss、追加toolsを確認してください。合計だけでなく、各usage行をDashboardに対応付けます。

LLM ワークフローを最適化しませんか?

単一 API でモデルを接続し、キーと AI コストを管理できます。