トランスクリプトエントリでの最終トークン使用量の記録改善
原文(日本語に翻訳)
トランスクリプトエントリを改善し、ストリーミングのプレースホルダーではなく最終的なトークン使用量を保持するようになりました。
原文(英語)
Improved transcript entries to carry final token usage instead of streaming placeholders
概要
これまでトランスクリプトに記録されるトークン使用量は、ストリーミング中の中間値(プレースホルダー)が使われることがありました。今回の改善により、トランスクリプトエントリには応答完了後の正確な最終トークン使用量が記録されるようになりました。これにより、セッションのコストや使用量の分析がより正確に行えます。
基本的な使い方
特別な操作は不要です。トランスクリプトを出力・エクスポートすると、自動的に正確なトークン使用量が含まれるようになります。
bash
# トランスクリプトをエクスポート
/export transcript.json
# エクスポートされた JSON に正確なトークン使用量が含まれる
# {
# "role": "assistant",
# "content": "...",
# "usage": {
# "input_tokens": 1234, ← 正確な最終値
# "output_tokens": 567 ← 正確な最終値
# }
# }実践例
セッションのコスト分析
各会話のトークン使用量を正確に把握することで、コストの見積もりや最適化が可能になります。
bash
# トランスクリプトをエクスポートして分析
/export session-transcript.json
# Python でトークン使用量を集計
import json
with open('session-transcript.json') as f:
transcript = json.load(f)
total_input = sum(
entry.get('usage', {}).get('input_tokens', 0)
for entry in transcript
if entry.get('role') == 'assistant'
)
total_output = sum(
entry.get('usage', {}).get('output_tokens', 0)
for entry in transcript
if entry.get('role') == 'assistant'
)
print(f"入力トークン合計: {total_input}")
print(f"出力トークン合計: {total_output}")
# 改善後: 正確な値が表示される(改善前: プレースホルダー値が混在する場合があった)OTEL メトリクスとの連携
OTEL トレーシングと組み合わせることで、正確なトークン使用量をメトリクスとして記録できます。
bash
# OTEL 設定
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
export OTEL_SERVICE_NAME="claude-code"
# 正確なトークン使用量が OTEL スパンの属性として記録される
claude
# Grafana などで正確なトークン使用量のメトリクスを可視化長いセッションでのトークン追跡
複数のターンにわたる長いセッションでも、各ターンのトークン使用量が正確に記録されます。
bash
# セッションを通じて会話し、各ターンのトークンを追跡
claude
# 会話 1: 「このコードを解析してください」
# → usage: { input_tokens: 234, output_tokens: 456 }
# 会話 2: 「改善案を提案してください」
# → usage: { input_tokens: 890, output_tokens: 321 }
# 改善後: ストリーミング完了後の正確な値が各エントリに記録されるSDK を使ったトークン使用量の監視
Claude Code SDK を組み込んだアプリケーションでも、正確なトークン使用量を取得できます。
python
# SDK でのトランスクリプト取得例
import json
# /export で保存したトランスクリプトを読み込む
with open('transcript.json', 'r') as f:
data = json.load(f)
# 各アシスタントメッセージのトークン使用量を確認
for entry in data:
if entry.get('role') == 'assistant':
usage = entry.get('usage', {})
print(f"ターン: input={usage.get('input_tokens')}, output={usage.get('output_tokens')}")
# 改善後: 全エントリで正確な最終値が取得できる注意点
- この改善はトランスクリプトのデータに記録される値の精度向上です。UI 上のトークン表示への影響は別途確認してください。
- 過去のトランスクリプトファイル(この改善以前にエクスポートされたもの)の値は修正されません。
- ストリーミング中(応答生成中)は中間値が表示される場合がありますが、完了後のトランスクリプトには最終値が記録されます。
- トークン使用量は API の使用量として課金に影響するため、正確な値の記録はコスト管理において重要です。