トークン使用量の理解:AI API課金の開発者ガイド
2026-05-18 — by Global API Team
トークン使用量の理解:AI API課金の開発者ガイド
「100万トークンあたり$0.25」は安く聞こえます——あなたのチャットボットが毎月2億トークンを消費しており、それを計画していなかったことに気づくまでは。
トークンベースの課金はAI APIの普遍的な価格モデルですが、驚きに満ちています:同じ英語の文が日本語では3倍のコストになり、コーディングタスクでの単純な「yes」が400トークンを消費し、推論モデルは目に見えない数千のトークンを静かに消費します。
このガイドでは、トークン使用量を理解し、コストを正確に見積もり、課金の驚きを回避するために必要なすべてを網羅します。
トークンとは正確には何か?
トークンはLLMが処理するテキストの最小単位です——おおよそ単語の断片です。「unbelievable」という単語は["un", "believe", "able"]の3つのトークンにトークン化される可能性があります。「cat」という単語は通常1トークンです。
トークン vs 文字数 vs 単語数
| テキスト | 文字数 | 単語数 | トークン数(GPTトークナイザー) | |------|-----------|-------|----------------------| | "Hello" | 5 | 1 | 1 | | "unbelievable" | 12 | 1 | 3 | | "The quick brown fox" | 19 | 4 | 4 | | "こんにちは"(日本語) | 5 | 1 | 5 | | "print('hello')" | 14 | 1 | 7 |
経験則:1トークン ≈ 0.75英単語 ≈ 4文字。ただし、これは言語やコンテンツの種類によって大きく異なります。
トークン化が請求書に重要な理由
異なるモデルは異なるトークナイザーを使用します。GPT-4oとDeepSeekはBPE(Byte-Pair Encoding)トークナイザーの変種を使用していますが、それらの語彙は異なります。GPT-4oで100トークンのプロンプトがDeepSeek V4 Flashでは120トークンになる可能性があります——これは数百万のリクエストにわたって複利で効いてくる20%の違いです。
AI APIがトークンを数えて課金する方法
すべてのAPI呼び出しは2つの数値に基づいて課金されます:
- 入力トークン:あなたが送信するすべて——システムプロンプト、会話履歴、ユーザーメッセージ
- 出力トークン:モデルが生成するすべて——停止シーケンスなどの見えないトークンを含む
課金計算式
コスト = (入力トークン × 入力レート) + (出力トークン × 出力レート)
Global API経由のDeepSeek V4 Flash(定額 $0.25/100万)の例:
プロンプト: 800トークン
レスポンス: 500トークン
合計: 1,300トークン
コスト = 1,300 × ($0.25 / 1,000,000) = $0.000325
小さく見えますよね?では規模を拡大しましょう:1日10万API呼び出し = $32.50/日 = $975/月。これはシステムプロンプト、会話履歴、推論トークンを含まない数字です。
Global APIが定額制を採用する理由
従来のAIプロバイダーは入力トークンと出力トークンに異なるレートを請求します(多くの場合、出力は3〜5倍高い)。これによりコスト見積もりが予測不能になります——呼び出し後に出力長が判明するからです。
Global APIはモデルごとに定額制を採用しています:入力と出力の両方のトークンに同じレートです。これによりコスト見積もりがシンプルになります:
| モデル | 定額 / 100万トークン | 1Kトークン呼び出しコスト | |-------|----------------------|-------------------| | GA-Economy | $0.125 | $0.000125 | | Qwen3-8B | $0.01 | $0.00001 | | DeepSeek V4 Flash | $0.25 | $0.00025 | | GLM-5 | $1.92 | $0.00192 | | MiniMax M2.5 | $1.15 | $0.00115 | | Kimi K2.5 | $3.00 | $0.003 |
トークンのカウント:ツールとコード
オプション1:tiktoken(Python)
送信前にトークンをカウントする最も正確な方法:
import tiktoken
# GPTファミリーのトークナイザー(ほとんどのOpenAI互換モデルで動作)
encoding = tiktoken.get_encoding("cl100k_base")
def count_tokens(text: str) -> int:
return len(encoding.encode(text))
# システムプロンプト
system = "You are a helpful assistant. Answer concisely."
print(f"System prompt: {count_tokens(system)} tokens")
# ユーザーメッセージ
user = "Explain quantum entanglement in simple terms."
print(f"User message: {count_tokens(user)} tokens")
# 会話履歴
history = [
{"role": "system", "content": system},
{"role": "user", "content": user},
{"role": "assistant", "content": "Imagine two coins that always land the same way..."},
{"role": "user", "content": "Can we use this for communication?"},
]
total = sum(count_tokens(m["content"]) for m in history)
print(f"Full conversation: {total} tokens")
オプション2:JavaScript(js-tiktoken)
import { encodingForModel } from "js-tiktoken";
const enc = encodingForModel("gpt-4");
function countTokens(text) {
return enc.encode(text).length;
}
const messages = [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "What is a token in LLM APIs?" },
];
let total = 0;
for (const msg of messages) {
// OpenAIはメッセージごとにフォーマット用に約4トークンを追加
total += countTokens(msg.content) + 4;
}
total += 2; // プライマートークン
console.log(`Estimated tokens: ${total}`);
オプション3:ビルトイン使用量データ(最も信頼性が高い)
すべてのAPIレスポンスには実際のトークン数が含まれています:
import openai
client = openai.OpenAI(
api_key="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
base_url="https://global-apis.com/v1",
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "Hello"}],
)
usage = response.usage
print(f"Prompt tokens: {usage.prompt_tokens}")
print(f"Completion tokens: {usage.completion_tokens}")
print(f"Total tokens: {usage.total_tokens}")
開発者が驚く隠れたトークンコスト
1. システムプロンプト税
毎回のリクエストで送信される500トークンのシステムプロンプトはすぐに積み上がります:
500トークン × 10万リクエスト/日 × 30日 = 月間15億トークン
$0.25/100万トークンの場合:$375/月 — システムプロンプトだけで。
対策:システムプロンプトを100トークン未満に保ちます。簡潔な指示を使用します。必要な場合のみ展開するテンプレートベースのシステムプロンプトを検討します。
2. 会話履歴の蓄積
会話の各ターンで完全な履歴が次のリクエストに追加されます:
ターン1: 100トークン(ユーザー) + 200トークン(アシスタント) = 300トークン
ターン2: 300(履歴) + 100(新規ユーザー) + 300(アシスタント) = 700トークン
ターン3: 700 + 100 + 300 = 1,100トークン
ターン10: 3,100 + 100 + 300 = 3,500トークン
10ターン後、各リクエストのコストは最初の10倍になります。
対策:履歴を直近Nターンに制限します。古いメッセージを安価なモデルで要約します:
def trim_history(messages: list[dict], max_turns: int = 6) -> list[dict]:
"""直近N組のユーザー-アシスタントペアのみを保持します。"""
# システムメッセージは常に保持
system = [m for m in messages if m["role"] == "system"]
# 直近N件の非システムメッセージを保持
non_system = [m for m in messages if m["role"] != "system"]
recent = non_system[-(max_turns * 2):]
return system + recent
3. 推論トークンのオーバーヘッド(DeepSeek R1、o1、QwQ)
推論モデルは最終的な回答を生成する前に内部の「思考」トークンを生成します。これらは使用量にカウントされますが、多くの場合APIレスポンスから隠されています:
# Global API経由のDeepSeek R1
response = client.chat.completions.create(
model="deepseek-r1",
messages=[{"role": "user", "content": "Solve this: 345 × 678"}],
)
# レスポンスは50トークンの可視出力に見えるかもしれませんが、
# モデルは内部的に2,000以上の推論トークンを消費しました
print(f"Billed tokens: {response.usage.total_tokens}")
# 課金トークン: 2,312 — 50ではありません!
ルール:推論モデルは、タスクが本当に必要な場合にのみ使用します。単純な計算には標準モデルを使用します。R1はマルチステップロジックや難しい問題のために取っておきます。
4. 非英語言語
LLMは非英語テキストを効率的にトークン化できません:
| テキスト | 言語 | トークン数 | |------|----------|--------| | "Hello, how are you today?" | 英語 | 7 | | "こんにちは、今日はお元気ですか?" | 日本語 | 15 | | "你好,你今天好吗?" | 中国語 | 13 | | "Привет, как дела сегодня?" | ロシア語 | 18 |
中国語のチャットボットは英語のものより1メッセージあたり約2倍のコストがかかります。多言語ユーザーに対応する場合は、それに応じて予算を組みます。
トークンコスト見積もりツールの構築
導入前に使用できる完全なコスト見積もりツールです:
# cost_estimator.py
import tiktoken
MODEL_PRICING = {
# 定額制(Global API) — $/100万トークン
"deepseek-v4-flash": 0.25,
"deepseek-v3.2": 0.378,
"deepseek-r1": 2.50,
"qwen3-235b-a22b": 1.82,
"qwen3-8b": 0.01,
"glm-5": 1.92,
"glm-4-9b": 0.01,
"kimi-k2.5": 3.00,
"minimax-m2.5": 1.15,
"ga-economy": 0.125,
"ga-standard": 0.20,
"ga-express": 0.25,
}
def estimate_monthly_cost(
model: str,
daily_requests: int,
avg_prompt_tokens: int,
avg_completion_tokens: int,
) -> dict:
"""予想される使用量に基づいて月間APIコストを見積もります。"""
rate = MODEL_PRICING.get(model, 0.50)
total_tokens_per_call = avg_prompt_tokens + avg_completion_tokens
daily_tokens = daily_requests * total_tokens_per_call
monthly_tokens = daily_tokens * 30
cost_per_call = (total_tokens_per_call / 1_000_000) * rate
monthly_cost = (monthly_tokens / 1_000_000) * rate
return {
"model": model,
"rate_per_million": rate,
"daily_requests": daily_requests,
"avg_tokens_per_call": total_tokens_per_call,
"cost_per_call": round(cost_per_call, 6),
"daily_tokens": daily_tokens,
"monthly_tokens": monthly_tokens,
"monthly_cost": round(monthly_cost, 2),
}
# 例:カスタマーサポートチャットボット
result = estimate_monthly_cost(
model="deepseek-v4-flash",
daily_requests=5000,
avg_prompt_tokens=600,
avg_completion_tokens=300,
)
print(f"Model: {result['model']}")
print(f"Cost per call: ${result['cost_per_call']}")
print(f"Monthly cost: ${result['monthly_cost']}")
# Model: deepseek-v4-flash
# Cost per call: $0.000225
# Monthly cost: $33.75
モデルを横並びで比較
def compare_models(daily_requests: int, prompt_tokens: int, completion_tokens: int):
"""モデル間の月間コストを比較します。"""
print(f"{'Model':<25} {'Rate/M':>8} {'$/Call':>8} {'$/Month':>10}")
print("-" * 55)
for model, rate in sorted(MODEL_PRICING.items(), key=lambda x: x[1]):
result = estimate_monthly_cost(model, daily_requests, prompt_tokens, completion_tokens)
print(
f"{model:<25} ${rate:>6.3f} "
f"${result['cost_per_call']:>7.5f} "
f"${result['monthly_cost']:>9.2f}"
)
# 10,000リクエスト/日、500プロンプト + 300出力
compare_models(10000, 500, 300)
出力例:
Model Rate/M $/Call $/Month
-------------------------------------------------------
qwen3-8b $0.010 $0.00001 $2.40
glm-4-9b $0.010 $0.00001 $2.40
ga-economy $0.125 $0.00010 $30.00
ga-standard $0.200 $0.00016 $48.00
deepseek-v4-flash $0.250 $0.00020 $60.00
ga-express $0.250 $0.00020 $60.00
deepseek-v3.2 $0.378 $0.00030 $90.72
minimax-m2.5 $1.150 $0.00092 $276.00
qwen3-235b-a22b $1.820 $0.00146 $436.80
glm-5 $1.920 $0.00154 $460.80
deepseek-r1 $2.500 $0.00200 $600.00
kimi-k2.5 $3.000 $0.00240 $720.00
最も安価なもの($2.40/月)と最も高価なもの($720/月)の差は300倍です。タスクに適したモデルを選択することが、AIコストに対する最大のレバレッジです。
3つの一般的な課金シナリオ(と実際のコスト)
シナリオ1:週末プロジェクトのチャットボット
モデル: DeepSeek V4 Flash ($0.25/100万)
使用量: 50会話/日、各平均8ターン
ターン: system(200) + user(100) + assistant(300) = 平均600
合計: 50 × 8 × 600 = 240,000トークン/日 = 720万/月
コスト: 7.2 × $0.25 = $1.80/月
判定: クレジットカードの明細で気づくことはないでしょう。
シナリオ2:SaaSプロダクト(1万DAU)
モデル: GA-Standard ($0.20/100万)
使用量: 10,000ユーザー、各平均5クエリ
ターン: system(300) + history(500) + user(200) + assistant(400) = 平均1,400
合計: 50,000 × 1,400 = 7,000万トークン/日 = 21億/月
コスト: 2,100 × $0.20 = $420/月
判定: 妥当です。キャッシングを追加すれば約$250に削減できます。
シナリオ3:AIコーディングアシスタント(1万人の開発者)
モデル: MiniMax M2.5 ($1.15/100万) + Kimi K2.5 ($3.00/100万)
使用量: 10,000開発者、各20リクエスト
構成: 70% M2.5(単純)、30% K2.5(複雑)
ターン: 平均1,200(コードのコンテキストが多い)
合計: 200,000 × 1,200 = 2.4億トークン/日 = 72億/月
コスト (M2.5): 5,040 × $1.15 = $5,796
コスト (K2.5): 2,160 × $3.00 = $6,480
合計: $12,276/月
判定: 重要です。階層型ルーティング + セマンティックキャッシュを検討してください。
今日すぐできるトークン使用量削減の即効策
- システムプロンプトを削減 — 削減した100トークンごとに、100 × リクエスト数 × 30日分の課金トークンが減少します
- 会話履歴を制限 — チャット全体を送信せず、直近6ターンを保持します
max_tokensを使用 — 出力トークンを制限して、暴走レスポンスが予算を圧迫するのを防ぎます- エンドポイントごとに使用量を追跡 — API呼び出しにメタデータをタグ付けして、どの機能がトークンを消費しているか特定します
- モデルを適切に選定 — 「hello world」にはKimi K2.5は必要ありません
キャッシング、プロンプト圧縮、階層型ルーティングを含む完全なコスト最適化戦略については、マルチモデルコスト最適化ガイドをご覧ください。
トークン使用量の追跡を始めましょう
Global APIは、リアルタイムのトークン使用量ダッシュボード、モデル別コスト追跡、コスト見積もりを予測可能にする定額制を提供します。驚きはありません。
- 登録 — 100無料クレジット — クレジットカード不要
- 全料金ページ
- APIドキュメント