Công cụ AI Coding

Claude Code nâng cao: tối ưu token & làm chủ context codebase lớn (2026)

Aug 14, 202614 phút đọc

Để tối ưu token Claude Code trong codebase lớn, hãy đo trước bằng /context/usage, rồi áp 6 đòn bẩy mạnh nhất: (1) chủ động /clear & /compact giữa các task; (2) chọn đúng model (Sonnet cho phần lớn, để dành Opus); (3) cắt overhead MCP, ưu tiên CLI; (4) đẩy việc nặng sang hook & skill; (5) dùng subagent + just-in-time retrieval; (6) quản session & cache. Không đo thì không biết kỹ thuật nào đáng làm trước.

- Lệnh và số liệu trong bài lấy từ tài liệu chính thức Anthropic (fetch 09/08/2026). Claude Code cập nhật rất thường xuyên, nên hãy kiểm tra claude --version và tự chạy lại /usage trên máy bạn để đối chiếu.

Vì sao Claude Code ngốn token trong codebase lớn?

Nhiều dev bực mình vì "chỉ hỏi một câu mà usage vẫn leo cả ngày". Nguyên nhân không phải câu hỏi đó, mà là cách mô hình ngôn ngữ hoạt động: mỗi request gửi lại toàn bộ hội thoại (system prompt, CLAUDE.md, lịch sử, file đã đọc, kết quả tool) làm input. Session càng dài, mỗi lượt trao đổi càng đắt vì phần "đuôi" phình to.

Có ba cơ chế cộng hưởng khiến chi phí tăng:

  • Long context dồn: càng nhiều file đọc vào context, mỗi turn kế tiếp càng nặng - kể cả khi bạn không dùng lại chúng.
  • Context rot: theo bài Effective context engineering for AI agents của Anthropic (29/09/2025), khi số token trong cửa sổ tăng, khả năng recall thông tin quan trọng lại giảm. Tức là context to không chỉ đắt hơn mà còn làm Claude kém chính xác hơn.
  • Cache miss: Claude Code cache phần đầu prompt để không tính tiền lại. Nhưng cache có thời hạn; nghỉ lâu quay lại, cache hết hạn và cả khối context bị tính full-price lần nữa.

Về baseline chi phí, tài liệu "Manage costs effectively" của Anthropic (docs, fetch 09/08/2026) cho biết chi phí trung bình khoảng ~$13/dev mỗi ngày hoạt động, phần lớn rơi vào khoảng $150-250/tháng, và 90% người dùng ở dưới ~$30/ngày. Nếu bạn đang vượt xa mức này trên một codebase lớn, gần như chắc chắn có token đang bị lãng phí ở vài chỗ cố định. Muốn hiểu rõ các gói và cách tính tiền, xem thêm bài chi phí & các gói Claude Code. Còn nếu bạn mới bắt đầu, đọc trước Claude Code là gì để nắm nền tảng.

Đo trước, tối ưu sau - /context, /usage, statusline

Đừng tối ưu mù. Trước khi đụng vào bất kỳ kỹ thuật nào, hãy chụp ảnh hiện trạng để biết token của bạn đang đi đâu. Hai lệnh này là điểm khởi đầu:

/usage # tổng quan token & chi phí: input, output, cache read/write, cost
/context # phân tích context HIỆN TẠI đang chiếm chỗ bởi cái gì

/usage trả về bức tranh tiền: bao nhiêu input token, output token, bao nhiêu được đọc từ cache (rẻ) so với ghi cache mới (đắt). Tỷ lệ cache read cao là dấu hiệu tốt. /context mới là thứ đáng giá nhất khi tối ưu: nó tách ra system prompt, CLAUDE.md, các tool MCP đang khai báo, và những file bạn đã kéo vào - cho bạn thấy ngay "thủ phạm" chiếm chỗ.

Bạn cũng nên bật hiển thị context ở statusline để theo dõi liên tục mà không cần gõ lệnh - chi tiết trong bài tùy biến statusline Claude Code. Nguyên tắc: có số liệu before/after thì mới biết kỹ thuật nào thực sự đáng công. Chạy /context ngay trước và sau mỗi thay đổi bên dưới để đo delta thật.

Nhóm 1 - Quản lý context chủ động (/clear, /compact, resume)

Đây là đòn bẩy rẻ nhất và hiệu quả nhất. Phần lớn token lãng phí đến từ việc tha lôi context cũ không liên quan sang task mới.

/clear giữa các task rời rạc. Vừa fix xong một bug ở module auth, giờ chuyển sang viết test cho module payment? Gõ /clear. Nó reset context về đầu - chi phí "đuôi hội thoại" quay về gần $0 cho task mới. Đây là thói quen tiết kiệm token quan trọng nhất mà đa số bỏ qua.

/compact khi cần giữ mạch làm việc. Khi bạn muốn tiếp tục cùng một luồng nhưng context đã phình, /compact nén hội thoại thành bản tóm tắt. Quan trọng: dùng compact có định hướng để không mất đúng thứ bạn cần:

/compact Giữ lại quyết định về schema database và các file đã sửa trong module payment; bỏ phần debug log dài

Bạn có thể đặt sẵn "Compact instructions" trong CLAUDE.md để mỗi lần compact đều giữ đúng ưu tiên. Ngoài ra Claude Code có auto-compact: khi context gần đầy, nó tự nén lại để phiên không vỡ. Tiện, nhưng cảnh báo trung thực - auto-compact có thể làm rơi chi tiết, nên với task nhạy cảm hãy compact thủ công có định hướng thay vì phó mặc.

Resume from summary. Khi mở lại một session lớn, chọn resume từ bản summary thay vì nạp lại toàn bộ lịch sử - bạn khởi động với vài nghìn token thay vì vài chục nghìn. Muốn đào sâu cơ chế này, đọc quản lý context & memory trong Claude Code.

Nhóm 2 - Chọn đúng model & chỉnh extended thinking

Không phải task nào cũng cần model mạnh nhất. Đây là cách phân bổ theo chi phí (giá API tham khảo: Opus 5 $5/$25 per 1M token in/out; Sonnet 5 $2/$10; Haiku 4.5 $1/$5):

  • Sonnet cho phần lớn coding. Sonnet 5 xử lý tốt đại đa số việc viết/sửa code với chi phí bằng một phần Opus.
  • Để dành Opus cho kiến trúc & bài toán khó. Chuyển bằng /model ngay giữa chừng khi gặp phần cần suy luận sâu, xong lại về Sonnet.
  • Haiku cho subagent đơn giản. Với subagent chỉ làm việc cơ học (grep, tóm tắt, format), đặt model: haiku trong định nghĩa của nó.

Extended thinking là con dao hai lưỡi về token. Phần "suy nghĩ" được tính như output token - mà output đắt gấp nhiều lần input. Trên task lặp đi lặp lại đơn giản, thinking nhiều là đốt tiền. Cách kiểm soát:

/effort # điều chỉnh mức nỗ lực suy luận cho phù hợp task
MAX_THINKING_TOKENS=8000 # đặt trần thinking token (biến môi trường)

Bạn cũng có thể tắt extended thinking trong /config. Lưu ý trung thực: tắt thinking sẽ hại các task suy luận sâu (thiết kế thuật toán, gỡ bug đa lớp) - đây là đánh đổi, không phải "luôn tắt cho rẻ". Chỉ giảm/tắt khi task thực sự không cần lý luận nhiều.

Nhóm 3 - Cắt overhead MCP & tool

Mỗi server MCP bạn bật đều "đóng thuế" context: danh sách tool của nó (tên, mô tả, schema tham số) được nạp vào mỗi request. Vài server nhiều tool có thể ngốn hàng nghìn token trước khi bạn gõ chữ nào. Dùng /context để soi phần này.

  • Tắt server không dùng: /mcp để xem và quản lý các server đang kết nối; tắt cái nào không cần cho phiên hiện tại.
  • Ưu tiên CLI thay MCP khi có thể. Với các tác vụ có sẵn công cụ dòng lệnh - gh (GitHub), aws, gcloud - hãy để Claude gọi CLI trực tiếp qua Bash thay vì cắm một MCP server tương đương. CLI không tốn phần "liệt kê tool" thường trực trong context.
  • Code intelligence cho ngôn ngữ typed. Với TypeScript/Java/Go, một plugin "go to definition" giúp Claude nhảy thẳng tới định nghĩa thay vì grep rồi đọc cả loạt file - cắt lượng token đọc file rất đáng kể trên codebase lớn.

Để hiểu MCP là gì và khi nào nên/không nên dùng, xem thêm bài về hook trong Claude Code ở nhóm kế tiếp - hai cơ chế này thường bổ trợ nhau trong việc giảm context.

Nhóm 4 - Đẩy việc nặng sang hook & skill

Đây là nhóm cho lợi ích lớn nhất mà ít người khai thác. Ý tưởng: đừng để output cồng kềnh chảy thẳng vào context của Claude - lọc/tóm tắt nó ở tầng script trước.

Hook lọc output test. Một lần chạy test suite lớn có thể in ra hàng chục nghìn dòng - mà Claude chỉ cần biết cái gì FAIL. Một hook PreToolUse/post-processing lọc chỉ giữ dòng FAIL/ERROR có thể kéo lượng token từ hàng chục nghìn xuống hàng trăm (theo docs "Manage costs effectively"). Ví dụ khung một script lọc:

#!/usr/bin/env bash
# filter-test-output.sh - chỉ giữ dòng thất bại, cắt phần log ồn ào
npm test 2>&1 | grep -E "(FAIL|ERROR|✕|Error:|Expected|Received)" | head -n 100

Skill "codebase-overview". Thay vì để Claude đọc 20 file để hiểu cấu trúc dự án mỗi lần, đóng gói một skill mô tả kiến trúc, quy ước, vị trí module chính. Skill được nạp on-demand nên không nằm thường trực trong context, mà khi cần thì cho context tức thì thay vì hàng loạt file reads.

Giữ CLAUDE.md gọn. Docs Anthropic khuyến nghị CLAUDE.md nên dưới ~200 dòng. Mọi thứ trong file này nạp vào mỗi request, nên nhồi nhét ở đây là thuế token vĩnh viễn. Chuyển các hướng dẫn chuyên biệt (quy trình deploy, convention của một module) sang skill load on-demand, chỉ giữ ở CLAUDE.md phần thực sự dùng ở mọi phiên.

Nhóm 5 - Subagent & just-in-time retrieval cho codebase lớn

Trên monorepo, kẻ thù số một là để một context duy nhất "quét" cả kho. Giải pháp là cô lập việc đọc nhiều ra khỏi context chính.

Delegate research cho subagent. Khi cần khảo sát "tính năng X được implement ở đâu", giao cho một subagent. Nó đọc hàng loạt file trong context riêng của nó rồi chỉ trả về bản tóm tắt - theo bài engineering của Anthropic, thường chỉ ~1.000-2.000 token thay vì đổ toàn bộ nội dung file vào context chính. Xem hướng dẫn chi tiết ở bài subagents trong Claude Code.

Just-in-time retrieval bằng @ reference. Đừng để Claude đoán mò rồi grep lung tung. Trỏ thẳng đúng lúc cần:

@src/payment/checkout.ts # nạp đúng 1 file khi cần
@src/payment/ # nạp đúng 1 thư mục

Plan mode chống re-work đắt. Nhấn Shift+Tab để vào plan mode: Claude lập kế hoạch trước khi sửa. Duyệt plan rẻ hơn nhiều so với để nó sửa sai cả loạt file rồi phải làm lại - mà mỗi vòng làm lại đều tốn token. Nếu đi sai hướng, dùng /rewind (hoặc nhấn Esc hai lần) để quay về checkpoint trước thay vì mô tả lại từ đầu.

Nguyên tắc bao trùm cả nhóm này, mượn từ Anthropic: nhắm tới minimal high-signal tokens - đưa vào context ít nhất có thể nhưng đúng thứ giá trị nhất. Đây cũng là liều thuốc cho context rot đã nói ở đầu bài.

Cạm bẫy token: agent team & session mở cả ngày

Hai thứ này âm thầm đội usage lên mà bạn khó nhận ra.

Agent team ~7x token. Chạy một "team" nhiều agent song song nghe rất mạnh, nhưng docs "Manage costs effectively" cảnh báo nó dùng khoảng ~7 lần token so với một session thường (dùng plan mode). Lý do: mỗi teammate có context riêng. Khi nào không nên dùng: task tuần tự, phạm vi nhỏ, hoặc khi ngân sách token eo hẹp. Nếu buộc phải dùng, cho các teammate chạy Sonnet và tắt team ngay khi xong.

Session mở cả ngày. Cứ để một phiên chạy từ sáng tới chiều là công thức đốt token: long context phình + cache liên tục miss sau mỗi lần bạn rời máy. Về cache, docs cho biết lifetime là 1 giờ với gói subscription so với 5 phút với usage credits/API; có thể bật cache 1h bằng biến môi trường:

ENABLE_PROMPT_CACHING_1H=1

Thói quen tốt: /clear khi đổi việc, đóng phiên khi nghỉ dài, resume from summary khi quay lại. (Ghi chú nhỏ để yên tâm: token nền cho các tác vụ tự động của Claude Code rất rẻ - docs nêu < $0.04/session, nên đừng lo phần này.)

Bảng tổng hợp - kỹ thuật → mức tiết kiệm token

Sắp theo ROI token (đòn bẩy cao / công sức thấp lên trên). Cột "mức tiết kiệm" nào có nguồn Anthropic thì ghi số verified; phần đo trên codebase thật để Jasmine điền từ buổi test.

Kỹ thuậtNỗ lựcMức tiết kiệmKhi nào dùng
/clear giữa task rờiRất thấpReset "đuôi" context về ~0 cho task mớiMỗi khi đổi việc không liên quan
/compact có định hướngThấpKhi cần giữ mạch nhưng context phình
Hook lọc output testTrung bìnhHàng chục nghìn → hàng trăm token (docs Anthropic)Codebase có test suite/log lớn
Giữ CLAUDE.md < 200 dòngThấpCắt thuế token cố định trên mọi requestLuôn - dọn định kỳ
Chọn Sonnet, để dành OpusThấpChênh giá Opus/Sonnet ~2,5x (in), 2,5x (out)Mặc định coding hằng ngày
Cắt MCP không dùng / ưu tiên CLITrung bìnhĐang bật nhiều server MCP
Subagent trả summaryTrung bìnhTrả ~1-2k token thay vì full file reads (docs Anthropic)Khảo sát/research trên codebase lớn
Giảm/tắt extended thinkingThấpCắt output token trên task đơn giảnTask lặp lại, không cần suy luận sâu
Tránh agent team khi không cầnThấpTránh đội ~7x token (docs Anthropic)Task tuần tự / ngân sách eo hẹp

Tăng tốc bằng bộ kit dựng sẵn (AgentKit)

Nhiều kỹ thuật ở trên - skill "codebase-overview", subagent chuyên biệt, hook lọc output - đều hiệu quả nhưng tốn công tự dựng và tinh chỉnh. Nếu bạn muốn có sẵn một bộ skill/subagent/hook đã tối ưu context cho Claude Code, bộ kit AgentKit cho Claude Code đóng gói sẵn nhóm công cụ này để bạn khỏi viết lại từ đầu.

Một lưu ý để tránh nhầm lẫn: AgentKit ở đây (agentkit.best, CLI ak) là bộ kit cho Claude Code / Codex / Copilot - khác hoàn toàn OpenAI AgentKit. Bạn có thể xem AgentKit (giảm 20% qua link) để tự đánh giá; đây là gợi ý tùy chọn, không bắt buộc - mọi kỹ thuật trong bài đều tự làm được thủ công.

Câu hỏi thường gặp (FAQ)

Khi nào dùng /compact, khi nào /clear?

Dùng /clear khi chuyển sang một task không liên quan - nó reset context và cắt chi phí "đuôi hội thoại" về gần 0. Dùng /compact khi bạn muốn tiếp tục cùng một luồng nhưng context đã phình; nó nén lịch sử thành tóm tắt mà vẫn giữ mạch làm việc.

Claude Code có tự động compact không?

Có. Khi context gần đầy, Claude Code tự auto-compact để phiên không vỡ. Tiện nhưng có thể làm rơi chi tiết, nên với task quan trọng hãy chủ động /compact có định hướng thay vì phó mặc.

Dùng Opus có tốn hơn nhiều không?

Có - theo giá API tham khảo, Opus 5 ($5/$25 per 1M in/out) đắt hơn Sonnet 5 ($2/$10) khoảng 2,5 lần. Hãy để Sonnet làm phần lớn coding và chỉ chuyển /model sang Opus cho phần kiến trúc hoặc bài toán khó.

Làm sao xem token đang dùng?

/usage để xem tổng input/output token, cache read/write và chi phí; gõ /context để xem thành phần nào đang chiếm chỗ context hiện tại (CLAUDE.md, tool MCP, file đã đọc). Đo bằng hai lệnh này trước và sau mỗi thay đổi.

Codebase lớn nên bắt đầu tối ưu từ đâu?

Bắt đầu bằng đo với /context, rồi ưu tiên hai đòn bẩy rẻ nhất: /clear giữa các task và dọn CLAUDE.md xuống dưới ~200 dòng. Sau đó mới đến cắt MCP thừa, dùng subagent cho research và hook lọc output test.

Tắt extended thinking có hại không?

Có thể. Tắt thinking tiết kiệm output token nhưng làm giảm chất lượng ở các task suy luận sâu (thiết kế thuật toán, gỡ bug đa lớp). Chỉ giảm bằng /effort hoặc MAX_THINKING_TOKENS=8000 cho task đơn giản, giữ thinking cho việc cần lý luận.

Kết luận + bước tiếp theo

Công thức tối ưu token Claude Code gói gọn trong một chuỗi: đo → cắt context → chọn model → offload sang hook/skill → subagent cho codebase lớn. Đừng làm hết một lúc; đo bằng /context/usage, chọn 2-3 đòn bẩy ROI cao nhất trong bảng, áp dụng và đo lại. Nhớ rằng số liệu tiết kiệm phụ thuộc codebase và thói quen của bạn - hãy tự đo trên máy mình.

Đọc tiếp: quản lý context & memory để đào sâu compaction, và chi phí & các gói Claude Code để chọn gói hợp mức dùng. Nếu muốn dùng bộ công cụ dựng sẵn thay vì tự tay tối ưu, tham khảo review AgentKit cho Claude Code.

Muốn Claude Code mạnh hơn ngay? Nếu bạn ngại tự dựng skill, subagent và hook tối ưu context, AgentKit đóng gói sẵn nhóm công cụ này cho Claude Code - thử để tiết kiệm thời gian setup.

Dùng thử AgentKit (giảm 20% qua link) →

J

Jasmine

Tác giả · Jasmine Daily

Người viết nên Jasmine Daily - ghi lại những suy nghĩ, trải nghiệm và những khoảnh khắc đời thường. Thật lòng, không vội vàng, không hoàn hảo.

Jasmine Daily

Vẫn còn nhiều điều đang chờ được đọc.

Nếu bài viết này chạm đến bạn, hãy ghé xem thêm vài trang khác trong cuốn nhật ký này.

Đọc tiếp

Bài viết liên quan