Effort trong Claude Code: chọn mức nỗ lực và model sao cho đáng tiền
Đổi tên một biến mà Claude nghĩ mãi, sửa một bug khó thì nó báo xong quá sớm? Thường là do chọn sai effort. Bài này giải thích effort trong Claude Code là gì, mặc định của từng model, cách chọn theo loại việc, kết hợp với model và cách đo chi phí.
Buổi sáng bạn nhờ Claude Code đổi tên prop userId thành accountId trong vài component. Việc đơn giản, nhưng Claude đọc đi đọc lại, giải thích kế hoạch, rồi mới sửa. Buổi chiều bạn gặp một bug race condition trong luồng thanh toán, Claude sửa một chỗ, báo "đã xong", và bug vẫn còn khi bạn test lại.
Hai tình huống ngược nhau nhưng thường chung một nguyên nhân: mức effort không khớp với độ khó của việc. Việc dễ đang chạy ở mức cao, việc khó đang chạy ở mức thấp. Bài này giải thích effort trong Claude Code hoạt động thế nào, cách chọn mức theo từng loại việc, kết hợp effort với model ra sao, và cách đo xem lựa chọn của bạn tốn bao nhiêu. Bài viết theo Claude Code v2.1.293.
Effort là gì
Effort là thiết lập cho biết Claude nên bỏ bao nhiêu công sức (tính bằng token) cho một yêu cầu. Theo docs của Claude API, effort ảnh hưởng tới mọi token Claude sinh ra, không chỉ phần suy nghĩ:
- Thinking: mức cao thì Claude suy nghĩ thường xuyên và sâu hơn, mức thấp thì có thể bỏ qua suy nghĩ với việc đơn giản.
- Tool call: mức thấp gộp thao tác, gọi tool ít hơn và đi thẳng vào việc. Mức cao gọi tool nhiều hơn, giải thích kế hoạch trước khi làm, tóm tắt thay đổi chi tiết hơn.
- Câu trả lời: mức thấp xác nhận ngắn gọn, mức cao giải thích kỹ hơn.
Một điểm dễ hiểu nhầm: effort là tín hiệu hành vi, không phải giới hạn token cứng. Ở mức thấp, Claude vẫn suy nghĩ khi gặp vấn đề đủ khó, chỉ là ít hơn so với mức cao cho cùng vấn đề đó.
Giống giao việc cho đồng nghiệp kèm câu "làm nhanh giúp anh" hoặc "từ từ, kiểm tra kỹ vào": cùng năng lực, nhưng mức tự xác minh khác hẳn. Bài Using Claude Code: Spending your effort trên claude.dev của Thariq Shihipar tóm ý này khá gọn: "Higher effort will involve Claude taking more independent action for judgement and verification." Nói cách khác, effort cao chủ yếu mua thêm kiểm tra và xử lý edge case, chứ không biến một model thành model khác.
Các mức effort và mặc định của từng model
Claude Code có 5 mức. Bảng dưới tóm tắt hướng dẫn trong docs Claude Code, kèm ví dụ quen thuộc với dev:
| Mức | Docs gợi ý dùng cho | Ví dụ |
|---|---|---|
low | Trao đổi nhanh mà bạn review từng kết quả: brainstorm, phác thảo, thay đổi nhỏ | Đổi tên biến, thêm class Tailwind, viết lại một câu lỗi |
medium | Việc hằng ngày có phạm vi rõ (mặc định của Opus 5.5, Sonnet 5.5, Haiku 5.5) | Thêm một trang CRUD theo mẫu có sẵn trong dự án |
high | Việc cần xác minh hoặc nhiều edge case, như sửa bug trong codebase có sẵn | Bug form submit hai lần, lỗi hydration trong Next.js |
xhigh | Suy luận sâu hơn, tốn token hơn đáng kể | Refactor chạm nhiều module, task dài |
max | Bài toán khó bạn muốn Claude tự làm tới cùng, như tìm lỗ hổng bảo mật | Audit luồng auth, race condition khó tái hiện |
Docs cũng cảnh báo max có thể cho lợi ích giảm dần và dễ overthinking, nên thử trên việc thật trước khi dùng rộng.
Mặc định khác nhau theo model, và đây là chỗ nhiều người đang bị lệch so với thói quen cũ:
| Model | Giá API (input/output, USD per 1M token) | Effort mặc định trong Claude Code |
|---|---|---|
| Haiku 5.5 | $0.10/$0.50 (prompt tới 100K token) | medium |
| Sonnet 5.5 | $2/$10 | medium |
| Opus 5.5 | $4/$20 | medium |
| Fable 5.1 | $10/$50 | high |
Với Opus 5 (và hầu hết model trước đó), mặc định là high. Từ Opus 5.5, mặc định hạ xuống medium. Nếu bạn quen cảm giác "Claude kỹ tính" từ Opus 5 và thấy Opus 5.5 hơi vội trên một việc cụ thể, có thể là do bạn đang chạy thấp hơn một mức so với trước. Docs vẫn khuyên bắt đầu Opus 5.5 ở medium thay vì mang mức cũ sang, rồi chỉ nâng lên high cho đúng việc cần. Chi tiết về model này có ở bài Claude Opus 5.5.
Một lưu ý cho ai gọi API trực tiếp: trên Claude API, Sonnet 5.5 mặc định high (Opus 5.5 và Haiku 5.5 mặc định medium), còn trong Claude Code cả ba đều mặc định medium. Docs API cũng khuyên bắt đầu Sonnet 5.5 ở medium cho agentic coding có yêu cầu rõ và lên high cho việc khó hoặc dài hơn, nên mặc định của Claude Code khớp với khuyến nghị đó.
Effort và thinking: khác nhau thế nào
Trên Opus 5.5, Sonnet 5.5, Haiku 5.5 và Fable 5.1, Claude dùng adaptive thinking: model tự quyết định có suy nghĩ ở từng bước hay không, sâu tới đâu, dựa trên effort và độ khó của việc. Trên các model này bạn không tắt được thinking trong Claude Code: /config báo không tắt được, MAX_THINKING_TOKENS=0 không có tác dụng. Effort là núm điều chỉnh chính.
Ba điều nên biết:
- Thinking bị tính tiền dù bạn không thấy. Claude Code thu gọn phần thinking mặc định (nhấn
Ctrl+Ođể bật verbose, đặtshowThinkingSummaries: truetrong settings nếu muốn xem tóm tắt đầy đủ). Token thinking vẫn tính như output token. ultrathinklà từ khóa duy nhất được nhận diện. Thêmultrathinkvào prompt để yêu cầu suy luận sâu hơn cho riêng lượt đó, effort của phiên giữ nguyên. Các cụm như "think hard", "think more" chỉ là chữ bình thường trong prompt, Claude Code không coi là từ khóa.- Ultracode không phải một mức effort, mà là thiết lập lập dynamic workflow cho task lớn ở bất kỳ mức nào (
/effort ultracode, tắt bằng/effort ultracode off).
Cách đổi effort trong Claude Code
/effort # mở thanh trượt để chọn mức
/effort high # đặt trực tiếp: low | medium | high | xhigh | max
/effort auto # xóa mức đã lưu, quay về mặc định của model
/effort status # in mức hiện tạiTrong thanh trượt của /effort hoặc /model, nhấn Enter để lưu làm mặc định cho các phiên sau, nhấn s để chỉ áp dụng cho phiên hiện tại. Mức đang dùng hiện ở header phiên, cạnh tên model.
Khi mở phiên mới từ terminal:
# Chỉ áp dụng cho phiên này, không lưu
claude --effort low
# Áp dụng cho mọi phiên tới khi bạn bỏ biến này, ưu tiên cao hơn mức đã lưu
export CLAUDE_CODE_EFFORT_LEVEL=highThứ tự ưu tiên: lựa chọn rõ ràng của bạn (biến môi trường CLAUDE_CODE_EFFORT_LEVEL, cờ --effort, lệnh /effort) đứng đầu, sau đó tới mức đã lưu trong settings, cuối cùng là mặc định của model. Trường effort trong frontmatter của skill/subagent ghi đè mức của phiên khi skill/subagent đó chạy, nhưng không ghi đè biến môi trường. Nghĩa là nếu bạn đã export CLAUDE_CODE_EFFORT_LEVEL=high, subagent khai báo effort: low vẫn chạy ở high. Riêng max chỉ có hiệu lực trong phiên và không lưu được qua /effort hay settings. Muốn dùng max lâu dài thì phải đặt bằng biến môi trường, và thật ra hiếm khi bạn cần điều đó.
Đổi effort giữa chừng có làm mất cache không? Với Opus 5.5, Sonnet 5.5, Haiku 5.5 và Fable 5.1 khi dùng API key hoặc gói Claude, đổi effort giữ nguyên prompt cache, nên bạn có thể hạ hoặc nâng mức ngay giữa task mà không bị một lượt chậm và đắt để dựng lại cache. Trên Bedrock, Google Cloud hoặc model cũ hơn thì đổi effort làm mất cache. Đổi model giữa phiên thì luôn bắt đầu cache mới.
Chọn effort theo loại việc
Thay vì đặt một mức cho mọi thứ, hãy đổi theo việc. Bảng dưới là điểm khởi đầu dựa trên hướng dẫn trong docs, bạn điều chỉnh theo dự án của mình:
| Loại việc | Mức khởi đầu | Vì sao |
|---|---|---|
| Sửa nhỏ, bạn review ngay từng diff | low | Bạn là người kiểm tra, Claude không cần tự xác minh kỹ |
| Feature có mẫu sẵn trong codebase, yêu cầu rõ | medium | Phạm vi rõ, rủi ro edge case thấp |
| Sửa bug trong code có sẵn | high | Cần đọc thêm, chạy lại test, kiểm tra trường hợp lân cận |
| Lập kế hoạch refactor, migration | high hoặc xhigh trong plan mode | Sai ở bước plan thì sửa ở bước code rất tốn |
| Bug khó tái hiện, review bảo mật | xhigh hoặc max | Giá trị nằm ở việc kiểm tra nhiều nhánh, nhiều edge case |
| Subagent tìm file, đọc log, tóm tắt | low | Việc hẹp, chỉ cần kết luận |
Hai quy tắc thực tế đi kèm bảng này:
- Effort tỉ lệ với mức bạn tự kiểm tra. Nếu bạn sẽ đọc từng dòng diff ngay sau đó, mức thấp thường đủ. Nếu bạn định để Claude chạy một mình rồi quay lại sau, hãy cho nó effort cao để nó tự xác minh thay bạn.
- Prompt tốt vẫn quan trọng hơn effort. Một yêu cầu mơ hồ ở
maxthường tệ hơn một yêu cầu cụ thể ởmedium. Nêu rõ file, hành vi mong muốn và cách kiểm chứng (test nào phải pass) trước khi nghĩ tới việc tăng effort. Trong bài trên claude.dev, Thariq kể rằng khi yêu cầu đã rất chi tiết, kết quả ở các mức effort gần như giống nhau; chênh lệch lớn chỉ xuất hiện khi yêu cầu mơ hồ hoặc bài toán có nhiều edge case ẩn.
Ví dụ một buổi làm việc với dự án Next.js:
/effort low
> Đổi prop userId thành accountId trong src/components/profile/*, không sửa API
/effort high
> Form checkout đôi khi tạo 2 đơn hàng khi bấm nhanh. Tìm nguyên nhân trong
> src/app/checkout, viết test tái hiện lỗi trước, sửa xong chạy lại toàn bộ test
/effort medium
> Thêm trang /orders/[id] theo đúng pattern của /products/[id]Kết hợp effort với model
Model quyết định trần năng lực, effort quyết định model cố gắng tới đâu dưới cái trần đó. Docs Claude Code ghi rằng trong thử nghiệm của Anthropic, Opus 5.5 ở medium ngang hoặc vượt Opus 5 ở high trên các bài đánh giá về code và knowledge work. Nghĩa là model mới ở mức thấp hơn vẫn có thể bằng model cũ ở mức cao hơn, nên đừng mặc định chọn "model to nhất, effort cao nhất" rồi để nguyên cho mọi việc.
Vài tổ hợp hợp lý:
- Opus 5.5 ở
medium(mặc định trên Pro, Max, Team, Enterprise và API): điểm khởi đầu tốt cho đa số việc hằng ngày. - Sonnet 5.5: khi bạn muốn nhanh hơn và rẻ hơn cho việc phạm vi rõ. Docs về chi phí của Claude Code cũng khuyên dùng Sonnet cho phần lớn việc code và để Opus cho quyết định kiến trúc hoặc suy luận nhiều bước.
- Haiku 5.5: hợp với subagent làm việc hẹp, phân loại, trích xuất.
opusplan: dùng Opus trong plan mode và tự chuyển sang Sonnet khi thực thi. Lưu ý mỗi lần bật/tắt plan mode vớiopusplanlà một lần đổi model, nên cache bắt đầu lại.
claude --model opusplan
claude --model sonnet --effort mediumChỗ hay bị quên nhất là subagent. Nếu không khai báo, subagent kế thừa model và effort của phiên chính. Bạn đang chạy Opus ở xhigh để debug thì subagent tìm file cũng chạy Opus ở xhigh. Khai báo rõ trong frontmatter để tránh:
---
name: log-scanner
description: Đọc log và test output, chỉ trả về lỗi liên quan kèm đường dẫn file. Dùng khi cần lọc output dài.
tools: Read, Grep, Glob, Bash
model: haiku
effort: low
---
Đọc output được chỉ định, lọc các dòng lỗi và stack trace liên quan.
Trả về tối đa 20 dòng quan trọng nhất kèm file và dòng code nghi ngờ.
Không đề xuất cách sửa.Skill cũng nhận trường effort trong frontmatter tương tự. Cách viết subagent và skill chi tiết có ở bài Claude Code nâng cao.
Đo chi phí thay vì đoán
Không cần tin vào cảm giác. Claude Code có sẵn công cụ đo:
/usage(/costvà/statslà alias): khối Session hiện tổng chi phí ước tính theo giá niêm yết, thời gian, và số token theo từng model (input, output, cache read, cache write). Số này reset khi bạn/clear. Nếu bạn dùng gói Pro hoặc Max, con số tiền không phải hóa đơn của bạn, hãy nhìn thanh usage của gói và phần breakdown cho biết skill, subagent, MCP server nào đang chiếm nhiều.- Dòng
Prompt cache (main)trong/usage: tỉ lệ input đọc từ cache và số lần miss. Nếu miss nhiều, kiểm tra xem bạn có đổi model giữa chừng không.
Một thử nghiệm đáng làm một lần: lấy một task thật, tạo hai git worktree, mở hai phiên Claude Code riêng và chạy cùng prompt, một bên claude --effort medium, một bên claude --effort high. Sau đó so khối Session trong /usage của từng phiên, thời gian và số lần bạn phải nhắc sửa. Kết quả trên dự án của bạn đáng tin hơn mọi lời khuyên chung.
Effort chỉ là một phần của chi phí: Claude Code gửi lại toàn bộ hội thoại mỗi request, nên /clear khi đổi việc và giữ CLAUDE.md ngắn cũng quan trọng không kém. Phần này có ở bài Context engineering là gì.
Những sai lầm thường gặp
1. Để max cho mọi thứ "cho chắc". Docs nói rõ max có thể overthinking và lợi ích giảm dần. Bạn trả nhiều token hơn và chờ lâu hơn cho việc mà medium làm tốt.
2. Hạ effort để sửa bug rồi tin luôn kết quả. Effort thấp nghĩa là Claude ít tự xác minh hơn. Nếu đã hạ effort, bạn phải tự chạy test và đọc diff kỹ hơn.
3. Gõ "think hard" và nghĩ là đã bật suy nghĩ sâu. Chỉ ultrathink được nhận diện. Muốn đổi cho cả phiên thì dùng /effort.
4. Mang thói quen từ Opus 5 sang. Opus 5.5 mặc định medium, thấp hơn Opus 5 một mức. Ngoài ra, effortLevel cấp cao nhất trong user settings (dạng cũ mà /effort từng ghi) không áp dụng cho Opus 5.5 và các model ra sau. Chọn lại mức bằng /effort hoặc /model.
5. Quên subagent kế thừa effort. Một phiên xhigh với nhiều subagent đọc file có thể tốn hơn bạn nghĩ. Đặt model và effort riêng cho subagent làm việc hẹp. Nếu đặt CLAUDE_CODE_EFFORT_LEVEL, biến này thắng cả effort trong frontmatter của subagent.
Tóm lại
Effort là núm chỉnh mức công sức, chủ yếu quyết định Claude tự kiểm tra và xử lý edge case kỹ tới đâu. Bắt đầu từ mặc định (medium trên các model 5.5), hạ xuống low cho việc nhỏ bạn review ngay, nâng lên high khi sửa bug, chỉ dùng xhigh/max khi việc thật sự khó hoặc bạn để Claude tự chạy. Kết hợp với model phù hợp, đặt riêng cho subagent, và đo bằng /usage thay vì đoán.
Có một điều effort không mua được: khả năng của chính bạn để biết việc nào khó thật, việc nào chỉ trông có vẻ khó, và đọc diff để nhận ra Claude đã sửa đúng chỗ hay chưa. Nếu bạn làm frontend và muốn có nền đó, khóa React PRO của HoleTex giúp bạn hiểu React đủ sâu để điều khiển AI thay vì phụ thuộc vào nó. Còn để rèn tư duy phân tích độ khó của bài toán, thử luyện thuật toán trên HoleTex Algo.
Bài liên quan
- Claude Code là gì
- Claude Code nâng cao: CLAUDE.md, subagents, skills, hooks và MCP
- Claude Opus 5.5
- Context engineering là gì
- Model AI nào code tốt nhất 2026
Nguồn tham khảo: Model configuration (code.claude.com), Manage costs effectively (code.claude.com), Commands (code.claude.com), How Claude Code uses prompt caching (code.claude.com), Subagents (code.claude.com), Effort (platform.claude.com), Models overview (platform.claude.com), Pricing (platform.claude.com). Bài viết tham khảo ý tưởng từ Using Claude Code: Spending your effort (claude.dev) của Thariq Shihipar. Cập nhật 2026-10-08.