Vấn đề
Anthropic ghi trong migration guide: tokenizer mới của Claude Opus 4.7 dùng “roughly 1.0 đến 1.35x” token so với 4.6. Bài viết này đo thực tế và kết quả khác đáng kể.
Phương pháp đo
Dùng API POST /v1/messages/count_tokens — Anthropic’s free token counter, không tốn chi phí inference. Cùng một nội dung, hai model, so sánh trực tiếp.
Hai bộ samples:
- 7 mẫu nội dung thực tế Claude Code users gửi: CLAUDE.md file, user prompts, blog posts, git logs, terminal output, stack traces, code diffs
- 12 mẫu synthetic theo loại content: English prose, code, structured data, CJK, emoji, math
Kết quả: Content thực tế của Claude Code users
| Content | 4.6 tokens | 4.7 tokens | Tỷ lệ |
|---|---|---|---|
| CLAUDE.md (5KB) | 1,399 | 2,021 | 1.445x |
| User prompt thông thường | 1,122 | 1,541 | 1.373x |
| Blog post (Markdown) | 1,209 | 1,654 | 1.368x |
| Git commit log | 910 | 1,223 | 1.344x |
| Terminal output (pytest) | 652 | 842 | 1.291x |
| Python stack trace | 1,736 | 2,170 | 1.250x |
| Code diff | 1,226 | 1,486 | 1.212x |
Trung bình có trọng số: 1.325x (8,254 → 10,937 tokens).
Kết quả: Theo loại content
| Content | 4.6 | 4.7 | Tỷ lệ |
|---|---|---|---|
| Technical docs (English) | 478 | 704 | 1.47x |
| Shell script | 1,033 | 1,436 | 1.39x |
| TypeScript code | 1,208 | 1,640 | 1.36x |
| Spanish prose | 733 | 986 | 1.35x |
| Python code | 864 | 1,112 | 1.29x |
| English prose | 508 | 611 | 1.20x |
| JSON (dense) | 13,939 | 15,706 | 1.13x |
| Japanese prose | 856 | 866 | 1.01x |
| Chinese prose | 779 | 789 | 1.01x |
CJK (Nhật, Trung) không bị ảnh hưởng — 1.01x trên cả hai.
Lý do kỹ thuật
Ba pattern từ dữ liệu:
-
CJK, emoji, symbols: 1.005–1.07x — vocabulary mới không thay đổi nhiều ở phần non-Latin.
-
English và code: 1.20–1.47x — 4.7 dùng sub-word merges ngắn hơn hoặc ít hơn cho các pattern English và code phổ biến so với 4.6.
-
Code bị ảnh hưởng nặng hơn prose (1.29–1.39x vs 1.20x) — Code có nhiều high-frequency strings lặp lại (keywords, imports, identifiers) — chính xác là những pattern mà BPE tokenizer trained trên code sẽ collapse thành long merges.
Chars-per-token với English: giảm từ 4.33 xuống 3.60. TypeScript: giảm từ 3.66 xuống 2.69.
Ý nghĩa với dev
Nếu bạn đang chạy Claude Code với context lớn bằng tiếng Anh hoặc code:
- Quota Max hết nhanh hơn ~1.3x
- Cached prefix tốn nhiều hơn mỗi turn
- Rate limit hit sớm hơn
Giá sticker không đổi, nhưng effective cost tăng. Anthropic có thể đang trading điều này cho model quality tốt hơn — bài viết gốc còn đo cả phần “bạn nhận lại được gì” nhưng phần đó cần đọc trực tiếp.
Code đo
from anthropic import Anthropic
client = Anthropic()
for model in ["claude-opus-4-6", "claude-opus-4-7"]:
r = client.messages.count_tokens(
model=model,
messages=[{"role": "user", "content": sample_text}],
)
print(f"{model}: {r.input_tokens} tokens")
API count_tokens miễn phí, không tốn inference cost. Có thể tự đo với content của mình.