Kembali ke panduan
Pemecahan masalah·28 Agustus 2026·Baca 6 menit

“Unsupported parameter: 'max_tokens' is not supported with this model” — gunakan max_completion_tokens

Penggantian nama adalah bagian yang mudah. Bagian yang sering mengejutkan pengguna adalah apa yang dihitung oleh field baru tersebut — max_completion_tokens mencakup penalaran dan output yang terlihat, sehingga anggaran yang hanya dirancang untuk jawaban dapat menghasilkan respons kosong dengan finish_reason "length", dan tetap ditagihkan.

Terakhir ditinjau pada .

Penggantian nama adalah bagian yang mudah. Bagian yang sering mengejutkan pengguna adalah apa yang dihitung oleh field baru tersebut — max_completion_tokens mencakup penalaran dan output yang terlihat, sehingga anggaran yang hanya dirancang untuk jawaban dapat menghasilkan respons kosong dengan finish_reason "length", dan tetap ditagihkan.

Error

respons (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"
  }
}

Ringkasan penyebab dan perbaikan

PenyebabPerbaikan
Keluarga model penalaran mengganti field tersebutKirim max_completion_tokens, bukan max_tokens, pada model-model tersebut.
SDK atau wrapper yang masih menggunakan field lamaUpgrade, atau tetapkan field tersebut secara eksplisit alih-alih melalui helper.
Satu jalur kode menyebar ke beberapa penyediaNormalisasi sekali di edge, bukan membuat cabang per model.
Jawaban kosong setelah diperbaikiAnggaran mencakup token penalaran — naikkan jauh di atas output yang Anda harapkan.

Ganti nama field

Di lokasi pemanggilan, ini adalah penggantian langsung. Semua hal lain dalam permintaan tetap sama.

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)

Anggarkan penalaran yang tidak dapat Anda lihat

max_completion_tokens membatasi token penalaran dan output yang terlihat secara bersamaan. Jika model menggunakan 900 token untuk berpikir dalam batas 1.024, Anda hanya mendapatkan 124 token jawaban — atau pesan kosong dengan finish_reason "length", dan semuanya tetap ditagihkan. Tentukan anggaran untuk keduanya, lalu periksa finish_reason sebelum mempercayai respons kosong.

Normalisasi sekali, bukan membuat cabang per model

Satu helper di edge kode Anda menjaga bagian lainnya tetap agnostik terhadap penyedia dan mencegah keluarga model berikutnya menjadi putaran perubahan baru.

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))

Antisipasi penolakan terkait lainnya

Keluarga model yang sama yang menghapus max_tokens sering kali juga menolak temperature dan top_p. Memperbaiki yang satu biasanya akan memunculkan yang berikutnya; hapus parameter sampling yang tidak didukung, bukan menetapkannya ke nilai default.

Jika Anda melakukan panggilan melalui Kunavo

/v1/chat/completions Kunavo menerima max_tokens pada keluarga penalaran GPT-5.x: translator membaca salah satu dari dua ejaan yang Anda kirim lalu memetakannya ke field upstream, dan /v1/responses melakukan hal sebaliknya. Jadi, pada model-model tersebut Anda tidak perlu mengganti nama apa pun. Satu perbedaan yang perlu dinyatakan apa adanya: pada model claude-* translator chat saat ini hanya membaca max_tokens, jadi kirim ejaan tersebut untuk Claude — itulah yang dilakukan helper di atas.

Pertanyaan umum

Apakah max_completion_tokens hanya penggantian nama?

Di lokasi pemanggilan, ya; dalam arti, tidak — field ini membatasi token penalaran dan output secara bersamaan, sedangkan max_tokens hanya membatasi output yang terlihat.

Mengapa respons saya kosong setelah memperbaikinya?

Anggaran telah digunakan untuk penalaran. Periksa finish_reason: "length"; konten kosong berarti Anda harus menaikkan batas.

Apakah saya harus membuat cabang per model?

Tidak di Kunavo untuk keluarga GPT — kedua ejaan diterima. Buat cabang hanya untuk model claude-*, atau gunakan satu helper normalisasi di seluruh kode.

Panduan terkait

Detail semantik error lainnya tersedia di referensi error; mendapatkan kunci hanya perlu satu menit melalui pendaftaran dan panduan autentikasi.