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

トークン数の計測

リクエストを送信する前に、正確な入力トークン数を確認できます。

トークン数を計測すると、リクエストをモデルに送信する前に、そのリクエストで使用する入力トークン数を確認できます。次のような用途に利用できます。

  • コンテキストの上限に収まるようにプロンプトを最適化
  • 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_id(Files 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 のみ)。file_id、file_url、file_data のいずれかを、responses.create に渡すときと同じように指定します。トークン数には、モデルが処理する入力全体が反映されます。

出力トークン数の見方

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

GPT-5 モデルを含む一部のモデルは、レスポンスチャネルやツール呼び出しなど、メッセージの構成要素の書式や区切りを表すトークンを生成します。これらの書式用トークンは、メッセージの内容や logprobs には現れず、使用量の内訳に個別に記載されるとも限りません。そのため、報告される出力トークン数や完了トークン数が、表示されるトークン数や logprobs に含まれるトークン数を上回ることがあります。これは、報告される reasoning_tokens の値が 0 の場合にも起こります。

max_output_tokens と max_completion_tokens は、表示されないトークンを含め、モデルが生成するすべてのトークンの合計に上限を設けるパラメータです。表示されないトークンの数はモデルやレスポンスの構造によって変わるため、報告される使用量と表示されるトークン数の差を一定とみなさないでください。必要な量の出力を表示できるよう、上限には余裕を持たせてください。

API リファレンス

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

POST /v1/responses/input_tokens

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