Perbaiki blok pemikiran yang terikat ke percakapan lain
Lanjutkan kembali percakapan setelah error 400 yang menyatakan bahwa blok pemikiran terikat ke percakapan lain, temukan apa yang diubah kode Anda, dan uji bahwa perubahan itu sudah hilang.
Mengirim permintaan yang sama lagi tidak akan berhasil, karena riwayat Anda masih memuat apa yang diubah oleh kode Anda. Kirim "drop_block" sesuai langkah Hentikan error sekarang. Perbaikan jangka panjangnya adalah membuat kode Anda “append-only” (hanya menambah di akhir).
Kesalahan: The block is bound to a different conversation
“Thinking block” (blok pemikiran) tersebut gagal dalam “prefix check” (pemeriksaan prefiks): sesuatu sebelum blok itu berubah setelah Claude menghasilkannya (lihat Apa yang dihitung sebagai perubahan), atau sebuah blok pemikiran di antara blok-blok lain tidak disertakan atau dipindahkan. Error-nya terlihat seperti ini, dan dapat berlanjut dengan menyebutkan apa yang berubah:
messages.1.content.0: Invalid `signature` in `thinking` block. The block is bound to a different conversation. Remove the block, or set `thinking.block_binding.prefix_mismatch_behavior` to "drop_block".“A different conversation” berarti konten yang berbeda sebelum blok tersebut: pemeriksaan prefiks tidak membandingkan sesi atau pengguna. Pesan error menyuruh Anda menghapus blok tersebut, tetapi menghapus hanya blok itu tidak cukup. Error lain dapat terlihat mirip.
Jika aplikasi tersebut bukan milik Anda, mulailah percakapan baru dan beri tahu pengelolanya. Jika Anda menghapus rahasia, data pribadi, atau teks yang disisipkan, atau permintaan Anda menonaktifkan pemikiran, hapus pemikiran secara manual alih-alih melakukan langkah 1.
Hentikan error sekarang
Atur
thinking.block_binding.prefix_mismatch_behaviorke"drop_block", dan kirim “beta header” (header beta)anthropic-beta: thinking-binding-controls-2026-08-01. Lakukan ini pada setiap permintaan berikutnya dalam percakapan, karena API tidak menyimpan pengaturan tersebut di antara permintaan. Percakapan yang tersimpan masih memuat perubahan itu, bahkan setelah Anda memperbaiki kode Anda, jadi simpan pengaturan tersebut bersama percakapan itu. Aturtypeke"adaptive", seperti yang ditunjukkan:{ "thinking": { "type": "adaptive", "block_binding": { "prefix_mismatch_behavior": "drop_block" } } }Di SDK, panggil metode Messages beta dan teruskan nilai header-nya, seperti yang dilakukan program pengujian. Jika error masih meminta header, header tersebut tidak sampai.
Cara itu menghentikan error dengan tidak menyertakan pemikiran yang tidak valid dalam permintaan, tetapi dapat menambah biaya serta dapat memengaruhi kualitas output dan “latency” (latensi). Permintaan berikutnya berhasil, dan array
input_transformations-nya mencantumkan setiap blok yang tidak disertakan API dalam permintaan tersebut.Jika permintaan Anda tidak mengatur parameter
thinking, menambahkannya tidak mengubah hal lain, karena model dengan pemikiran yang dipertahankan berpikir secara adaptif secara default.Perbaikan jangka panjang
Jadikan integrasi Anda append-only:
- Temukan perubahannya. Error dapat menyebutkannya. Untuk menemukan di mana kode Anda membuatnya, jalankan
claude update, lalu jalankan/claude-api preserved-thinking-migrationdi Claude Code di repositori kode Anda. Atau cari secara manual. - Berhenti membuat perubahan tersebut, atau percakapan baru juga dapat mengalami error. Kirim pembaruan di bagian akhir sebagai gantinya.
- Terus kirimkan ke setiap percakapan yang sedang berjalan
systemdantoolsdari permintaan terakhirnya yang berhasil.
- Temukan perubahannya. Error dapat menyebutkannya. Untuk menemukan di mana kode Anda membuatnya, jalankan
Jika perubahan itu baru saja dilakukan, Anda dapat membatalkannya sebagai gantinya: kembalikan apa yang diubah kode Anda. Pemikiran dari sebelum perubahan menjadi valid kembali. Pemikiran yang dihasilkan sejak saat itu gagal dalam pemeriksaan prefiks, jadi hapus pemikiran tersebut atau terus kirim "drop_block".
Biaya tidak menyertakan pemikiran
Claude dapat menghabiskan lebih banyak token output untuk menyusun penalaran yang tidak dapat lagi dibacanya. Tidak menyertakan blok-blok tersebut juga membuat cache prompt tidak valid mulai dari blok pertama yang tidak disertakan dan seterusnya.
Ketika sesuatu berubah di setiap giliran, setiap giliran kehilangan pemikiran dari giliran-giliran sebelumnya, sehingga peningkatan tersebut berulang. Jalankan evaluasi (evals) pada beban kerja Anda sendiri sebelum Anda mengandalkan "drop_block".
Gunakan "drop_block" untuk menjaga percakapan yang sudah ada tetap berjalan selama percakapan tersebut masih memuat perubahan yang sedang Anda perbaiki, dan untuk tindakan tidak menyertakan blok yang direncanakan, seperti setelah ringkasan Anda sendiri. Jangan biarkan pengaturan ini tetap aktif untuk menyembunyikan perubahan yang terus dibuat kode Anda. Anda dapat berhenti mengirimkannya setelah blok yang tidak valid sudah keluar dari riwayat.
Temukan apa yang diubah kode Anda
Perubahan berada sebelum blok pertama yang disebutkan API. Error 400 dapat menyebutkan apa yang berubah, seperti system, tools, blok pemikiran yang hilang, atau pesan pertama yang berbeda. Jika tidak ada error, atau error-nya tidak menyebutkannya, mulailah dari apa yang Anda miliki, seperti entri prefix_binding_mismatch atau token output yang lebih banyak.
Uji kode Anda terhadap kegagalan pemeriksaan prefiks
Anda dapat memercayai sebuah pengujian setelah Anda melihatnya gagal. Pertama, melalui kode Anda sendiri, jalankan sesi yang membuat Claude berpikir, dan ubah sesuatu dengan sengaja. Kirim "drop_block" untuk langkah ini, sehingga respons mencantumkan setiap blok yang tidak valid alih-alih berhenti di blok pertama, seperti yang ditunjukkan oleh lima langkah dan sebuah program.
Kemudian hapus perubahan itu, dan jalankan sesi nyata Anda. Pada setiap permintaan, kirim header beta thinking-binding-controls-2026-08-01, dan atur prefix_mismatch_behavior ke "error", sehingga perubahan yang dibuat kode Anda dalam sesi tersebut menggagalkan build dengan error 400.
Uji sesi yang melakukan compaction, menambahkan alat belakangan, mengubah instruksi, beralih model, atau dilanjutkan kembali: giliran biasa tidak menjangkau kode tersebut.
Proses yang bersih tidak memiliki entri prefix_binding_mismatch dan tidak ada error. Proses tersebut hanya menunjukkan bahwa blok yang diperiksanya valid, dalam sesi yang Anda jalankan. Proses tersebut tidak membuktikan apa pun jika:
- sesi tidak memiliki blok pemikiran
- kode Anda menghapus semua pemikiran, atau model tidak memiliki pemikiran yang dipertahankan
- Anda tidak mengirim header beta, dan model mungkin meloloskan blok yang gagal dalam pemeriksaan prefiks tanpa error
Pantau produksi, dan temukan penalaran yang hilang tanpa error
Catat setiap error 400, dan tangani dalam kode agar percakapan tetap berlanjut. Jika Anda justru tidak menyertakan prefix_mismatch_behavior dalam permintaan, pantau lalu lintas produksi untuk pemikiran yang gagal dalam pemeriksaan prefiks yang sampai ke Claude.
Penalaran dapat hilang tanpa error melalui "drop_block", item batch, peralihan model, perpindahan ke akun lain, atau kode yang tidak mengirim kembali pemikiran apa pun. Dengan header beta, masing-masing meninggalkan entri kecuali yang terakhir. Untuk yang terakhir itu, periksa bahwa permintaan Anda memuat blok thinking.
Detail teknis
Apa lagi yang dapat disebutkan pesan error
Pesan error selanjutnya menyebutkan apa yang berubah, jika API dapat mengetahuinya, seperti system, tools, pesan atau blok pertama yang berbeda, konten yang hilang atau baru, atau blok pemikiran sebelumnya yang hilang atau tidak berurutan. Susunan kata kalimat itu dapat berubah, jadi jangan melakukan pencocokan terhadapnya. Jika permintaan tidak memiliki header beta, pesan error menambahkan kalimat ini:
That setting requires the `thinking-binding-controls-2026-08-01` value in the `anthropic-beta` header.Error masih meminta header, atau menyatakan Extra inputs are not permitted
Jika error masih meminta header, header tersebut tidak sampai ke API: proxy atau library mungkin telah menghapusnya. Error yang berbeda, yang diakhiri dengan block_binding: Extra inputs are not permitted, berarti hal yang sama, atau bahwa pemikiran dinonaktifkan.
Hapus pemikiran yang tidak valid secara manual
Gunakan cara ini ketika Anda tidak dapat mengirim pengaturan tersebut, atau dalam salah satu kasus berikut:
- Setelah Anda menghapus rahasia, data pribadi, atau teks yang disisipkan, karena
"drop_block"membiarkan pemikiran tetap ada di riwayat tersimpan Anda. - Ketika pemikiran dinonaktifkan (
"disabled"atau"between_tools"), karena"drop_block"memerlukan"adaptive", yang akan mengaktifkan pemikiran dan menambah token output.
- Hapus blok yang disebutkan error, serta setiap blok
thinkingdanredacted_thinkingsetelahnya, atau error yang sama kemudian akan menyebutkan blok tidak valid berikutnya. Namun, jika riwayat Anda memuat pesanrole: "system", atau dua pesan dengan peran yang sama secara berturut-turut, hapus setiap blokthinkingdanredacted_thinking. Error menghitung pesan semacam itu sebagai bagian dari pesan sebelumnya, sehingga posisi yang disebutkannya dapat lebih rendah daripada indeks dalam array Anda.pathdari entriinput_transformationsmenghitung setiap pesan secara terpisah. - Pertahankan setiap blok lainnya, dan kirim permintaan lagi. Jangan kembalikan blok yang telah dihapus.
Error yang terlihat seperti ini
Error berikut tidak menyatakan bahwa blok terikat ke percakapan lain, dan mengatur prefix_mismatch_behavior mungkin tidak menghilangkannya:
- Pesan yang berhenti setelah “Invalid
signatureinthinkingblock”, menyatakan “cannot be modified”, atau tentangbudget_tokens: Pemecahan masalah thinking - Pesan tentang
temperatureatau balasan yang diisi sebelumnya: Batasan dan kompatibilitas fitur
Kapan Anda dapat berhenti mengirim "drop_block"
Untuk berhenti mengirim "drop_block", hapus blok yang tidak disertakannya dalam permintaan dan pertahankan pemikiran yang dihasilkan sejak saat itu. Jika tidak ada hal lain yang berubah, percakapan kemudian lolos dengan "error".
Tangani error dalam kode
Untuk menangani error dalam kode, kirim header beta dan "error" pada setiap permintaan, sehingga kegagalan pemeriksaan prefiks menjadi error 400 di setiap model. Ketika error itu muncul, alihkan hanya percakapan tersebut ke "drop_block" untuk setiap permintaan berikutnya, simpan pilihan itu bersama percakapan tersebut, kirim lagi satu kali, dan catat error-nya. Jika error yang sama muncul kembali, pengaturan tersebut tidak sampai ke API: lihat Error masih meminta header, atau menyatakan Extra inputs are not permitted.
Kode Anda harus mengenali error ini dari field message-nya, sebagai pengecualian dari saran umum untuk tidak mencocokkan teks error. Setiap error 400 memiliki tipe invalid_request_error, dan error ini tidak memiliki error.details.error_code. Cocokkan hanya pada “The block is bound to a different conversation”, karena sisa pesannya dapat berubah.
Anda tidak mendapatkan error, atau error-nya tidak menyebutkan apa yang berubah
-
Error 400, dan tidak menyebutkan perubahan apa pun: Bandingkan sendiri permintaan-permintaannya. Salah satu penyebabnya adalah blok compaction yang dikirim tanpa menghapus pesan-pesan yang diringkasnya.
-
Entri
prefix_binding_mismatch: Bandingkansystem,tools, danmessageshinggapathentri pertama dengan percakapan sebagaimana adanya saat blok tersebut dihasilkan. Jika setiap blok tercantum, mulailah dengansystemdantools.Jika tidak ada yang berbeda, cari URL gambar atau dokumen yang kontennya berubah, daftar alat server MCP yang berubah (lihat Sematkan daftar alat server MCP), atau blok pemikiran yang tidak disertakan, dipindahkan, atau dikembalikan. Tanpa log permintaan, kirim permintaan lagi dengan
"error", dan baca kalimat yang menyatakan apa yang berbeda, jika ada. -
Proxy atau library yang bukan milik Anda, berada di antaranya: Bandingkan apa yang dikirimnya dengan apa yang Anda kirim, dan arahkan pengelolanya ke Library, proxy, dan gateway.
-
Hanya dugaan, dan tidak ada Claude Code: Rekam body permintaan dari sebuah percakapan, yang memiliki compaction atau perubahan alat. Bandingkan masing-masing dengan yang sebelumnya, tanpa menyertakan giliran-giliran barunya.
Lima langkah untuk pengujian yang dapat gagal, dan program yang menjalankannya
- Dalam kode Anda sendiri, kirim header beta dan
"drop_block"pada setiap permintaan dari sebuah sesi, ke model dengan pemikiran yang dipertahankan. - Gunakan prompt yang membuat Claude berpikir, dan periksa bahwa respons pertama memiliki blok
thinking. Dengan pemikiran adaptif, Claude dapat melewatkan pemikiran pada prompt yang mudah. - Gagalkan pengujian hanya pada entri
input_transformationsyang alasannya adalahprefix_binding_mismatch. Pengujian yang mengharapkan array kosong juga gagal setelah peralihan model, karena entri denganmodel_binding_mismatchatauorganization_binding_mismatchmemang diharapkan pada saat itu. - Ubah sesuatu dengan sengaja, seperti menambahkan prompt
systemhanya pada permintaan ketiga. - Periksa bahwa
input_transformationsmencantumkan blok pemikiran yang berada setelah perubahan. Jika tidak mencantumkan apa pun, periksa bahwa riwayat memuat blok pemikiran.
Program ini melakukan langkah 1, 2, 4, dan 5. Program ini mencetak berapa banyak blok pemikiran dan entri input_transformations yang dimiliki setiap respons, lalu setiap entri, yang merupakan hal yang diperiksa oleh langkah 3:
client = anthropic.Anthropic()
user_turns = [
"How many positive integers below 500 have exactly 6 positive divisors?",
"How many have exactly 8?",
"How many have exactly 10?",
]
messages = []
for turn, user_turn in enumerate(user_turns, start=1):
messages.append({"role": "user", "content": user_turn})
response = client.beta.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
thinking={
"type": "adaptive",
"block_binding": {"prefix_mismatch_behavior": "drop_block"},
},
# Hanya permintaan terakhir yang menambahkan prompt sistem, yang sengaja mengubah prefiks
system="Answer briefly." if turn == len(user_turns) else anthropic.omit,
messages=messages,
betas=["thinking-binding-controls-2026-08-01"],
)
messages.append({"role": "assistant", "content": response.content})
thinking_blocks = sum(block.type == "thinking" for block in response.content)
entries = response.input_transformations or []
print(f"thinking blocks: {thinking_blocks}, entries: {len(entries)}")
for entry in entries:
if entry.type == "thinking_dropped":
print(entry.type, entry.path, entry.reason)thinking blocks: 1, entries: 0
thinking blocks: 1, entries: 0
thinking blocks: 1, entries: 2
thinking_dropped messages.1.content.0 prefix_binding_mismatch
thinking_dropped messages.3.content.0 prefix_binding_mismatchDengan "error" sebagai pengganti "drop_block", permintaan ketiga mendapatkan error 400.
Arti setiap entri input_transformations, dan mana yang perlu Anda perbaiki
Dengan header beta, respons dari model yang mendukung pemikiran memiliki array input_transformations di samping usage. Array ini kosong ketika tidak ada blok yang tidak disertakan dan tidak ada blok tidak valid yang diloloskan. Saat Anda melakukan “streaming” (streaming), array ini berada di message dari event message_start; setelah fallback di tengah stream, event message_delta terakhir membawa array yang berlaku. Tidak seperti posisi pada error, path selalu merupakan posisi blok sebagaimana Anda mengirimkannya:
{
"input_transformations": [
{
"type": "thinking_dropped",
"path": "messages.1.content.0",
"reason": "prefix_binding_mismatch"
}
]
}type dan reason setiap entri, beserta artinya:
thinking_dropped,prefix_binding_mismatch: Apa yang ada sebelum blok ini bukan lagi yang dicatatnya. Perlu Anda perbaiki: Temukan apa yang diubah kode Anda.thinking_mismatch_allowed,prefix_binding_mismatch: Sama seperti di atas, tetapi Claude membaca blok tersebut tanpa perubahan, dan blok tersebut ditagih. Entri ini hanya muncul jika pengaturan tersebut tidak disertakan dalam permintaan, pada beberapa model. Perlu Anda perbaiki.thinking_dropped,model_binding_mismatch: Model ini tidak dapat membaca blok dari model yang menghasilkannya. Bukan untuk Anda perbaiki: terus kirim seluruh percakapan.thinking_dropped,organization_binding_mismatch: Akun lain yang menghasilkan blok tersebut, sehingga API tidak menyertakannya dalam permintaan. Bukan untuk Anda perbaiki.
Abaikan entri yang type atau reason-nya tidak Anda kenali.
Batch dan penghitungan token
- Message Batches: Item yang tidak menyertakan
prefix_mismatch_behaviortidak pernah mendapatkan error 400. API tidak menyertakan blok yang tidak valid dalam permintaan, atau, pada beberapa model, dapat meloloskannya. Item yang mengatur"error"diselesaikan sebagaierroredketika sebuah blok gagal dalam pemeriksaan prefiks.block_bindingditempatkan diparams.thinkingmilik item tersebut. - Penghitungan token: Di Claude API, penghitungan token dapat mengembalikan error 400 yang sama, dan menerima
prefix_mismatch_behaviordengan header yang sama. Penghitungan token tidak memasukkan blok yang tidak disertakan ke dalam hitungan, dan tidak mengembalikaninput_transformations.
Langkah selanjutnya
Apa yang harus dikirim sebagai ganti setiap perubahan yang dibuat kode Anda pada sebuah percakapan.
Apa itu pemikiran yang dipertahankan, ke apa sebuah blok pemikiran terikat, serta beralih model atau akun.
Perbaikan untuk error pemikiran lainnya, seperti signature yang tidak dapat diverifikasi.
Apakah halaman ini membantu?