ガイド一覧へ戻る
トラブルシューティング·2026年8月28日·読了6分

「Unsupported parameter: 'max_tokens' is not supported with this model」— max_completion_tokens を使用する

名称変更は簡単な部分です。注意が必要なのは新しいフィールドが数える対象です。max_completion_tokens は推論と表示される出力の両方を対象とするため、回答だけを基準にした予算では finish_reason "length" で空のレスポンスが返り、課金も発生します。

最終確認日:。

名称変更は簡単な部分です。注意が必要なのは新しいフィールドが数える対象です。max_completion_tokens は推論と表示される出力の両方を対象とするため、回答だけを基準にした予算では finish_reason "length" で空のレスポンスが返り、課金も発生します。

エラー

response (HTTP 400)
{
  "error": {
    "message": "Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.",
    "type": "invalid_request_error",
    "param": "max_tokens",
    "code": "unsupported_parameter"
  }
}

原因と対処法の概要

原因対処法
推論モデルのファミリーでフィールドが置き換えられたこれらのモデルでは max_tokens の代わりに max_completion_tokens を送信します。
古いフィールドに固定された SDK またはラッパーアップグレードするか、ヘルパー経由ではなくフィールドを明示的に設定します。
複数のプロバイダーに分岐する1つのコードパスモデルごとに分岐せず、エッジで一度だけ正規化します。
修正後に回答が空になる予算には推論トークンが含まれます。予想される出力より十分大きく設定してください。

フィールド名を変更する

呼び出し箇所では単純な置換です。リクエストのその他の部分はすべて変わりません。

fix.py
# Before
resp = client.chat.completions.create(
    model="gpt-5-6-sol", max_tokens=1024, messages=msgs)

# After
resp = client.chat.completions.create(
    model="gpt-5-6-sol", max_completion_tokens=1024, messages=msgs)

見えない推論に予算を割り当てる

max_completion_tokens は推論トークンと表示される出力を合算して上限設定します。モデルが 1,024 の上限中900トークンを思考に使うと、回答は124トークンになるか、finish_reason "length" の空メッセージになり、そのすべてに課金されます。両方を考慮して予算を設定し、空のレスポンスを信頼する前に finish_reason を確認してください。

モデルごとに分岐せず、一度だけ正規化する

コードのエッジに単一のヘルパーを置けば、残りをプロバイダー非依存に保ち、次のモデルファミリーが登場するたびに編集を繰り返す必要がなくなります。

normalize.py
def token_budget(model: str, n: int) -> dict:
    """One place that knows which spelling a model wants."""
    if model.startswith("claude-"):
        return {"max_tokens": n}
    return {"max_completion_tokens": n}

resp = client.chat.completions.create(
    model=model, messages=msgs, **token_budget(model, 4096))

関連する拒否も想定する

max_tokens を廃止した同じモデルファミリーでは、temperature や top_p も拒否されることがよくあります。これを修正すると次の問題が表面化することがあるため、未対応のサンプリングパラメータはデフォルト値を設定するのではなく削除してください。

Kunavo経由で呼び出している場合

Kunavo の /v1/chat/completions は GPT-5.x 推論ファミリーで max_tokens を受け付けます。トランスレーターは、2つの表記のうちどちらを送信してもそれを読み取り、上流のフィールドにマッピングします。/v1/responses はその逆の処理を行います。そのため、これらのモデルでは名称変更は不要です。曖昧にせず1つの非対称性を明確に述べると、claude-* モデルでは現在、チャットトランスレーターが max_tokens のみを読み取ります。Claude にはその表記を送信してください。上記のヘルパーもそのように動作します。

よくある質問

max_completion_tokens は単なる名称変更ですか?

呼び出し箇所ではそうですが、意味は異なります。max_completion_tokens は推論トークンと出力をまとめて上限設定しますが、max_tokens は表示される出力だけを上限設定していました。

修正後にレスポンスが空なのはなぜですか?

予算が推論に使われました。finish_reason が "length" で content が空の場合は、上限を引き上げてください。

モデルごとに分岐する必要がありますか?

GPT ファミリーについては Kunavo では不要です。両方の表記を受け付けます。claude-* モデルの場合だけ分岐するか、どこでも1つの正規化ヘルパーを使用してください。

関連ガイド

エラーの詳しい意味はエラーリファレンスをご覧ください。キーは新規登録と認証ガイドから1分で取得できます。