概要
トークンは、OpenAI のモデルがテキストを処理する際に使用する単位です。トークンは、1 文字、単語の一部、単語全体、句読点などを表します。スペースも、テキストがトークンに分割される方法に影響します。
トークン数と単語数は同じではありません。同じテキストでも、モデル、エンコーディング、言語によってトークン数が異なる場合があります。
テキストがトークンになる仕組み
モデルにテキストを送信すると、次の処理が行われます。
テキストがトークンに分割される
モデルがトークンを処理する
モデルが出力トークンを生成する出力トークンには、受信するテキストのほか、リーズニングモデルでは回答テキストとして表示されない内部の推論トークンも含まれる場合があります。
英語テキストの概算
英語テキストの規模を判断する際は、次の概算が役立ちます。
1 トークンは約 4 文字
1 トークンは約 0.75 語
100 トークンは約 75 語
これらは概算であり、正確な数ではありません。文や段落の長さは一定ではなく、文字、単語、トークンの関係も言語によって異なる場合があります。
スペースと大文字・小文字の考慮
単語は、その綴り、大文字・小文字、周囲のテキストによって異なるトークンに分割される場合があります。
たとえば、red、Red、「 red」は同一のテキストではありません。最後の例には先頭にスペースがあります。エンコーディングによって、それぞれ異なる形で表現される場合があります。
トークン ID もエンコーディングによって異なります。例示されたトークン ID がすべてのモデルに当てはまるとは限りません。
入力トークンと出力トークンの違い
| 種類 | 説明 |
| 入力トークン | リクエストでモデルに渡されるトークンです。プロンプトトークンとも呼ばれます。 |
| 出力トークン | モデルによって生成されるトークンです。Chat Completions では補完トークンと呼ばれます。 |
| キャッシュ済み入力トークン | プロンプトキャッシュによって再利用される入力トークンです。キャッシュされていない入力トークンとは料金が異なる場合があります。 |
| 推論トークン | リーズニングモデルが、表示される回答を生成する前に内部で使用するトークンです。 |
推論トークンは回答テキストとして表示されませんが、出力使用量に含まれ、出力トークンとして課金されます。
そのため、表示される回答が短くても、テキストから想定される以上のトークンが使用される場合があります。
リクエスト送信前のトークン数のカウント
プレーンテキストのカウント
テキストがトークンに分割される仕組みは、Tokenizer で確認できます。
プログラムでプレーンテキストをトークン化するには、tiktoken を使用します。tiktoken.encoding_for_model(model) などを使用し、対象モデルに合ったエンコーディングを選択します。
プレーンテキストのトークン数に、API リクエスト内のすべてのトークンが含まれるとは限りません。メッセージ構造、ツール、スキーマ、画像、ファイルが入力全体のトークン数に影響する場合があります。
Responses の入力全体のカウント
Responses API の入力全体をカウントするには、入力トークンカウント API を使用します。
メッセージ、画像、ファイル、ツール、会話など、Responses の入力形式に対応しています。カウントには、メッセージのロールや境界など、リクエスト構造に使用される書式設定用トークンも含まれます。
入力トークン数から、モデルが生成する出力トークン数を予測することはできません。
実際のトークン使用量の確認
リクエスト後に使用量情報を確認します。フィールド名はエンドポイントによって異なります。
Chat Completions では prompt_tokens、completion_tokens、total_tokens が報告されます。
Responses では input_tokens、output_tokens、total_tokens が報告されます。
Usage Dashboard では、一定期間のアクティビティも確認できます。ストリーミングの使用量を含む手順については、API の使用量とコストの確認をご覧ください。
モデルの上限内での利用
使用するモデルのコンテキストウィンドウと最大出力について、ドキュメントを確認してください。これらの上限はモデルによって異なる場合があります。
コンテキストウィンドウは、モデルが 1 回のリクエストで処理できるトークン数を制限します。モデルには出力上限もあります。リーズニングモデルでは、表示される回答だけでなく、推論トークンのための余裕も確保してください。
入力が大きすぎる場合は、次の方法を利用できます。
プロンプトを短くするか、表現を変える
不要なコンテキストや重複するコンテキストを削除する
大きな入力を小さく分割する
送信前にテキストを要約または前処理する
エンドポイントとモデルが対応する出力トークン設定を使用してください。Chat Completions では max_completion_tokens、Responses では max_output_tokens を使用します。
これらのリクエストサイズ上限は、API のレート制限や月間の使用量・支出上限とは別です。使用するモデルのモデルドキュメントを確認してください。
トークン料金の理解
トークン単位の API 料金は、モデルとトークンの種類によって異なります。入力、キャッシュ済み入力、出力の各トークンは、料金が異なる場合があります。その他の API 機能では、別の課金単位が使用される場合があります。
現在の料金は、API 料金ページで確認してください。
モデルを比較する際は、タスクの完了に必要な総トークン数とコストを考慮してください。100 万トークン当たりの料金が低くても、総コストが低くなるとは限りません。同じテキストでもモデルによってトークン化の結果が異なり、生成される出力や推論の量も異なるためです。
表示される回答の長さだけを比較せず、実際の利用例を代表するタスクでテストしてください。
複数の補完の考慮
エンドポイントとモデルが複数の補完の生成に対応している場合、追加の補完でもトークンが使用されます。
Chat Completions で n を 1 より大きく設定すると、複数の候補が生成されます。これらの候補全体で生成されたトークンに対して課金されます。
従来の Completions API では、best_of によって、返されないものも含めて候補が生成される場合があります。たとえば best_of = 3 の場合、候補全体で最大 3 × max_tokens 個の補完トークンが生成される可能性があります。
これらのパラメーターはエンドポイント固有です。別の API やモデルでも n または best_of がサポートされているとは限りません。
