From budget_tokens to adaptive thinking + effort on the Claude API
TL;DR
Newer Claude models use adaptive thinking: the model decides whether to think, and you steer it with output_config.effort (low to max). Thinking tokens are billed even when hidden; set effort explicitly and leave room in max_tokens.
Nếu code của bạn vẫn gửi thinking: {"type": "enabled", "budget_tokens": 10000} lên Claude API, đã đến lúc xem lại. Theo tài liệu Anthropic, cách "đặt ngân sách token cho suy nghĩ" (extended thinking thủ công) đã deprecated trên dòng 4.6 và bị từ chối với lỗi 400 từ Claude 4.7 trở đi. Thay vào đó là adaptive thinking: model tự quyết có cần nghĩ hay không và nghĩ bao nhiêu, còn bạn điều khiển độ "chịu khó" bằng một tham số duy nhất là effort. Bài này giải thích cơ chế, cách migrate và cách chọn mức effort.
Hai núm điều khiển: thinking và effort
| Tham số | Điều khiển gì | Giá trị |
|---|---|---|
thinking.type | Có khối suy nghĩ trước câu trả lời không | adaptive (mới), enabled (cũ, model ≤ 4.6), disabled (tuỳ model) |
output_config.effort | Mức đầu tư cho toàn bộ output: thinking, text, cả số lần gọi tool | low, medium, high, xhigh, max |
thinking.display | Có trả về phần tóm tắt suy nghĩ không | summarized hoặc omitted |
Điểm quan trọng: effort ảnh hưởng mọi token output, không chỉ thinking. Effort thấp thường đồng nghĩa ít tool call hơn, ít giải thích hơn, đi thẳng vào hành động. Effort là tín hiệu hành vi, không phải trần token cứng; max_tokens mới là giới hạn cứng.
Migrate trong 3 dòng
// Trước (manual extended thinking)
{ "thinking": { "type": "enabled", "budget_tokens": 10000 } }
// Sau (adaptive thinking)
{
"thinking": { "type": "adaptive" },
"output_config": { "effort": "high" }
}
Khác biệt hành vi cần biết: với ngân sách cố định, Claude nghĩ ở mọi request. Với adaptive, ở effort thấp model có thể bỏ qua suy nghĩ hoàn toàn cho câu hỏi dễ. Nếu bạn dùng beta header interleaved-thinking-2025-05-14, có thể bỏ: adaptive tự xen kẽ suy nghĩ giữa các lần gọi tool.
Mặc định khác nhau theo model
- Phần lớn model hỗ trợ effort mặc định là
high; Claude Opus 5.5 và Haiku 5.5 mặc địnhmedium. Bỏ trống tham số trên Opus 5.5 nghĩa là chạy thấp hơn một bậc so với Opus 5. - Trên nhiều model thế hệ 5.x, thinking luôn bật và không gửi được
disabled(trả 400). Sonnet 5.5 có kiểu riêngbetween_toolsđể tắt suy nghĩ đầu câu trả lời; Haiku 5.5 chấp nhậndisabledở effort từhightrở xuống. displaymặc định làomittedtrên các model mới: khối thinking trả về với nội dung rỗng, chỉ cònsignaturemã hoá. Muốn xem tóm tắt thì đặt"display": "summarized".
Chọn mức effort
| Mức | Dùng cho |
|---|---|
low | Việc đơn giản, khối lượng lớn, cần nhanh: phân loại, subagent, chat |
medium | Agent cần cân bằng tốc độ, chi phí, chất lượng |
high | Suy luận phức tạp, bài code khó, agentic task |
xhigh | Agent/coding chạy dài (tài liệu nêu mốc trên 30 phút), ngân sách token rất lớn |
max | Bài toán khó nhất; thường tốn nhiều hơn hẳn mà lợi ích nhỏ |
Khuyến nghị chung của Anthropic: đặt effort tường minh thay vì dựa vào mặc định, và chạy "effort sweep" trên bộ eval của bạn khi đổi model, thay vì bê nguyên cấu hình cũ sang.
Chi phí và các bẫy
- Trả tiền cho toàn bộ suy nghĩ: token thinking tính là output token, kể cả khi
display: omittedhoặc bạn chỉ thấy bản tóm tắt. Số token bị tính sẽ không khớp với số token bạn nhìn thấy. - Đặt
max_tokensđủ rộng: thinking tính chung vàomax_tokens. Với effort cao, đặt quá thấp dễ bị cắt giữa chừng. - Prompt cache: đổi effort cấp request hoặc đổi chế độ thinking giữa các lượt sẽ làm mất cache. Giữ cố định trong một hội thoại dài; một số model 5.x có tính năng đổi effort theo từng message (beta) mà vẫn giữ cache.
- Tool use: phải gửi lại khối
thinking/redacted_thinkingnguyên vẹn. Sửa, lọc, đảo thứ tự sẽ gặp lỗi 400. - Request dài: với effort cao và output lớn, dùng streaming hoặc Batch API để tránh timeout mạng.
Áp dụng thế nào?
- Dev: grep code tìm
budget_tokens, thay bằngadaptive+ effort tường minh. Ghi logusageđể theo dõi phần thinking thực tế bị tính phí. - Tech Lead: Thiết lập effort theo loại việc:
lowcho subagent/phân loại,medium/highcho agent chính. Chạy eval trước khi nâng model. - PM: Effort là núm vặn chi phí–chất lượng rõ ràng nhất. Thử hạ một bậc cho tính năng ít quan trọng, đo xem người dùng có nhận ra không.
Sources & references
- Extended thinking — Claude Docs
- Effort — Claude Docs
- Thinking — Claude Docs