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?

Agent SDK でエージェント実行コストを追跡する

0
Posted at

Agent SDK は各 query() の結果メッセージにコスト情報を載せます。ただしその数字は請求データそのものではなく、二重計上・過小計上・ゼロ化といった落とし穴があります。本稿は 2026-09-16 時点の公式ドキュメントで検証済みの仕様に絞り、コストを正しく読み取り集計するための要点を整理します。

コスト値の性質とローカル計算

total_cost_usd と costUSD はクライアントサイドの推計値であり、正式な請求データではありません。SDK はビルド時にバンドルされた価格テーブルからこれらの値をローカルで計算します。したがって表示される金額は目安であり、確定金額は別途の請求データで確認する前提で扱います。

データレジデンシー課金

レスポンスの usage に inference_geo: "us" が報告される場合、SDK はそのレスポンスのトークン定価に 1.1 を乗算します。この対応には TypeScript Agent SDK v0.3.239 以降、または Python Agent SDK v0.2.144 以降が必要です。

トークン集計の注意点

Claude が 1 ターンで複数のツールを並列使用すると、そのターンの全メッセージが同一の ID を共有します。ID で重複排除しないとトークン集計が水増しされます。また、アシスタントメッセージの per-step output_tokens はプレースホルダーであり、正確な出力トークン数はリザルトメッセージから読み取る必要があります。

サブエージェントと集計

サブエージェント(ネスティング)が存在する場合、usage フィールドはトークンを過小計上します。一方 total_cost_usd はサブエージェントのリクエストをトップレベルのループと合算して計上します。金額はサブエージェント込み、usage のトークン数は本体のみ、という非対称に注意します。

modelUsage と costBasis

リザルトメッセージの modelUsage フィールドは、モデル名をキーとし、モデルごとのトークン数とコストをマッピングするオブジェクトです。各エントリは costBasis フィールド(値は list / managed / unknown)を持ちますが、このフィールドは Claude Code v2.1.246 以降でのみ利用可能です。

プロンプトキャッシング

Agent SDK はプロンプトキャッシングを自動的に使用するため、手動でキャッシュを設定する必要はありません。usage オブジェクトには cache_creation_input_tokens(標準入力トークンより高い料金)と cache_read_input_tokens(割引料金)の 2 フィールドが含まれます。

API キー認証、Amazon Bedrock、Google Cloud の Agent Platform、Microsoft Foundry、AWS 上の Claude Platform で実行する場合、キャッシュエントリのデフォルト TTL は 5 分です。環境変数 ENABLE_PROMPT_CACHING_1H を設定すると書き込み TTL を 1 時間に延長できますが、1 時間 TTL の書き込みは 5 分 TTL より高い料金で課金されます。TTL はメインの会話が CLAUDE_CODE_PROMPT_CACHE_TTL(または promptCacheTtl)、それ以外が CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL(または subagentPromptCacheTtl)で制御できます。

エラー時と予算リセット

セッションクラッシュ時に発行される error_during_execution リザルトでは、全コストフィールドがゼロになる可能性があります。error_max_budget_usd エラー時は、usage フィールドは予算を超過したレスポンスを除外しますが、total_cost_usd と modelUsage はそのレスポンスを含みます。

streaming input モードで /clear を送信すると running total がリセットされ、maxBudgetUsd(Python では max_budget_usd)の予算カウントも同時にリセットされます。Python SDK v0.2.137 より前では ConversationResetMessage がイテレータから欠落するため、/clear ターンの回数を自前でカウントする必要があります。

セッション合計の自前集計

SDK はセッション全体の累計コストを提供しません。複数の query() 呼び出しにわたるコストは、アプリケーション側で自前集計する必要があります。

References

[1] https://code.claude.com/docs/en/agent-sdk/cost-tracking

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?