For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション

トークン数のカウント

リクエストを送信する前に、正確な入力トークン数を取得します。

トークン数をカウントすると、リクエストをモデルに送信する前に、そのリクエストで使われる入力トークン数を確認できます。次のような用途に役立ちます。

  • コンテキストの上限に収まるようにプロンプトを最適化
  • API を呼び出す前にコストを見積もり
  • サイズに応じてリクエストを振り分け (例:短いプロンプトを高速なモデルに送信)
  • 文字数に基づく推定に頼らず、画像やファイルでの想定外のトークン消費を回避

入力トークン数カウントエンドポイントは、Responses API と同じ入力形式に対応しています。テキスト、メッセージ、画像、ファイル、ツール、会話を渡すと、API はモデルが受け取る正確なトークン数を返します。

カウントには、メッセージのロールや境界など、リクエストの構造を表すための書式トークンも含まれます。これらのトークンは、ローカルでトークン化するテキストやフィールドには現れない場合があります。

トークン数カウント API を使う理由

tiktoken などのローカルトークナイザーはプレーンテキストに使えますが、次のような制限があります。

  • 画像やファイル には非対応で、characters / 4 のような推定方法では不正確
  • ツールやスキーマ によって追加されるトークンは、ローカルでのカウントが困難
  • モデル固有の動作 (推論やキャッシュなど)によってトークン化が変わることがあります

トークン数カウント API は、これらすべてに対応しています。responses.create に送信するものと同じペイロードを使えば、正確なトークン数を取得できます。その結果を、メッセージの検証やコスト見積もりのフローに組み込めます。

基本的なメッセージのトークン数のカウント

シンプルなテキスト入力
from openai import OpenAI

client = OpenAI()

response = client.responses.input_tokens.count(
    model="gpt-6-astra", input="Tell me a joke."
)
print(response.input_tokens)

会話のトークン数のカウント

複数ターンの会話
from openai import OpenAI

client = OpenAI()

response = client.responses.input_tokens.count(
    model="gpt-6-astra",
    input=[
        {"role": "user", "content": "What is 2 + 2?"},
        {"role": "assistant", "content": "2 + 2 equals 4."},
        {"role": "user", "content": "What about 3 + 3?"},
    ],
)
print(response.input_tokens)

指示を含む入力のトークン数のカウント

システム指示を含む入力
from openai import OpenAI

client = OpenAI()

response = client.responses.input_tokens.count(
    model="gpt-6-astra",
    instructions="You are a helpful assistant that explains concepts simply.",
    input="Explain quantum computing in one sentence.",
)
print(response.input_tokens)

画像を含む入力のトークン数のカウント

画像は、サイズと詳細度に応じてトークンを消費します。トークン数カウント API は正確な数を返すため、推測する必要はありません。

画像を含む入力
from openai import OpenAI

client = OpenAI()

# Use file_id from uploaded file, or image_url for a URL
response = client.responses.input_tokens.count(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_image",
                    "image_url": "https://example.com/chart.png",
                },
                {"type": "input_text", "text": "Summarize this chart."},
            ],
        }
    ],
)
print(response.input_tokens)

file_idFiles API から取得)、または image_url(URL または base64 データ URL)を使用できます。詳しくは、画像と視覚認識をご覧ください。

ツールを含む入力のトークン数のカウント

ツール定義(関数スキーマや MCP サーバーなど)は、コンテキストにトークンを追加します。入力と合わせてカウントしてください。

関数ツールを含む入力
from openai import OpenAI

client = OpenAI()

response = client.responses.input_tokens.count(
    model="gpt-6-astra",
    tools=[
        {
            "type": "function",
            "name": "get_weather",
            "description": "Get the current weather in a location",
            "parameters": {
                "type": "object",
                "properties": {"location": {"type": "string"}},
                "required": ["location"],
            },
        }
    ],
    input="What is the weather in San Francisco?",
)
print(response.input_tokens)

ファイルを含む入力のトークン数のカウント

ファイル入力(現在は PDF)に対応しています。responses.create と同様に、file_idfile_url、または file_data を渡してください。トークン数には、モデル向けに処理された入力全体が反映されます。

出力トークン数の仕組み

報告される出力トークン使用量には、レスポンスに表示されるテキストだけでなく、モデルが生成したすべてのトークンが含まれます。Responses API はこの合計を output_tokens として、Chat Completions API は completion_tokens として報告します。

GPT-5 モデルを含む一部のモデルは、レスポンスのチャネル、ツール呼び出し、その他のメッセージ構造の書式設定や区切りに使うトークンを生成します。これらの書式トークンは、メッセージの内容や logprobs には現れず、使用量の内訳に別項目として示されるとも限りません。そのため、報告される reasoning_tokens の値が 0 であっても、報告される出力トークン数や完了トークン数は、表示されるトークン数や logprobs に含まれるトークン数より多くなる場合があります。

max_output_tokensmax_completion_tokens パラメーターは、表示されないトークンも含め、モデルが生成するすべてのトークンの数を制限します。表示されないトークンの数はモデルやレスポンスの構造によって異なるため、報告される使用量と表示される出力との差が一定だとは考えないでください。表示される出力を一定量確保したい場合は、これらの上限に余裕を持たせてください。

API リファレンス

すべてのパラメーターとレスポンスの構造については、入力トークン数カウント API リファレンスを参照してください。エンドポイントは次のとおりです:

POST /v1/responses/input_tokens

レスポンスには、input_tokens(整数)と object: "response.input_tokens" が含まれます。