1
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?

TypeScript / Python Agent SDK のトークン使用量フィールド実装比較

1
Posted at

Claude Agent SDK には、1 回のエージェント実行で消費したトークンを集計するためのフィールドが用意されています。本稿は、TypeScript SDK と Python SDK で同じ情報がどのフィールド名で、どの型のメッセージに現れるかを、実装者が読み替えられる粒度で突き合わせます。検証日は 2026-10-17 (JST)、出典はすべて公式ドキュメント 1 本です。

per-step(各ステップ)のトークン使用量

Claude の各 assistant メッセージには、そのステップのトークン内訳が付きます。TypeScript では message.message.usage、Python では message.usage から読めます (出典 [1])。per-model の集計は result メッセージの modelUsage に載ります。

Python の対応フィールドは AssistantMessage.usage と AssistantMessage.message_id(per-step 用)、per-model 集計は ResultMessage.model_usage です (出典 [1])。

output_tokens はプレースホルダー

per-step の output_tokens はプレースホルダーで、正確な出力トークン数は result メッセージから読む必要があります (出典 [1])。per-step で見える出力トークン数をそのまま合算してはいけません。

ID による重複排除

Claude が 1 ターンで複数のツールを並列使用すると、そのターンの全メッセージが同一の ID を共有します。ID で重複排除しないとトークンが二重カウントされます (出典 [1])。

all messages in that turn share the same ID, so deduplicate by ID to avoid double-counting

同一ターンのメッセージは同じ ID を持つので、ID で de-dup せよ、という意味です。

result メッセージの型

result メッセージの型は、TypeScript では SDKResultMessage、Python では ResultMessage です (出典 [1])。ここに実行全体の合計が集約されます。

modelUsage / model_usage はサブエージェントも数える

modelUsage(TS)/ model_usage(Python)は、トップレベルのループに加えてサブエージェントのリクエストもモデル別に数えます (出典 [1])。各エントリの costBasis は、そのモデルの最新リクエストをどの価格表で値付けしたか(list / managed / unknown)を示し、Claude Code v2.1.246 以降が必要です (出典 [1])。

コスト推定値の扱い

total_cost_usd と costUSD はクライアントサイドの推定値であり、権威ある請求データではありません (出典 [1])。

The total_cost_usd and costUSD fields are client-side estimates, not authoritative billing data.

Python では total_cost_usd はオプショナル型なので、読む前に None でないことを確認します (出典 [1])。

キャッシュトークンと TTL

cache_creation_input_tokens は新規キャッシュ作成に使われ標準入力トークンより高い料金、cache_read_input_tokens は既存キャッシュ読み出しで低い料金です (出典 [1])。Python の ResultMessage.usage dict では message.usage.get("cache_read_input_tokens", 0) でアクセスします (出典 [1])。

API キー認証時、または Amazon Bedrock・Google Cloud's Agent Platform・Microsoft Foundry・Claude Platform on AWS 上では、デフォルトのキャッシュ TTL は 5 分です (出典 [1])。ENABLE_PROMPT_CACHING_1H を設定すると書き込み TTL を 1 時間に延長できますが、1 時間 TTL の書き込みは 5 分 TTL より高い料金です (出典 [1])。

data residency pricing

レスポンスの usage が inference_geo: "us" を報告する場合、SDK はそのレスポンスのトークンのリスト価格を 1.1 倍します (出典 [1])。このサポートには TypeScript Agent SDK v0.3.239 以降、または Python Agent SDK v0.2.144 以降が必要です (出典 [1])。

セッションと予算のエッジケース

同一セッションを resume する呼び出しでは、以前のセッションの累計コストが result の total_cost_usd に含まれます (出典 [1])。streaming input mode では /clear・/reset・/new を送るたびに running total がリセットされ、query() 内でそれ以外にリセット要因はありません (出典 [1])。ただし Python SDK v0.2.137 以前は、リセット時に emit されるメッセージが iterator にドロップされていたため、アプリが送る /clear ターンを自力で数える必要があります (出典 [1])。

error_max_budget_usd のエラー結果では、usage は予算を超えたレスポンスを除外しますが、total_cost_usd と modelUsage はそれを含みます (出典 [1])。

References

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

1
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
1
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?