Nếu bạn đã di chuyển một hệ thống điều khiển tác nhân (agent harness) sang Claude Fable 5.1 và bắt đầu thấy lỗi 400 với thông báo rằng một khối suy nghĩ (thinking block) “được gắn với một cuộc hội thoại khác”, điều đó có nghĩa là mã của bạn đã chỉnh sửa lịch sử cuộc hội thoại giữa các yêu cầu, và Fable 5.1 là mô hình Claude đầu tiên phản đối điều này. Hướng dẫn này giải thích kiểm tra là gì, ai bị ảnh hưởng, chính xác điều gì kích hoạt nó, lối thoát hiểm, và các mẫu chỉ thêm vào (append-only) giúp loại bỏ lỗi đồng thời giữ cho bộ đệm prompt của bạn hoạt động hiệu quả. Kiểm tra này được ghi lại trong phần suy nghĩ được bảo toàn và trong Có gì mới trong Claude Fable 5.1. Đây là thay đổi gây lỗi thứ ba trong ba thay đổi gây lỗi của Fable 5.1, và là thay đổi duy nhất có thể làm suy giảm hiệu suất của hệ thống điều khiển tác nhân một cách âm thầm. Đối với hai thay đổi còn lại, hãy xem hướng dẫn di chuyển.nút
Lỗi
messages.5.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". That setting requires the `thinking-binding-controls-2026-08-01` value in the `anthropic-beta` header.
Đây là một lỗi 400 invalid_request_error, được quyết định trước bất kỳ đầu ra nào. Thử lại cùng một nội dung sẽ thất bại theo cùng một cách. Đường dẫn (messages.5.content.0) chỉ vào khối suy nghĩ đầu tiên không còn khớp, và thông báo có thể kết thúc bằng một câu nữa nêu tên tin nhắn đầu tiên đã thay đổi, đây là chẩn đoán bạn muốn. Điểm cuối đếm token cũng chạy kiểm tra tương tự.
Một lỗi khác trông tương tự nhưng không phải là lỗi này: cùng một mệnh đề dẫn đầu mà không có câu “được gắn với một cuộc hội thoại khác” có nghĩa là chữ ký đã bị giả mạo hoặc không thể giải mã, và prefix_mismatch_behavior không áp dụng.
Kiểm tra này làm gì
Mỗi khối suy nghĩ của Fable 5.1 mang một chữ ký ghi lại hai điều: mô hình nào đã tạo ra nó, và tiền tố cuộc hội thoại chính xác đã đứng trước nó, tức là lời nhắc system cấp cao nhất, mảng tools, và mọi tin nhắn trước khối. Mỗi khối cũng liên kết với khối suy nghĩ trước đó. Khi bạn gửi lại bản ghi, API xác minh rằng tiền tố là byte-giống hệt với những gì đã tạo ra khối đó.
Anthropic đưa ra hai lý do. Lý do đã nêu là chống chắt lọc: bài đăng ra mắt nói rằng các tài khoản API mới không còn có thể chỉnh sửa thủ công ngữ cảnh trước đó của Claude trong một cuộc hội thoại nhiều lượt mà vẫn bảo toàn bản ghi suy nghĩ trước đó, điều này loại bỏ một kỹ thuật chắt lọc đã được ghi nhận. Lý do thực tế là những chỉnh sửa làm hỏng kiểm tra cũng khởi động lại bộ đệm prompt, vì vậy mã vượt qua kiểm tra cũng là mã nhận được 0,25 đô la cho mỗi triệu lượt đọc bộ đệm trong mỗi lượt.
Ai bị ảnh hưởng
Được áp dụng mặc định: các tài khoản được tạo vào hoặc sau ngày 31 tháng 8 năm 2026. Điều này bao gồm các tổ chức API của Claude, tài khoản Amazon Bedrock, dự án Google Cloud và tài nguyên Microsoft Foundry.
Được ghi nhận nhưng không bắt buộc: các tài khoản được tạo trước đó. API ghi nhận sự không khớp nhưng chỉ hành động khi yêu cầu đặt thinking.block_binding.prefix_mismatch_behavior thành bất kỳ giá trị nào, bao gồm "error". Anthropic nói rằng các mô hình trong tương lai sẽ bắt buộc áp dụng nó cho mọi người.
Không bị ảnh hưởng: Claude Code, claude.ai, Claude Managed Agents và Claude Agent SDK, những thứ này giữ nguyên tiền tố cho bạn. Claude Mythos 5.1 hoàn toàn không chạy kiểm tra này, mặc dù các chỉnh sửa lịch sử vẫn khởi động lại bộ đệm của nó.
Bị ảnh hưởng: bất kỳ mã nào tự xây dựng mảng messages. Đó là mọi vòng lặp tác nhân tùy chỉnh, mọi phần phụ trợ trò chuyện và mọi framework gói API Messages.
Cạm bẫy cho các tác giả công cụ: nếu bạn phát hành thứ gì đó mà mọi người chạy bằng khóa API của riêng họ, khóa của bạn có thể trên một tài khoản cũ hơn và của họ thì không. Hãy kiểm tra với trường được đặt, để bạn gặp phải kiểm tra trước khi người dùng của bạn làm. Để biết tài khoản của bạn có bị bắt buộc áp dụng hay không, hãy gửi yêu cầu chỉnh sửa lịch sử mà không có tiêu đề beta; lỗi 400 nêu tên tiêu đề có nghĩa là nó bị bắt buộc.
Điều gì làm mất hiệu lực mọi khối suy nghĩ sau đó
- Chỉnh sửa, sắp xếp lại hoặc xóa một lượt trước đó. Điều đó bao gồm xóa kết quả công cụ cũ, cắt các lượt từ giữa bản ghi, và nén phía máy khách giữ nguyên các lượt gần đây nguyên văn sau một bản tóm tắt.
- Chèn nội dung bạn không duy trì. Một lời nhắc mỗi lượt được thêm vào sau kết quả công cụ và bị xóa trong yêu cầu tiếp theo. Một dòng trạng thái. Một số lượng token còn lại thay đổi mỗi lượt.
- Xây dựng lại
systemhoặctoolsgiữa các yêu cầu. Cập nhật ngày hiện tại trong lời nhắc hệ thống. Thêm hoặc xóa một công cụ giữa phiên. - Một URL hình ảnh hoặc tài liệu phục vụ các byte khác nhau sau này. Các byte được ràng buộc, không phải chuỗi URL, vì vậy một URL đã ký xoay vòng cho cùng một tệp là ổn.
- Xóa một khối suy nghĩ từ bất kỳ đâu ngoài phần đầu của lượt chạy. Các khối dẫn đầu có thể bị xóa, từ cũ nhất trước. Một khối từ giữa thì không thể.
Điều gì giữ cho chúng hợp lệ
- Lịch sử chỉ thêm vào, bao gồm các tin nhắn
role: "system"được thêm vào và các tin nhắn phạm vi lượt đã xóa được giữ nguyên. - Xóa một chuỗi các khối suy nghĩ dẫn đầu, từ cũ nhất trước.
- Thay đổi bất kỳ tham số nào ngoài
system,toolsvàmessages:max_tokens,output_configbao gồmeffort,tool_choice,metadata. - Thêm, di chuyển hoặc xóa các đánh dấu
cache_control. - Nén phía máy chủ và chỉnh sửa ngữ cảnh, bao gồm xóa khối suy nghĩ. Chúng không được tính là chỉnh sửa vì kiểm tra so sánh cuộc hội thoại như bạn đã gửi, không phải bản sao đã chỉnh sửa của máy chủ. Sau khi nén, tiền tố được kiểm tra bắt đầu từ khối nén.
Lối thoát hiểm: drop_block
Gửi tiêu đề beta thinking-binding-controls-2026-08-01 và đặt trường một cách rõ ràng:
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)
Với "drop_block", API sẽ bỏ khối không khớp đầu tiên và mọi khối suy nghĩ sau đó, tiếp tục xử lý yêu cầu và báo cáo mỗi lần bỏ trong một mảng input_transformations cấp cao nhất:
"input_transformations": [
{"type": "thinking_dropped", "path": "messages.1.content.0", "reason": "prefix_binding_mismatch"}
]
Ba điều cần biết về trường này. Nó chỉ áp dụng cho yêu cầu đó, vì vậy hãy tiếp tục gửi nó cho phần còn lại của phiên. Các giá trị mặc định khác nhau tùy theo bề mặt: không có tiêu đề, một tài khoản bị bắt buộc sẽ báo lỗi; chỉ gửi tiêu đề sẽ chuyển sang mặc định của beta, đó là drop_block; vì vậy hãy đặt nó một cách rõ ràng và đừng bao giờ dựa vào bất kỳ mặc định nào. Và gửi block_binding mà không có tiêu đề sẽ là lỗi 400 kết thúc bằng block_binding: Extra inputs are not permitted.
Trường reason phân biệt hai trường hợp. prefix_binding_mismatch có nghĩa là lịch sử của bạn đã thay đổi. model_binding_mismatch có nghĩa là cuộc hội thoại đã chuyển đổi mô hình (một bộ định tuyến, thử lại, dự phòng từ chối) và mục tiêu không thể đọc khối Fable 5.1. Trường hợp thứ hai không phải là lỗi trong mã của bạn. Với tiêu đề, mọi phản hồi đều mang theo mảng, rỗng khi không có gì bị bỏ.
Bỏ các khối một lần, tại một ranh giới nén, tốn ít chi phí. Một hệ thống điều khiển tác nhân làm mất hiệu lực lịch sử của chính nó trong mỗi yêu cầu sẽ mất lý do của mô hình mỗi lượt và khởi động lại bộ đệm prompt mỗi lượt, và Anthropic cảnh báo rằng điều đó làm tăng chi phí cho mỗi tác vụ. Coi drop_block như một công cụ chẩn đoán và một mạng lưới an toàn, không phải là trạng thái ổn định.
Khôi phục không dùng beta
Trên một nền tảng không có các điều khiển (Microsoft Foundry không cung cấp chúng khi ra mắt; Bedrock và Google Cloud đang thêm chúng theo từng mô hình), hãy loại bỏ mọi khối thinking và redacted_thinking khỏi lịch sử, giữ các khối text và tool_use của mỗi lượt, và thử lại một lần. Mô hình trả lời lượt đó mà không có lý do mà các khối đó mang lại. Đây là một cách khôi phục một lần, không phải là một mẫu.
Kiểm tra ba bước
Hãy chạy điều này trước khi bạn chuyển đổi lưu lượng truy cập, không phải sau đó.
- Chụp các nội dung yêu cầu chính xác mà hệ thống điều khiển tác nhân của bạn gửi qua vài lượt thông thường, bao gồm nén hoặc thay đổi công cụ nếu sản phẩm của bạn có chúng. Đối với mỗi cặp yêu cầu liên tiếp, hãy so sánh lời nhắc
system, mảngtoolsvà tiền tố chung củamessages. Chúng phải là byte-giống hệt cho đến các lượt mới được thêm vào. - Chạy một phiên đa lượt thông thường với
claude-fable-5-1cùng tiêu đề beta vàprefix_mismatch_behavior: "drop_block", ghi lạiinput_transformationstrên mỗi phản hồi. Một mảng rỗng mỗi lượt có nghĩa là lịch sử còn nguyên vẹn. Một mụcprefix_binding_mismatchcó nghĩa là một cái gì đó trước khối tạipathđã thay đổi. Điều này hoạt động từ bất kỳ tài khoản nào, vì việc đặt trường này cho phép yêu cầu được áp dụng bắt buộc. Trong CI, hãy đặt"error"thay vào đó để một chỉnh sửa làm thất bại lượt chạy. - Chọn một cài đặt sản xuất và đặt nó một cách rõ ràng dưới tiêu đề:
"error"nếu sự không khớp chỉ có thể có nghĩa là một lỗi,"drop_block"để suy giảm thay vì thất bại. Giám sát các lỗi 400 hoặc các mụcinput_transformationstheo một trong hai cách. Đừng để trường không được đặt trên một tài khoản cũ hơn, bởi vì khi đó kiểm tra chỉ ghi nhận phía máy chủ và bạn không nhận được gì để giám sát.
Trong Apidog, bước 2 là một kiểm tra hai yêu cầu: gửi một lượt, chỉnh sửa lời nhắc hệ thống, gửi lượt tiếp theo với tiêu đề được đặt và xác nhận trên input_transformations. Giữ nó trong bộ sưu tập để mỗi thay đổi hệ thống điều khiển tác nhân sẽ chạy lại. Tải xuống Apidog để xây dựng nó.
Biến hệ thống điều khiển tác nhân thành chỉ thêm vào
Mỗi hàng thay thế một chỉnh sửa lịch sử bằng một cái gì đó giữ nguyên tiền tố và giữ cho bộ đệm hoạt động hiệu quả.
| Bạn đã làm | Hãy làm điều này thay vào đó |
|---|---|
| Chỉnh sửa lời nhắc hệ thống giữa phiên (ngày mới, chế độ mới) | Đóng băng system khi bắt đầu phiên. Thêm {"role": "system", "content": "The current date is 2026-09-14."} tại thời điểm thay đổi trở thành sự thật (tin nhắn hệ thống giữa cuộc hội thoại). Không có tiêu đề beta; nó có quyền hạn lời nhắc hệ thống và trở thành một phần của tiền tố mà các khối sau này được gắn vào. |
Chỉnh sửa mảng tools giữa phiên |
Khai báo toàn bộ tập hợp khi bắt đầu phiên (defer_loading: true trên những cái ban đầu bị ẩn). Gửi các khối tool_addition và tool_removal trong một tin nhắn role: "system" (beta mid-conversation-tool-changes-2026-07-01). |
| Chèn một lời nhắc mỗi lượt và xóa nó trong yêu cầu tiếp theo | Gửi nó dưới dạng tin nhắn hệ thống phạm vi lượt: {"role": "system", "clear_at": "next_user_message", "content": "..."} (beta mid-conversation-system-clear-at-2026-08-21) sau tin nhắn kết quả công cụ, và giữ nguyên mọi bản sao trước đó. Các bản sao đã xóa không hiển thị gì và không tốn chi phí. Nếu không có beta, đặt lời nhắc vào một khối văn bản sau các khối tool_result trong cùng một tin nhắn người dùng, giữ nguyên các bản sao trước đó. |
| Xóa kết quả công cụ cũ phía máy khách | Chỉnh sửa ngữ cảnh phía máy chủ với việc xóa kết quả công cụ. |
| Nén trên máy khách | Ưu tiên nén phía máy chủ (beta compact-2026-01-12; tham số instructions của nó nhận lời nhắc tóm tắt của riêng bạn). Nếu bạn vẫn ở phía máy khách, hãy sử dụng nén đơn giản: thay thế toàn bộ lịch sử bằng một tin nhắn tóm tắt cộng với lượt người dùng mới và không phát lại bất cứ điều gì khác. |
| Tham chiếu hình ảnh hoặc tài liệu bằng URL qua các lượt | Tải lên một lần vào Files API và gửi file_id, hoặc gửi base64. |
Hai dạng nén phía máy khách bị hỏng dưới kiểm tra và cần drop_block hoặc các khối suy nghĩ đã loại bỏ trên các lượt được giữ lại. Nén giữ đuôi (tóm tắt các lượt cũ hơn, giữ nguyên lượt gần đây nhất nguyên văn) thất bại trên các lượt được giữ lại, vì suy nghĩ của chúng được tạo ra dựa trên toàn bộ lịch sử. Nén nền (xây dựng tóm tắt ngoài đường dẫn quan trọng và hoán đổi nó sau này) thất bại trên mọi lượt được tạo ra giữa thời điểm bắt đầu tóm tắt và hoán đổi. Cắt các lượt riêng lẻ ra khỏi giữa bản ghi sẽ làm mất hiệu lực mọi khối sau này, và không có dạng phía máy khách nào tránh được điều đó. Sử dụng một tin nhắn hệ thống giữa cuộc hội thoại cho thay đổi hướng dẫn bạn đang thực hiện, hoặc chỉnh sửa ngữ cảnh phía máy chủ để xóa chọn lọc.
Một cân nhắc chi phí nữa: vì đọc bộ đệm hiện là 0,25 đô la cho mỗi triệu, việc nén sớm để tiết kiệm tiền có thể không còn là sự đánh đổi đúng đắn trên Fable 5.1. Anthropic gợi ý thử nghiệm với các điểm nén muộn hơn.
Tại sao đây cũng là câu chuyện về bộ đệm
Mọi thứ trong bảng trên cũng là danh sách những điều khởi động lại bộ đệm prompt. Fable 5.1 làm cho các lượt truy cập bộ đệm rẻ hơn bốn lần so với Fable 5 và làm cho các lượt bỏ lỡ đau đớn hơn một cách tương ứng, vì vậy một hệ thống điều khiển tác nhân chỉ thêm vào được hưởng lợi gấp đôi: suy nghĩ tồn tại, và mỗi lượt đọc tiền tố với giá 0,25 đô la thay vì viết lại nó với giá 12,50 đô la. Phân tích giá có các con số; hướng dẫn API hiển thị các dạng yêu cầu phạm vi lượt và nỗ lực trên mỗi tin nhắn trong ngữ cảnh, hướng dẫn prompt bao gồm những hướng dẫn mỗi lượt nào đáng gửi theo cách đó, và hướng dẫn Claude Code giải thích tại sao người dùng Claude Code không bao giờ thấy lỗi này.
Câu hỏi thường gặp
“Khối được gắn với một cuộc hội thoại khác” nghĩa là gì? Một khối suy nghĩ của Claude Fable 5.1 đã được phát lại sau khi có thứ gì đó trước đó thay đổi: lời nhắc hệ thống, mảng công cụ hoặc một tin nhắn trước đó. API từ chối yêu cầu với lỗi 400 trên các tài khoản bị bắt buộc.
Tài khoản nào bắt buộc kiểm tra lịch sử Fable 5.1? Các tài khoản được tạo vào hoặc sau ngày 31 tháng 8 năm 2026, trên mọi nền tảng. Các tài khoản cũ hơn chỉ bắt buộc nó khi một yêu cầu đặt thinking.block_binding.prefix_mismatch_behavior. Anthropic có kế hoạch bắt buộc nó cho mọi người trên các mô hình trong tương lai.
Làm thế nào để tôi loại bỏ lỗi nhanh chóng? Gửi tiêu đề beta thinking-binding-controls-2026-08-01 với prefix_mismatch_behavior: "drop_block". API sẽ bỏ các khối bị ảnh hưởng và tiếp tục. Sau đó sửa lỗi chỉnh sửa lịch sử, vì việc bỏ các khối mỗi lượt sẽ làm mất lý do và khởi động lại bộ đệm của bạn.
Thay đổi nỗ lực (effort) hoặc max_tokens có làm mất hiệu lực các khối suy nghĩ không? Không. Bất kỳ tham số nào ngoài system, tools và messages đều có thể thay đổi tự do, và các đánh dấu cache_control cũng vậy.
Nén phía máy chủ có làm hỏng kiểm tra không? Không. Nén và chỉnh sửa ngữ cảnh xảy ra sau kiểm tra, kiểm tra này so sánh cuộc hội thoại như bạn đã gửi. Nén phía máy khách giữ nguyên các lượt gần đây nguyên văn sẽ làm hỏng nó.
Claude Mythos 5.1 có cùng kiểm tra không? Không. Mythos 5.1 không chạy kiểm tra cuộc hội thoại, mặc dù nó vẫn gắn các khối suy nghĩ với mô hình sản xuất và các chỉnh sửa lịch sử vẫn khởi động lại bộ đệm của nó.
