0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLMエージェントの「完了した1タスク」の費用をPythonで集計する

0
Posted at

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の設定ガイド にまとめています。上のオフライン集計器は提供元に依存せず利用できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?