Kunavo(AI APIゲートウェイ)の運営チームです。コード・執筆・翻訳にAIを使用し、以下の計算と6件のテストをローカルで確認しました。この記事は合成データと仮の単価を使う実装例です。顧客のログや実際の料金比較ではありません。
コーディングエージェントの1タスクには、複数のモデル呼び出し、修正、再試行が含まれます。APIリクエスト単価に加え、受け入れ条件を満たした成果物1件あたりの費用を追いたいときの、小さなオフライン集計器を作りました。
1. 分母を先に決める
サンプルには次の3件があります。
| ID | 種別 | 試行数 | 最終判定 |
|---|---|---|---|
| code-review-a | 作業 | 2 | 受け入れ |
| code-review-b | 作業 | 1 | 不採用 |
| healthcheck-a | 疎通確認 | 1 | 作業には含めない |
作業分のトークン費用は合計0.288ドル、疎通確認は0.000039ドルです。作業リクエスト3回で割ると0.096ドルですが、受け入れたタスクは1件なので、成果物あたりの作業費用は0.288ドルです。未採用の作業にも費用がかかっています。
この例の単価は説明用の仮定値です。現在のプロバイダー価格として使わないでください。
「受け入れ」はテスト合格、レビュー完了などアプリ側の基準です。HTTP 200を自動的に受け入れ判定にしません。受け入れ件数がゼロなら、この指標は null とします。
2. 入力を重複しない4区分にする
各試行を次の形に正規化します。
{
"uncached_input": 10000,
"cache_write": 40000,
"cache_read": 0,
"output": 1000
}
4項目はそれぞれ通常入力、キャッシュ書き込み、キャッシュ読み出し、出力です。キャッシュ書き込みを通常入力と重複計上しないようにします。
Anthropic Messagesでは input_tokens とキャッシュ作成・読み出しの値が別になっています。OpenAI形式では総入力とその詳細が返るため、該当する読み出し・書き込み分を総入力から引いて通常入力を求めます。ゲートウェイがすでに変換している場合もあるので、実際のエンドポイントの仕様で確認します。
集計器には正規化済みの値を渡します。フィールド名だけから形式を推測して変換する機能は入れていません。ストリーミングの累積usageを複数回足さず、1リクエストにつき最終的な使用量を1回記録します。
3. Decimalで費用を計算する
単価はドル/100万トークンに揃えます。計算の中心部分は以下です。
from decimal import Decimal
buckets = ("uncached_input", "cache_write", "cache_read", "output")
cost = sum(
Decimal(attempt[b]) * Decimal(str(prices[b])) / Decimal(1_000_000)
for b in buckets
)
完全版には入力検証、タスクごとの集計、疎通確認の分離、ゼロ件時の処理を含めています。
Python 3.9以上で、リポジトリのルートから実行できます。外部パッケージやAPIキーは不要で、ネットワークにもアクセスしません。
python3 agent-cost-audit/audit.py agent-cost-audit/example.json
python3 -m unittest discover -s agent-cost-audit -p "test_*.py"
確認した結果:作業試行3回、受け入れ1件、作業費用0.288ドル、疎通確認0.000039ドル。6件のテストでは、再試行・不採用分の費用保持、受け入れゼロ、入力ゼロ、不正なトークン数、非有限の単価、重複IDなどを確認しています。これは計算ロジックのテストであり、モデルの品質や実サービスの安定性の検証ではありません。
4. キャッシュ率も分母を揃える
タスクAの1回目は通常入力10,000、書き込み40,000、読み出し0。2回目は通常入力5,000、書き込み0、読み出し45,000です。
読み出し比率 = 全試行の読み出しトークン合計 / 全試行の入力トークン合計
= 45,000 / 100,000 = 45%
2回目だけを見ると90%ですが、タスク全体には初回の書き込みがあります。リクエストごとのパーセントを単純平均するより、トークン数で重み付けした値を使います。
5. 実データに置き換える際の境界
- タイムアウトでusageが欠けた場合、ゼロ料金と決めず請求記録を確認します。
- 失敗・再試行も、料金が発生した試行は含めます。
- この例は1ファイルにつき各区分1単価です。モデル、キャッシュTTL、料金階層が異なる場合は別々に計算し、後から費用を足します。同じタスクが複数モデルを使っても、受け入れ件数は重複させません。
- ツール実行、画像・動画・音楽、サーバーなどの費用は対象外です。必要に応じて別項目で加えます。
- API残高への入金額と、実際に作業で消費した金額を分けます。
まずは1件の典型的な作業と1件の不採用例を集計すると、追加試行がどこで増えるか、何を完了条件にするかを具体的に確認できます。
参考資料
usageの意味は2026-10-07時点の資料で確認しました。
Kunavoを利用する場合の接続手順は Clineの設定ガイド にまとめています。上のオフライン集計器は提供元に依存せず利用できます。