付録D トークンと料金の数え方
📖 このページのゴール:トークンの数え方と、1回いくらかかるかの感覚を持つ。 ← 目次・はじめにへもどる
第8章で「トークンあふれ」を学びました。あそこでは「だいたい何トークンか」をざっくり見積もるところまででした。この付録は、その 数え方のくわしい版 と、1回の会話でいくらかかるのか の感覚をつかむためのページです。
🧭 前提:このページでは LLM(文章を作るAI)を OpenAIのGPT、とくに
gpt-4o-mini(ジーピーティー・フォーオー・ミニ)を主役にして説明します。
🤔 トークンって?
トークン(token)は、文章を区切った 小さな断片 です。AIは文章を「文字」や「単語」ではなく、この断片の数で量を数えています。
- 英語:1単語が だいたい 1〜数トークン。短い語(
cat)は1つ、長い語(unbelievable)は何個かに割れます。 - 日本語:1文字で複数トークン になりがち。だから、同じ内容を書いても 日本語のほうがトークンを多めに食べます。
🧰 たとえ話:文章を細かいブロックに割る 文章を、レゴのように 小さなブロック に割っていくと想像してください。トークン数とは、そのときできた ブロックの個数 のこと。日本語は1文字でも何ブロックかに割れやすいので、ブロックが増えやすいのです。
📌 いちばん大事なのは、第8章でも出てきた「文字数 = トークン数 ではない」ということ。ここを勘違いすると、料金の見積もりがズレます。
🧮 数えてみる
まずは“ざっくり概算”
正確でなくてよいなら、文字数からの目安で十分です。
- 英語 … およそ 4文字で 1トークン
- 日本語 … 1文字で 1〜2トークン くらい(多めに見ておくと安全)
たとえば日本語で100文字なら、ざっくり 100〜200トークン くらい、と考えておけば「まだ余裕/そろそろ危ない」の判断には足ります。
正確に数えたいなら tiktoken
課金の計算など、きっちり数えたいときは 専用ライブラリ を使います。OpenAIなら tiktoken(ティックトークン)が定番です。
import { encoding_for_model } from "tiktoken";
const enc = encoding_for_model("gpt-4o-mini"); // モデルに合わせた数え方
const tokens = enc.encode("こんにちは、世界!"); // 文章 → トークンの配列
console.log(tokens.length); // ← 何トークンかが分かる
enc.free(); // 使い終わったら後片付け
1行ずつ読むと:
import { encoding_for_model } ...:tiktoken から「モデル名に合わせた数え方を作る道具」を読み込みます。encoding_for_model("gpt-4o-mini"):今回使うモデル用の ものさし を用意します(モデルごとに区切り方が違うため)。enc.encode("..."):文章を トークンの配列(断片のならび)に変換します。tokens.length:その配列の 長さ = トークン数 です。enc.free():このものさしが使ったメモリを 解放(後片付け)します。
💡 概算は「早めに気づく」ため、tiktoken は「お金を正しく計算する」ため。用途で使い分けます。
💰 料金の出し方
料金の基本の式は、これだけです。
入力トークン × 入力の単価 + 出力トークン × 出力の単価
ポイントは2つ。入力(送る分)と出力(返事の分)で単価が別 なこと、そして モデルごとに単価が違う ことです(出力のほうが高いのがふつう)。
⚠️ 単価は変わります。実際の金額は必ず OpenAI 公式の料金ページ(Pricing) で、使うモデルの最新の値を確認してください。
月いくら?の概算(数字は仮)
感覚をつかむために、仮の単価 で計算してみます(本物の金額ではありません)。
仮の単価(1,000トークンあたり):入力 $0.0002 / 出力 $0.0008
1リクエスト:入力 1,500トークン、出力 500トークン とすると
入力: 1,500 / 1,000 × $0.0002 = $0.0003
出力: 500 / 1,000 × $0.0008 = $0.0004
合計:約 $0.0007(1回ぶん)
1日 200回 使うと:$0.0007 × 200 ≒ $0.14 / 日
1か月(30日)では:$0.14 × 30 ≒ $4.2 / 月
このように 1回いくら → 1日何回 → 月いくら とかけ算していけば、おおよその規模が見えます。会話が長くなるほど「入力トークン」が増えて高くなる点に注意してください(第8章のとおり、毎回 過去の会話ぜんぶ を送り直すため)。
💡 安くするコツ
料金は「トークンを減らす」「単価の安いモデルを選ぶ」で下げられます。
- 文脈を短く保つ … 送る会話を必要な分だけに。古い話を全部は送らない。
- 要約してまとめる … 長い履歴は要約してギュッと縮める(→ 第9章)。
- プロンプトキャッシュを使う … 毎回同じ前文は、安く・速くできる仕組みを使う(→ 第13章)。
- 軽いモデルを選ぶ …
gpt-4o-miniのような 低価格モデル で足りる仕事は、それで済ませる。 - 出力に上限を付ける …
max_tokens(出力の上限)で返事を長くしすぎない。出力は単価が高めなので効果が大きいです。
⚠️ ハマりどころ
- 文字数とトークン数を同じだと思う … 別物です。とくに日本語は1文字で複数トークンになりがち。
- system や過去履歴を“タダ”だと思う … AIへの前提(system)も、これまでの全 messages も、ぜんぶ入力トークンとして課金 されます。
- 出力は無料だと思う … 返事(出力)にも、入力とは 別の単価で課金 されます(しかも高めなことが多い)。
- ドルと円を固定で考える … 単価はドル建てのことが多く、円換算は為替で動きます。月末にブレることがあります。
📝 ことばメモ
- トークン:文章を区切った小さな断片。AIが「量」を数える単位。日本語は1文字で複数になりがち。
- 入力トークン/出力トークン:送る分(system+全 messages)が入力、返事の分が出力。別々に課金 される。
- 単価:トークンあたりの値段。モデルごと、入力/出力ごとに違う。最新値は公式の料金ページで確認。
- max_tokens(マックストークンズ):返事(出力)の長さの上限。短くするほど出力ぶんの料金を抑えられる。