
「トークン」って何? AIと話すために知っておきたい、言葉の単位の話
「トークン」って何? AIと話すために知っておきたい、言葉の単位の話
はじめに:「トークン数が上限に達しました」の正体
ChatGPTやClaudeを使っていて、こんなメッセージを見たことはないでしょうか。
「トークン数の上限に達しました」 「このモデルは最大○○トークンまで対応しています」
私も最初にこれを見たとき、「トークンって何だろう?文字数とは違うのかな?」と思いました。実際、業務でAIを使い始めたエンジニアの方から、この質問をよく受けます。
今日は、この「トークン」という概念について、できるだけ噛み砕いてお話ししようと思います。理論的な説明だけでなく、実際に開発で使ってきた中で「ここは知っておくと助かる」と感じた部分も含めてお伝えできればと思っています。
そもそも「トークン」とは何か
AIにとっての「言葉の単位」
私たち人間は、文章を「文字」や「単語」の集まりとして認識しています。「こんにちは」なら5文字、英語の「Hello」なら5文字、という具合ですね。
でも、AIはちょっと違う方法で文章を理解しています。AIは文章を「トークン」という単位に分解して処理しているんです。
トークンは、簡単に言うと「AIが文章を読むときの最小単位」です。ただし、この単位は文字でも単語でもなく、その中間くらいのものだと思ってください。
具体例で見てみましょう
英語の場合、だいたいこんな感じです:
- 「Hello」→ 1トークン
- 「ChatGPT」→ 2〜3トークン(「Chat」「G」「PT」のように分かれることがある)
- 「I love programming」→ 3トークン
日本語の場合は、もう少し複雑になります:
- 「こんにちは」→ 2〜5トークン(モデルによって異なる)
- 「人工知能」→ 2〜4トークン
- 「東京都渋谷区」→ 4〜6トークン
「なんでこんなにバラバラなの?」と思いますよね。これには理由があります。
なぜ「文字数」ではなく「トークン」なのか
AIの学習方法と関係している
AIのモデル(たとえばGPT-4やClaudeの中身)は、大量のテキストデータを学習して作られています。このとき、文章をどう分割するかが重要になります。
1文字ずつ分割すると、処理するデータ量が膨大になります。かといって単語ごとに分割すると、「プログラミング」と「プログラマー」を別物として扱うことになり、効率が悪い。
そこで考え出されたのが、「よく出てくるパターンはまとめて1つの単位にして、珍しいパターンは細かく分ける」という方法です。これが現在のトークン化の基本的な考え方です。
専門用語を避けて言い換えると
AIは「この文字の並びはよく見るから、ひとまとめに覚えておこう」という判断をしています。
英語の「the」や「and」は頻繁に出てくるので、1トークンになります。でも、「Supercalifragilisticexpialidocious」(メリー・ポピンズの歌に出てくる長い単語)のような珍しい単語は、細かく分割されて複数トークンになります。
日本語は、英語に比べると学習データが少ないこともあり、1つの言葉が複数のトークンに分かれやすい傾向があります。これは後で実務上の注意点として触れます。
「コンテキストウィンドウ」という考え方
AIが一度に見られる範囲
トークンを理解すると、もう一つ重要な概念が見えてきます。それが「コンテキストウィンドウ」です。
コンテキストウィンドウとは、AIが一度の会話で扱えるトークンの総量のことです。これには、あなたが入力した文章(プロンプト)と、AIが返す回答の両方が含まれます。
例えば、GPT-4 Turboのコンテキストウィンドウは128,000トークンです。これは、おおよそ日本語で5〜8万文字くらいに相当します(あくまで目安ですが)。
実務でよくある場面
私が実際に困ったのは、長い仕様書をAIに読ませようとしたときでした。
「この仕様書を読んで、問題点を指摘して」とお願いしたら、途中で切れてしまったんです。仕様書が50ページもあったので、コンテキストウィンドウを超えてしまっていたんですね。
結局、仕様書を章ごとに分割して、順番に質問することで解決しました。こういうとき、「トークン」という概念を知っているかどうかで、問題の原因がすぐわかるかどうかが変わってきます。
日本語とトークン:知っておきたい特性
日本語は英語より「高コスト」
これは正直に書いておきたいのですが、日本語は英語に比べて、同じ内容を伝えるのに多くのトークンを消費します。
感覚的な目安としては:
- 英語:1トークン ≒ 4文字(平均)
- 日本語:1トークン ≒ 1〜2文字(平均)
つまり、同じ文章量でも、日本語のほうが2〜3倍のトークンを使うことがあります。
これは、AIの学習データに英語が多く含まれていることや、日本語の文字体系が複雑であることが原因です。漢字、ひらがな、カタカナが混在しているので、パターンの学習が難しいんですね。
実務での影響
APIを使ってAIサービスを構築する場合、料金は基本的にトークン数で計算されます。つまり、日本語のサービスは、英語のサービスよりコストが高くなりやすい。
これは私たちのチームでも課題になりました。日本語でのチャットボットを作ったとき、想定よりAPIコストが高くなったんです。原因を調べたら、トークン消費量が見積もりの2倍近くになっていました。
事前に「日本語は高コスト」と知っていれば、見積もりの段階で調整できたかもしれません。
トークン数を意識したプロンプトの書き方
効率的な指示の出し方
トークンを意識すると、プロンプト(AIへの指示文)の書き方も変わってきます。
例えば、こんな指示を考えてみましょう:
冗長な例:
あなたは優秀なプログラマーです。私はプログラミングの初心者で、
Pythonについてあまり詳しくありません。今日はPythonの
リスト内包表記について教えてください。リスト内包表記というのは、
リストを作成するための簡潔な書き方だと聞いています。
具体的な例を使って、初心者にもわかりやすく説明してください。
簡潔な例:
Pythonのリスト内包表記を、初心者向けに具体例付きで説明してください。
どちらも同じ意図を伝えていますが、トークン数は大きく違います。冗長な例は100トークン近く使っていますが、簡潔な例は20トークン程度です。
ただし、簡潔すぎても問題がある
ここは正直に書いておきます。「トークンを節約しよう」と思って指示を短くしすぎると、AIの回答の質が下がることがあります。
必要な文脈や条件を省略してしまうと、AIは「何を求められているのか」を正確に理解できません。結果として、期待とは違う回答が返ってきて、やり直しが発生する。そうなると、かえってトークンを無駄にしてしまいます。
私の経験では、「必要な情報は過不足なく、でも無駄な装飾は省く」くらいのバランスが良いと感じています。これは文章を書く技術と似ているかもしれません。
トークン数を確認する方法
開発者向けのツール
実際に自分の文章が何トークンになるか、確認したいときがありますよね。いくつか方法があります。
OpenAIのTokenizer(公式ツール)
OpenAIが提供しているWebツールで、テキストを入力するとトークン数と、どこで分割されているかを視覚的に確認できます。URLは「platform.openai.com/tokenizer」で検索すると見つかります。
Pythonライブラリ「tiktoken」
プログラムからトークン数を計算したい場合は、tiktokenというライブラリが便利です。
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-4")
text = "こんにちは、今日は良い天気ですね。"
tokens = encoding.encode(text)
print(f"トークン数: {len(tokens)}")
このコードを実行すると、指定したテキストのトークン数がわかります。
実務でのチェックポイント
私がプロダクト開発で気をつけているのは、以下の点です:
- ユーザー入力の上限設定:フォームに入力できる文字数を制限して、トークン数が想定内に収まるようにする
- システムプロンプトの最適化:AIの振る舞いを定義するシステムプロンプトは、一度設定したら毎回送信されるので、ここを効率化すると効果が大きい
- 会話履歴の管理:長い会話になると、過去のやり取りもトークンを消費するので、古いものから削除するロジックを入れておく
トークンと料金の関係
APIの料金体系
OpenAIやAnthropicなどのAPIを使う場合、料金はトークン数で計算されます。しかも、「入力トークン」と「出力トークン」で単価が違うことが多いです。
例えば、2024年時点でのGPT-4 Turboの料金は:
- 入力:$10 / 100万トークン
- 出力:$30 / 100万トークン
出力のほうが3倍高いんですね。これは、AIが文章を生成するほうが、読み取るよりも計算コストがかかるからです。
コスト最適化の考え方
実務でコストを抑えるために、私たちが試行錯誤してきたことをいくつか共有します。
1. モデルの使い分け
すべてのリクエストに最高性能のモデルを使う必要はありません。簡単な質問にはGPT-3.5を、複雑な分析にはGPT-4を、というように使い分けると、コストを大幅に削減できます。
私たちのプロダクトでは、まず軽いモデルで処理して、難しそうな場合だけ重いモデルにエスカレーションする仕組みを作りました。これでコストが40%くらい下がりました。
2. キャッシュの活用
同じ質問には同じ回答を返せばいいので、よくある質問はキャッシュしておく。当たり前のことですが、意外と見落としがちです。
3. 出力の長さを制御する
APIには「max_tokens」というパラメータがあり、出力の最大トークン数を指定できます。不必要に長い回答を防ぐことで、コストと応答時間の両方を改善できます。
よくある疑問と誤解
Q: トークン数と文字数は比例するの?
比例はしますが、完全な比例ではありません。
使う言語、単語の種類、記号の有無などによって変わります。数字や英語が混じった日本語は、純粋な日本語より効率が良かったりします。逆に、特殊な記号や絵文字は、見た目は1文字でも複数トークンになることがあります。
Q: トークン数を減らせば、回答の質も下がる?
必ずしもそうではありません。
重要なのは「必要な情報を過不足なく伝えること」です。無駄を省いて簡潔にする分には、むしろ回答の質が上がることもあります。AIは余計な情報がないほうが、意図を正確に理解しやすいようです。
ただし、必要な文脈まで削ってしまうと、回答の質は確実に下がります。このバランスは、実際に試しながら見つけていくしかないと思っています。
Q: 将来、トークンの制約はなくなる?
徐々に緩和されてきているのは事実です。
数年前は4,000トークンが上限だったものが、今では128,000トークン以上に対応するモデルもあります。Google Geminiなど、さらに大きなコンテキストウィンドウを持つモデルも登場しています。
ただ、「無制限」になることは当面ないと思います。処理するトークン数が増えれば、計算コストも増えるので、どこかで制約は残るでしょう。トークンという概念を理解しておくことは、今後も役立つと考えています。
実務で感じていること
トークンを意識すると設計が変わる
AIを使ったシステムを設計するとき、トークンを意識するかどうかで、アーキテクチャが変わってきます。
例えば、ドキュメント検索システム。大量のドキュメントをAIに読ませて質問に答えさせたい場合、全文をそのまま渡すのはトークンの無駄遣いです。
私たちは「RAG(Retrieval-Augmented Generation)」という手法を使っています。質問に関連しそうな部分だけをまず検索で抽出して、その部分だけをAIに渡す。こうすることで、トークン消費を抑えながら、精度の高い回答を得られます。
こういう設計判断は、トークンという概念を理解していないとできません。
正直に言うと、まだ試行錯誤中
「このくらいのトークン数なら、このくらいの品質の回答が得られる」という感覚は、経験を積んでようやくわかってくるものです。
私も、最初のころは「なんで同じような質問なのに、回答の質がバラつくんだろう」と悩みました。原因の一つは、トークン数の制約で文脈が切れていたことでした。
今でも、新しいモデルが出るたびに、トークンの特性を確認しています。モデルによって、同じテキストでもトークン数が違うことがありますし、コンテキストウィンドウの使い方も変わってきます。
まとめ:トークンを知ると、AIとの付き合い方がわかる
長くなりましたが、トークンについてお話ししてきました。
ポイントをまとめると:
- トークンはAIにとっての「言葉の単位」。文字でも単語でもない、その中間くらいのもの
- 日本語は英語より多くのトークンを消費する。コスト計算や制約を考えるときに注意が必要
- コンテキストウィンドウ(一度に扱えるトークン数)には上限がある。長い文章を扱うときは工夫が必要
- APIの料金はトークン数で決まる。効率的な使い方を意識するとコストを抑えられる
トークンという概念を知っていると、AIの挙動を理解しやすくなります。「なぜ回答が途中で切れたのか」「なぜ料金が想定より高いのか」といった問題の原因が、すぐに特定できるようになります。
AIを業務で活用しようとしている方にとって、トークンは避けて通れない概念だと思います。でも、難しく考えすぎる必要はありません。「AIは文章をちょっと変わった単位で数えている」くらいの理解から始めて、実際に使いながら感覚をつかんでいけばいいと思います。
何か実装で困ったときに、この記事のことを思い出してもらえたら嬉しいです。


