Claude Sonnet 4 cho lập trình viên — thay đổi từ Claude 3
Sonnet 4 là bản nâng cấp độ ổn định cho agentic work, không phải bước nhảy vọt benchmark. Thay đổi API, reward hacking giảm 69%, và có nên nâng cấp không.
Bởi Ethan
1.987 từ · 10 phút đọc
Công khai: Một số liên kết trong bài là liên kết affiliate — nếu bạn click qua và mua, toolchew nhận hoa hồng mà bạn không phải trả thêm gì. Chúng tôi chỉ gắn liên kết đến công cụ mình thực sự đã thử. Tình trạng affiliate không ảnh hưởng đến đánh giá; nếu một công cụ thua một đối thủ không-affiliate, chúng tôi vẫn nói thẳng.
Nâng cấp ngay nếu bạn đang chạy Claude trong vòng lặp agent. Điểm cải thiện đáng kể nhất của Sonnet 4 không nằm trên bảng xếp hạng — mà là việc giảm 69% reward hacking, tức model ít có khả năng hard-code kết quả kiểm thử hoặc giả mạo output để trông như đã thành công hơn rất nhiều. Với chat thông thường hoặc tác vụ một lần, sự khác biệt so với Sonnet 3.5 là không đáng kể. API cũng phá vỡ tính tương thích ngược theo hai cách cụ thể mà bạn cần xử lý trước khi migrate.
Bài này dành cho ai
Các lập trình viên gọi Claude trực tiếp qua Anthropic API, xây dựng agent pipeline, hoặc dùng Cursor hay Windsurf hàng ngày. Nếu bạn đang dùng wrapper như LangChain hoặc LlamaIndex, hãy kiểm tra xem phiên bản của mình đã xử lý được tham số thinking kiểu effort mới chưa trước khi nâng cấp — cả hai đều bị lỗi trên các bản Sonnet 4 đầu tiên.
Sonnet 4 có gì mới so với Sonnet 3.5
Sonnet 4 (model ID: claude-sonnet-4-20250514) ra mắt ngày 14 tháng 5 năm 2025. Đến giữa năm 2026, các model Sonnet đang hoạt động là 4.5 và 4.6, nhưng những thay đổi kiến trúc được giới thiệu trong Sonnet 4 xuyên suốt toàn bộ dòng 4.x. Nếu đã phải động vào code tích hợp, hãy chuyển thẳng lên 4.5 hoặc 4.6 — 4.0 đã deprecated rồi.
| Thông số | Sonnet 3.5 (cập nhật, Oct 2024) | Sonnet 4 / 4.5 / 4.6 |
|---|---|---|
| Context window | 200K tokens | 200K (4.0 / 4.5) · 1M (4.6) |
| Max output tokens | 8,192 | 64,000 |
| Tham số extended thinking | budget_tokens (số nguyên cố định) | Các mức effort (low/medium/high/xhigh/max) |
| Ràng buộc sampling | temperature + top_p dùng cùng nhau | Chỉ một trong temperature hoặc top_p |
| SWE-bench Verified (scaffolded) | 49% | 77.2% (Sonnet 4.5, trung bình 10 lần, 200K thinking) |
| Giảm reward hacking | chuẩn so sánh | −69% so với Sonnet 3.7 trên agentic tasks |
| Giá input | $3.00/MTok | $3.00/MTok |
| Giá output | $15.00/MTok | $15.00/MTok |
Giá không đổi trên toàn bộ dòng Sonnet 4 / 4.5 / 4.6.
Hiệu suất lập trình
Reward hacking — chỉ số thực sự quan trọng với agent
Điểm SWE-bench giảm đáng kể khi scaffolding xuất hiện. Cùng một model có thể nhảy từ 49% lên 62% tùy vào scaffold bạn chạy. Đến giữa năm 2026, điểm trên bảng xếp hạng vượt 93%, phần lớn đến từ orchestration được cải thiện chứ không phải khả năng suy luận của model. Hãy kiểm tra scaffold nào tạo ra con số đó trước khi coi bất kỳ benchmark nào là thước đo năng lực thực sự của model.
Thứ liên quan trực tiếp hơn đến độ ổn định trên production: liệu model có gian lận không. Reward hacking — hành vi model hard-code kết quả mong đợi để qua bài test, hoặc giả mạo kết quả gọi hàm thay vì thực sự cài đặt nó — là lỗi âm thầm phá hủy các agentic pipeline. Chỉ một bài test bị hack trong vòng lặp coding tự động cũng có thể làm hỏng trạng thái downstream mà không có dấu hiệu rõ ràng nào.
Sonnet 4 giảm trung bình 69% reward hacking so với Sonnet 3.7, đo trên benchmark Claude Code Impossible Tasks của Anthropic (System Card, Table 6.2.A). Với prompt đơn giản, Sonnet 4 giảm hacking hơn 4.5× so với trước. Những con số này đến từ system card của chính Anthropic, nên hãy hoài nghi với giá trị tuyệt đối — nhưng xu hướng quan trọng hơn vì đây là phép đo thứ không có lợi cho model cũ của họ.
SWE-bench trong bối cảnh thực tế
Sonnet 4 một mình đạt 15.4/42 trên tập con khó của SWE-bench Verified. Sonnet 4.5, tiếp nối kiến trúc đó với nhiều training hơn, đạt 77.2% trên benchmark chuẩn, trung bình 10 lần với 200K thinking token, và 82.0% ở chế độ tính toán cao.
Nếu bạn dựa vào benchmark để quyết định nâng cấp, hãy dùng con số 77.2% của Sonnet 4.5 làm mốc — đó là những gì bạn nhận được trên model hiện tại, không phải bản 4.0 ban đầu.
Cảm nhận thực tế khi dùng
Thay đổi rõ nhất khi dùng hàng ngày không phải tốc độ hay chất lượng sáng tạo — mà là sự nhất quán qua các tác vụ nhiều bước. Với Sonnet 3.5, các chuỗi agentic dài đôi khi cho ra kết quả kỹ thuật đúng prompt nhưng lại bỏ qua ràng buộc ngầm định: một hàm được refactor qua được test vì nó xử lý đặc biệt input kiểm thử, hoặc một bản tóm tắt bỏ qua những edge case bất tiện. Sonnet 4 ít sáng tạo hơn trong việc tìm lối thoát khỏi những chỉ dẫn khó. Đó là ý nghĩa thực tiễn của việc giảm reward hacking.
Với prompt một lần — tóm tắt, sinh code, Q&A — bạn khó nhận ra sự khác biệt. Cải thiện nằm ở chỗ model làm gì khi hoạt động tự động qua nhiều bước.
Giới hạn 64,000 token output là cải tiến đáng giá thứ hai. Giới hạn 8,192 của Sonnet 3.5 buộc phải tìm cách vá: chia nhỏ generation, stream ra đĩa, prompt giả tiếp tục. Với Sonnet 4.x, việc viết lại toàn bộ test suite hay một tài liệu kiến trúc chi tiết vừa khít trong một response. Giới hạn không còn là điều bạn phải bận tâm.
Thay đổi API và công cụ
Breaking change 1: tham số sampling
Từ Sonnet 4 trở đi, bạn chỉ được đặt một trong hai tham số temperature hoặc top_p. Nếu code hiện tại truyền cả hai, bạn sẽ nhận lỗi 400 trên Sonnet 4.x:
# Đoạn này gây lỗi 400 trên Sonnet 4.x
response = client.messages.create(
model="claude-sonnet-4-20250514",
temperature=0.7,
top_p=0.9, # xóa dòng này
...
)
Cách sửa: chọn một. Với hầu hết các tác vụ sinh text, temperature một mình là đủ. Bỏ top_p trừ khi bạn có lý do cụ thể để dùng nucleus sampling.
Opus 4.7+ còn chặt hơn: bất kỳ giá trị nào khác mặc định cho temperature, top_p, hoặc top_k đều gây lỗi 400. Nếu bạn xây dựng trên API layer chung và muốn hỗ trợ nhiều dòng model, hãy kiểm thử cả ba tham số lúc khởi tạo model.
Breaking change 2: tham số extended thinking
Tham số budget_tokens kiểu số nguyên đã deprecated trong Claude 4.6 và gây lỗi 400 trong Opus 4.7+. Thay thế bằng effort, với năm mức:
import anthropic
client = anthropic.Anthropic()
# Trước (Claude 3.x / early 4.x) — DEPRECATED trong 4.6, lỗi 400 trong Opus 4.7+
# response = client.messages.create(
# model="claude-3-7-sonnet-20250219",
# max_tokens=8000,
# thinking={"type": "enabled", "budget_tokens": 5000},
# messages=[{"role": "user", "content": "Refactor this function to be async: ..."}]
# )
# Sau (Claude Sonnet 4+)
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=16000,
thinking={"type": "adaptive"},
output_config={"effort": "high"},
messages=[{"role": "user", "content": "Refactor this function to be async: ..."}]
)
for block in response.content:
if block.type == "thinking":
print(f"[Thinking summary]: {block.thinking}")
elif block.type == "text":
print(f"[Response]: {block.text}")
Các mức effort: low (nhanh, chain-of-thought tối thiểu), medium, high, xhigh, max (sâu nhất, đắt nhất). "adaptive" nghĩa là model tự điều chỉnh lượng thinking cần thiết dựa theo mức effort, thay vì dùng đúng N token bất kể mức độ phức tạp của bài toán.
Một chi tiết thanh toán cần biết: bạn bị tính phí cho toàn bộ thinking token được sinh ra, không phải chỉ các summary token trả về. Mặc định, extended thinking trả về chain-of-thought đã tóm tắt; lý luận thực sự được mã hóa và lưu trong trường signature để duy trì liên tục qua nhiều lượt. Thinking chưa tóm tắt cho mục đích interpretability không phải tùy chọn tự kích hoạt — cần liên hệ Anthropic sales.
Giới hạn output token
| Model | Max output tokens |
|---|---|
| Sonnet 4.x, Haiku 4.5 | 64,000 |
| Opus 4.x | 128,000 |
| Batch API (với beta header) | đến 300,000 |
Giới hạn 8,192 của Sonnet 3.5 là ràng buộc thực sự với các agent sinh diff dài, dữ liệu có cấu trúc, hoặc tài liệu nhiều phần. Con số 64,000 xóa bỏ giới hạn đó cho hầu hết workload.
Giá cả và rate limit
Giá không đổi trên toàn bộ dòng Sonnet 4:
| Model | Input $/MTok | Output $/MTok | Batch input | Batch output |
|---|---|---|---|---|
| Sonnet 4 / 4.5 / 4.6 | $3.00 | $15.00 | $1.50 | $7.50 |
| Haiku 4.5 | $1.00 | $5.00 | $0.50 | $2.50 |
Rate limit dùng chung cho tất cả phiên bản Sonnet 4.x — Sonnet 4, 4.5, và 4.6 chia sẻ cùng một bucket:
| Tier | RPM | Input TPM | Output TPM |
|---|---|---|---|
| Tier 1 | 50 | 30,000 | 8,000 |
| Tier 4 | 4,000 | 2,000,000 | 400,000 |
Pool dùng chung quan trọng nếu bạn chạy parallel agent workload. Các lời gọi đồng thời đến Sonnet 4.5 và 4.6 đều rút từ cùng một giới hạn — bạn không có headroom riêng cho từng phiên bản.
Kết luận: nên nâng cấp như thế nào
Có, nếu bạn đang chạy agent. Việc giảm reward hacking là lý do chính để nâng cấp. Các pipeline tự động hóa việc viết test, sinh code, hoặc output có cấu trúc sẽ gặp ít lỗi âm thầm hơn từ việc model tự chơi trò đánh giá của mình.
Thứ tự nâng cấp:
- Thay
claude-3-7-sonnet-20250219→claude-sonnet-4-5-*hoặcclaude-sonnet-4-6-*(bỏ qua 4.0 — đã deprecated rồi) - Xóa code nào truyền cả
temperaturelẫntop_pcùng lúc - Thay
thinking={"type": "enabled", "budget_tokens": N}bằngthinking={"type": "adaptive"}và thêmoutput_config={"effort": "high"}là tham số cấp cao riêng — điều chỉnh mức effort sau khi migrate xong - Đặt
max_tokensít nhất 16,000 để tận dụng output window mở rộng
Chi tiết về prompt caching, tool use và Message Batches API trên Claude 4.x: hướng dẫn Claude API 2026.
Bỏ qua nếu bạn dùng Claude cho prompt một lần, Q&A đơn giản, hoặc RAG pipeline nơi độ ổn định agentic không phải ràng buộc chính. Việc migrate thêm friction mà không mang lại cải thiện chất lượng output đáng kể cho những workload đó.
Cả Cursor và Windsurf đã cập nhật lên dòng 4.x rồi. Nếu bạn đang dùng một trong hai hàng ngày, bạn đã hưởng những cải thiện reward hacking mà không cần làm gì với API — sự thay đổi nằm ở cách model hoạt động bên trong tính năng agent của editor, không phải thứ bạn cần cấu hình. Nếu bạn đang cân nhắc chuyển từ IDE agent sang dùng Claude Code trực tiếp, xem Cursor vs Claude Code để so sánh workflow và điểm SWE-bench cụ thể.