トークン数の数え方と節約術:Tiktokenライブラリの使い方
AI開発、特にOpenAIのAPIを利用するプロジェクトにおいて、**「トークン(Token)」**の管理はコストとパフォーマンスの両面に直結する重要課題です。
「文字数」と「トークン数」はイコールではありません。日本語の場合、ひらがな1文字が1トークン以上になることもあれば、漢字が複数トークンになることもあります。このズレを正確に把握していないと、想定外の課金が発生したり、Context Windowの上限を超えてエラーになったりします。
本記事では、OpenAI公式のトークン計算ライブラリTiktokenの使い方と、実践的な節約術を解説します。
Tiktokenとは?
Tiktokenは、OpenAIが公開している高速なBPE(Byte Pair Encoding)トークナイザです。Python版が最も一般的ですが、RustやJavaScript版もあります。
基本的な使い方
pip install tiktoken
import tiktoken
def count_tokens(text: str, model: str = "gpt-4-turbo") -> int:
try:
encoding = tiktoken.encoding_for_model(model)
except KeyError:
# モデルが見つからない場合はcl100k_base(GPT-4系)を使用
encoding = tiktoken.get_encoding("cl100k_base")
tokens = encoding.encode(text)
return len(tokens)
text = "こんにちは、世界!"
print(count_tokens(text))
# 出力例: 5 (モデルによって異なる)
実践的な節約テクニック
トークン数を減らすことは、コスト削減だけでなく、レスポンス速度の向上(レイテンシ低下)にも繋がります。
1. プロンプトの圧縮
指示内容(System Prompt)を簡潔にするだけで、数万リクエスト積み重なれば大きな差になります。
- 「お願いします」「ください」を削除: AIに対する敬語はトークンの無駄です。命令形で記述しましょう。
- 例示(Few-Shot)の厳選: 10個の例を提示するより、代表的な3個に絞った方が精度が高い場合もあります。
2. レスポンスの制限
max_tokens パラメータを設定するだけでなく、プロンプトで「箇条書きで3点のみ答えて」「JSON形式のキーのみ出力して(解説不要)」と制約をかけることで、無駄なおしゃべりを防げます。
3. RAGにおけるチャンク戦略
検索拡張生成(RAG)では、検索して取得したドキュメントをプロンプトに埋め込みます。この際、無関係なチャンクまで含めてしまうと、トークンを浪費するだけでなく、回答精度も下がります(Lost in the Middle現象)。
- リランク(Rerank)の導入: ベクトル検索で取得した上位20件に対し、Cross-Encoderモデルで再ランク付けを行い、本当に関連性の高い上位5件のみをLLMに渡す。
- メタデータの活用: 本文全体ではなく、要約(Summary)メタデータのみを先に検索対象とする。
まとめ:計測なくして改善なし
「なんとなく高い気がする」ではなく、Tiktokenを使ってリクエストごとの消費トークンをログに記録し、可視化環境(Dashboard)を作ることが第一歩です。
1トークンの重みを知るエンジニアこそが、持続可能なAIサービスを構築できるのです。