Mengatasi Error “Thinking Block Terikat pada Percakapan Berbeda” di Claude Fable 5.1
Jika Anda memindahkan pemandu agen ke Claude Fable 5.1 lalu menerima error 400 yang menyatakan bahwa blok pemikiran “terikat pada percakapan yang berbeda”, kode Anda kemungkinan mengubah riwayat percakapan antarpermintaan. Fable 5.1 adalah model Claude pertama yang menolak pola tersebut. Panduan ini menjelaskan penyebabnya, siapa yang terdampak, solusi cepat, dan pola riwayat hanya-tambah yang menjaga penalaran serta cache prompt tetap utuh.
Pemeriksaan ini dijelaskan dalam dokumentasi pemikiran yang disimpan dan Apa yang baru di Claude Fable 5.1. Ini merupakan perubahan merusak ketiga dari tiga perubahan pada Fable 5.1. Untuk dua perubahan lainnya, baca panduan migrasi.
Error yang muncul
messages.5.content.0: `signature` tidak valid di blok `thinking`.
Blok terikat pada percakapan yang berbeda.
Hapus blok, atau atur `thinking.block_binding.prefix_mismatch_behavior`
ke "drop_block".
Pengaturan tersebut memerlukan nilai
`thinking-binding-controls-2026-08-01` di header `anthropic-beta`.
Ini adalah invalid_request_error 400 yang terjadi sebelum model menghasilkan output. Mengirim ulang badan permintaan yang sama akan gagal dengan cara yang sama.
Path seperti messages.5.content.0 menunjukkan blok pemikiran pertama yang tidak lagi cocok. Pesan error juga dapat menyebut pesan pertama yang berubah—itulah petunjuk diagnosis utama.
Kegagalan yang tampak serupa tetapi berbeda tidak menyebut “terikat pada percakapan yang berbeda”. Dalam kasus tersebut, tanda tangan mungkin rusak atau tidak dapat didekripsi, sehingga prefix_mismatch_behavior tidak berlaku.
Cara kerja pemeriksaannya
Setiap blok pemikiran Fable 5.1 memiliki tanda tangan yang mencatat:
- Model yang menghasilkan blok tersebut.
- Prefiks percakapan persis yang mendahuluinya: system prompt, array tools, dan seluruh pesan sebelumnya.
- Rantai ke blok pemikiran sebelumnya.
Saat transkrip dikirim kembali, API membandingkan prefiks tersebut secara byte-per-byte dengan prefiks yang menghasilkan blok.
Anthropic menyebut dua alasan utama:
- Anti-distilasi. Posting peluncuran menyatakan bahwa akun API baru tidak lagi dapat mengedit konteks Claude sebelumnya secara manual sambil mempertahankan transkrip pemikiran lama dalam percakapan multi-giliran.
- Cache prompt. Perubahan yang merusak pemeriksaan ini juga memulai ulang cache prompt. Akibatnya, kode yang gagal dalam pemeriksaan juga dapat kehilangan pembacaan cache seharga $0,25 per juta token pada setiap giliran.
Siapa yang terdampak?
Diberlakukan secara default
Pemeriksaan diberlakukan pada akun yang dibuat pada atau setelah 31 Agustus 2026, termasuk:
- Organisasi API Claude.
- Akun Amazon Bedrock.
- Proyek Google Cloud.
- Resource Microsoft Foundry.
Dicatat tetapi belum diberlakukan
Akun yang dibuat sebelum tanggal tersebut mencatat ketidakcocokan, tetapi hanya menolaknya jika permintaan mengatur thinking.block_binding.prefix_mismatch_behavior, termasuk nilai "error".
Anthropic menyatakan bahwa model mendatang akan memberlakukan pemeriksaan ini untuk semua akun.
Tidak terpengaruh
Pemeriksaan ini tidak berlaku pada:
- Claude Code.
- claude.ai.
- Claude Managed Agents.
- Claude Agent SDK.
Layanan tersebut menjaga prefiks percakapan tetap utuh. Claude Mythos 5.1 juga tidak menjalankan pemeriksaan ini, meskipun pengeditan riwayat tetap memulai ulang cache prompt.
Kode yang terdampak
Kode apa pun yang membangun sendiri array messages dapat terdampak, termasuk:
- Loop agen kustom.
- Backend obrolan.
- Framework yang membungkus Messages API.
Jika Anda membuat alat yang menggunakan API key milik pengguna, akun mereka mungkin lebih baru dan sudah diberlakukan meskipun akun Anda belum. Uji dengan field binding yang diatur secara eksplisit.
Untuk memeriksa apakah akun Anda sudah diberlakukan, kirim permintaan yang mengedit riwayat tanpa header beta. Error 400 yang meminta header tersebut berarti pemeriksaan sudah aktif.
Perubahan yang membatalkan blok pemikiran
Blok berikutnya menjadi tidak valid jika Anda:
- Mengedit, menyusun ulang, atau menghapus giliran sebelumnya.
- Termasuk menghapus hasil tool lama.
- Memotong giliran dari tengah transkrip.
- Melakukan pemadatan sisi klien yang hanya mempertahankan giliran terbaru.
- Menyuntikkan konten sementara lalu menghapusnya pada permintaan berikutnya.
- Pengingat per giliran.
- Baris status.
- Hitungan token tersisa yang berubah setiap giliran.
- Membangun ulang system prompt atau tools antarpermintaan.
- Contohnya memperbarui tanggal saat ini.
- Menambahkan atau menghapus tool di tengah sesi.
- Mengirim gambar atau dokumen melalui URL yang menghasilkan byte berbeda pada permintaan berikutnya.
- Yang terikat adalah byte data, bukan string URL.
- URL bertanda tangan yang berubah untuk file yang sama tidak selalu aman.
- Menghapus blok pemikiran dari tengah riwayat.
- Blok hanya boleh dihapus dari awal eksekusi, dimulai dari blok yang paling lama.
Perubahan yang tetap valid
Pola berikut mempertahankan validitas blok:
- Riwayat hanya-tambah.
- Menambahkan pesan
role: "system"tanpa mengubah pesan sebelumnya. - Mengirim pesan cakupan giliran lalu membiarkan salinan lama tetap berada di tempatnya.
- Menghapus blok pemikiran awal secara berurutan, dari yang paling lama.
- Mengubah parameter di luar
system,tools, danmessages, termasuk:max_tokensoutput_configefforttool_choicemetadata
- Menambahkan, memindahkan, atau menghapus
cache_control. - Menggunakan pemadatan dan pengeditan konteks sisi server.
Pemeriksaan membandingkan percakapan yang Anda kirim, bukan salinan yang diedit oleh server. Setelah pemadatan sisi server, prefiks pemeriksaan dimulai dari blok pemadatan.
Solusi cepat: drop_block
Kirim header beta berikut dan atur perilakunya secara eksplisit:
response = client.beta.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
thinking={
"type": "adaptive",
"block_binding": {
"prefix_mismatch_behavior": "drop_block"
}
},
betas=["thinking-binding-controls-2026-08-01"],
messages=history,
)
for t in response.input_transformations or []:
print(t.type, t.path, t.reason)
Dengan "drop_block", API akan menghapus blok pertama yang tidak cocok beserta blok pemikiran setelahnya. Permintaan tetap dilanjutkan, dan setiap penghapusan dilaporkan melalui input_transformations tingkat atas:
{
"input_transformations": [
{
"type": "thinking_dropped",
"path": "messages.1.content.0",
"reason": "prefix_binding_mismatch"
}
]
}
Perhatikan tiga hal:
- Pengaturan ini hanya berlaku untuk permintaan tersebut. Kirimkan kembali pada setiap permintaan berikutnya.
- Tanpa header beta, akun yang sudah diberlakukan akan menerima error. Mengirim header saja menggunakan default beta—yaitu
drop_block—sehingga tetap lebih aman untuk mengatur field secara eksplisit. - Mengirim
block_bindingtanpa header beta menghasilkan error:
block_binding: Extra inputs are not permitted
Field reason membedakan dua kondisi:
-
prefix_binding_mismatch: riwayat percakapan berubah. -
model_binding_mismatch: percakapan berpindah model, misalnya karena router, retry, atau fallback. Ini bukan bug pada kode riwayat Anda.
Dengan header tersebut, setiap respons memiliki array input_transformations. Array kosong berarti tidak ada blok yang dihapus.
Gunakan drop_block sebagai diagnostik dan jaring pengaman, bukan sebagai pola permanen. Jika riwayat dibatalkan pada setiap permintaan, penalaran model hilang di setiap giliran dan cache prompt dimulai ulang, sehingga biaya per tugas meningkat.
Pemulihan tanpa dukungan beta
Pada platform yang belum menyediakan kontrol ini—Microsoft Foundry saat peluncuran, sementara Bedrock dan Google Cloud menambahkannya berdasarkan model—hapus semua blok berikut dari riwayat:
thinkingredacted_thinking
Pertahankan blok:
texttool_use
Lalu coba permintaan sekali lagi. Model akan menjawab tanpa penalaran yang dibawa dari blok sebelumnya. Ini adalah prosedur pemulihan satu kali, bukan pola implementasi produksi.
Audit tiga langkah
Lakukan audit sebelum mengalihkan trafik ke Fable 5.1.
1. Bandingkan badan permintaan
Ambil badan permintaan persis selama beberapa giliran normal, termasuk pemadatan atau perubahan tools. Untuk setiap dua permintaan berurutan, bandingkan:
- System prompt.
- Array tools.
- Prefiks bersama pada
messages.
Semua harus identik secara byte hingga giliran baru ditambahkan.
2. Jalankan sesi diagnostik
Jalankan sesi multi-giliran menggunakan:
model: claude-fable-5-1
thinking.block_binding.prefix_mismatch_behavior: drop_block
Catat input_transformations pada setiap respons:
- Array kosong berarti riwayat tetap utuh.
-
prefix_binding_mismatchberarti sesuatu sebelum blok pada path tersebut berubah.
Di CI, gunakan "error" agar perubahan riwayat langsung menyebabkan kegagalan.
3. Pilih perilaku produksi
Atur field secara eksplisit di bawah header beta:
-
"error"jika ketidakcocokan selalu berarti bug. -
"drop_block"jika Anda lebih memilih penurunan kualitas daripada kegagalan permintaan.
Pantau error 400 dan entri input_transformations, termasuk pada akun lama yang mungkin hanya mencatat ketidakcocokan tanpa menolaknya.
Di Apidog, buat tes dua permintaan:
- Kirim satu giliran.
- Ubah system prompt.
- Kirim giliran berikutnya dengan
drop_block. - Pastikan
input_transformationsberisi penghapusan.
Simpan tes dalam koleksi agar setiap perubahan pada pemandu dapat diuji ulang. Anda juga dapat mengunduh Apidog.
Membangun pemandu dengan riwayat hanya-tambah
| Pola yang bermasalah | Gunakan pola ini |
|---|---|
| Mengedit system prompt di tengah sesi, misalnya tanggal atau mode baru | Bekukan system prompt di awal. Saat instruksi berubah, tambahkan {"role": "system", "content": "The current date is 2026-09-14."} sebagai pesan system tengah-percakapan. Pesan tersebut menjadi bagian dari prefiks berikutnya. |
| Mengedit array tools di tengah sesi | Deklarasikan seluruh tool sejak awal dengan defer_loading: true untuk tool yang awalnya tersembunyi. Gunakan blok tool_addition dan tool_removal dalam pesan role: "system" dengan beta mid-conversation-tool-changes-2026-07-01. |
| Menambahkan pengingat per giliran lalu menghapusnya | Gunakan pesan system cakupan giliran: {"role": "system", "clear_at": "next_user_message", "content": "..."} dengan beta mid-conversation-system-clear-at-2026-08-21. Biarkan salinan sebelumnya tetap berada di riwayat. |
| Menghapus hasil tool lama di sisi klien | Gunakan pengeditan konteks sisi server dengan penghapusan hasil tool. |
| Melakukan pemadatan di sisi klien | Gunakan pemadatan sisi server dengan beta compact-2026-01-12. Parameter instructions dapat berisi prompt ringkasan Anda sendiri. Jika tetap menggunakan sisi klien, ganti seluruh riwayat dengan satu ringkasan dan giliran pengguna baru—jangan memutar ulang bagian lama. |
| Mereferensikan gambar atau dokumen melalui URL pada banyak giliran | Unggah sekali melalui Files API lalu gunakan file_id, atau kirim data dalam base64. |
Dua pola pemadatan sisi klien berikut tetap rusak:
- Pemadatan jaga-ekor: merangkum giliran lama tetapi mempertahankan giliran terbaru.
- Pemadatan latar belakang: membuat ringkasan di luar jalur kritis lalu menukarnya belakangan.
Keduanya mengubah prefiks yang digunakan untuk menghasilkan blok pemikiran. Memotong giliran dari tengah transkrip juga membatalkan semua blok setelahnya.
Gunakan pesan system tengah-percakapan untuk perubahan instruksi dan pengeditan konteks sisi server untuk penghapusan selektif.
Pertimbangkan waktu pemadatan
Pembacaan cache Fable 5.1 kini hanya $0,25 per juta token. Karena itu, pemadatan terlalu dini untuk menghemat biaya mungkin tidak lagi optimal. Eksperimenkan titik pemadatan yang lebih akhir.
Mengapa ini juga masalah cache
Semua perubahan yang membatalkan binding pada tabel sebelumnya juga memulai ulang cache prompt.
Fable 5.1 membuat cache hit empat kali lebih murah daripada Fable 5, sehingga cache miss menjadi relatif lebih mahal. Pemandu hanya-tambah mendapatkan dua keuntungan:
- Blok pemikiran tetap tersedia.
- Setiap giliran membaca prefiks dengan biaya $0,25, bukan menulis ulang prefiks dengan biaya $12,50.
Lihat:
FAQ
Apa arti “Blok terikat pada percakapan yang berbeda”?
Blok pemikiran Claude Fable 5.1 diputar ulang setelah system prompt, array tools, atau pesan sebelumnya berubah. Pada akun yang diberlakukan, API menolak permintaan dengan error 400.
Akun mana yang memberlakukan pemeriksaan ini?
Akun yang dibuat pada atau setelah 31 Agustus 2026 di setiap platform. Akun lama hanya memberlakukannya jika thinking.block_binding.prefix_mismatch_behavior diatur. Anthropic berencana menerapkannya pada semua akun untuk model mendatang.
Bagaimana cara menghilangkan error dengan cepat?
Kirim header beta thinking-binding-controls-2026-08-01 dan atur:
prefix_mismatch_behavior: "drop_block"
API akan menghapus blok yang terdampak dan melanjutkan permintaan. Setelah itu, perbaiki kode yang mengedit riwayat agar penalaran dan cache tidak hilang pada setiap giliran.
Apakah mengubah effort atau max_tokens membatalkan blok pemikiran?
Tidak. Parameter di luar system, tools, dan messages dapat berubah dengan bebas, begitu pula penanda cache_control.
Apakah pemadatan sisi server membatalkan pemeriksaan?
Tidak. Pemeriksaan membandingkan percakapan sebelum pemadatan dan pengeditan konteks sisi server dilakukan. Pemadatan sisi klien yang mempertahankan giliran terbaru tetap membatalkan binding.
Apakah Claude Mythos 5.1 memiliki pemeriksaan yang sama?
Tidak. Mythos 5.1 tidak menjalankan pemeriksaan percakapan. Namun, blok pemikiran tetap terikat pada model yang memproduksinya, dan pengeditan riwayat tetap memulai ulang cache prompt.
Top comments (0)