Một tác nhân mã hóa CLI (Claude Code, Codex hoặc công cụ tương tự) có thể đốt token rất nhanh: đọc hàng chục tệp, chạy test nhiều lần, đưa log dài vào ngữ cảnh và phát lại toàn bộ lịch sử ở mỗi lượt. Với một nhóm kỹ sư dùng tác nhân cả ngày, chi phí này không còn là phần nhỏ của hóa đơn. Tin tốt: phần lớn token bị lãng phí có thể giảm ngay từ dòng lệnh mà không cần đổi mô hình hoặc chấp nhận đầu ra kém hơn.
TL;DR
Để giảm chi phí token của tác nhân CLI:
- Khoanh vùng tập hợp tệp trước khi giao việc.
- Giữ
CLAUDE.mdhoặc tệp bộ nhớ dự án thật ngắn. - Dùng
/compacthoặc/cleargiữa các tác vụ. - Bật prompt caching cho phần prompt ổn định.
- Định tuyến tác vụ đơn giản sang mô hình rẻ hơn.
- Cắt bớt output của test, install, diff và log.
- Đo chi phí theo từng lần chạy, không chỉ nhìn hóa đơn cuối tháng.
Token bị tiêu ở đâu trong một lần chạy tác nhân CLI?
Mỗi lượt của tác nhân gửi một payload đầu vào đến mô hình và nhận lại payload đầu ra. Bạn trả tiền cho cả hai. Trên nhiều nhà cung cấp, token đầu ra thường đắt hơn token đầu vào, nhưng token đầu vào mới là phần dễ phình to nhất vì nó bao gồm rất nhiều ngữ cảnh lặp lại.
Một payload đầu vào thường có:
- System prompt và định nghĩa tool: hướng dẫn tác nhân, schema JSON của tool, quy tắc hành vi.
-
Tệp bộ nhớ dự án: ví dụ
CLAUDE.md, quy ước repo, lệnh build/test. - Lịch sử hội thoại: tin nhắn người dùng, phản hồi mô hình, tool call, tool result.
- Nội dung tệp đã đọc: một lần đọc toàn bộ tệp 1.200 dòng có thể thành hàng chục nghìn token.
-
Output của tool: log test,
npm install, stack trace,git diff, lockfile.
Điểm quan trọng: lịch sử hội thoại được gửi lại ở mỗi lượt. Một phiên 30 lượt không chỉ tốn gấp 30 lần một lượt; các lượt sau còn kéo theo toàn bộ nội dung trước đó. Vì vậy, phiên dài, lan man là một trong những nguồn lãng phí lớn nhất.
Nếu bạn muốn hiểu thêm về phiên và giới hạn token trong thực tế, xem thêm bài viết về cách cửa sổ token Claude Code được đặt lại.
Một chi phí liên quan khác là debugging API. Khi tác nhân gọi một API nội bộ chưa ổn định, nó có thể thử lại, đọc lỗi, đọc tài liệu, sửa code rồi lặp tiếp. Mỗi vòng như vậy đều tiêu token.
💡 Nếu tác nhân của bạn làm việc với API, hãy thiết kế, mock và kiểm thử API trong Apidog trước khi đưa tác nhân vào luồng xử lý. Khi API có hợp đồng rõ ràng, tác nhân sẽ ít phải đoán, ít phải thử sai và ít đốt token hơn.
1. Khoanh vùng tập hợp làm việc trước khi chạy tác nhân
Token rẻ nhất là token không bao giờ được gửi.
Đừng mở tác nhân ở root repo rồi prompt kiểu:
claude "tái cấu trúc logic thanh toán"
Prompt này buộc tác nhân phải tự khám phá codebase. Nó có thể đọc nhiều file không liên quan trước khi tìm đúng chỗ.
Thay vào đó, hãy chỉ rõ phạm vi:
claude "tái cấu trúc logic retry để dùng exponential backoff.
Chỉ chỉnh src/payments/retry.ts và test tương ứng."
Hoặc nếu chưa biết chính xác tệp:
claude "tìm logic retry trong thư mục src/payments.
Chỉ đọc các file liên quan trực tiếp, không quét toàn repo."
Nguyên tắc thực tế:
- Giao một tác vụ rõ ràng cho mỗi phiên.
- Nêu thư mục hoặc file cụ thể.
- Nói rõ phần nào không được động vào.
- Nếu cần khám phá, giới hạn ở một thư mục nhỏ.
Các mẫu làm việc trong quy trình làm việc của Claude Code cũng nhấn mạnh thói quen khoanh vùng này.
2. Giữ tệp bộ nhớ dự án thật ngắn
Các tệp như CLAUDE.md thường được nạp vào ngữ cảnh ở nhiều lượt. Nếu tệp này biến thành wiki dài 4.000 token, bạn đang trả tiền cho nó liên tục.
Kiểm tra nhanh kích thước tương đối:
wc -c CLAUDE.md | awk '{print "≈", int($1/4), "tokens per turn"}'
Một CLAUDE.md tốt nên chứa:
# Project conventions
## Commands
- Build: npm run build
- Test: npm test -- --runInBand
- Lint: npm run lint
## Coding rules
- TypeScript strict mode.
- Do not edit generated files.
- Prefer small functions.
- Add tests for changed behavior.
## Important paths
- API clients: src/api/
- Payment logic: src/payments/
- Generated files: src/generated/ (do not edit)
Không nên nhét vào:
- Tài liệu onboarding dài.
- Lịch sử kiến trúc.
- Toàn bộ API docs.
- Nội dung chỉ dùng cho một tác vụ hiếm gặp.
Nếu tài liệu dài vẫn cần thiết, để đường dẫn cho tác nhân đọc khi cần:
For payment provider details, read docs/payments/provider-contract.md only when required.
3. Dùng /compact hoặc /clear giữa các tác vụ
Khi bạn hoàn thành một việc và chuyển sang việc khác, đừng tiếp tục dùng cùng phiên chỉ vì tiện. Mỗi lượt mới sẽ kéo theo lịch sử cũ.
Trong Claude Code:
/compact
Dùng khi bạn vẫn cần giữ tóm tắt ngắn của phiên trước nhưng muốn loại bỏ transcript thô.
/clear
Dùng khi bắt đầu tác vụ mới không liên quan.
Quy trình đơn giản:
- Bắt đầu phiên cho một tác vụ cụ thể.
- Chạy tác nhân, review diff, test.
- Khi xong, dùng
/compactnếu cần tiếp tục cùng chủ đề. - Dùng
/cleartrước khi chuyển sang tác vụ khác.
Việc này thường giảm mạnh lượng context được gửi lại trong các phiên dài.
4. Cấu hình ignore để tác nhân không đọc rác
Tác nhân không nên đọc:
node_modules/dist/build/- coverage output
- generated files
- lockfile lớn nếu không cần
- log hoặc artifact CI
Ví dụ .gitignore hoặc tệp ignore tương ứng của agent:
node_modules/
dist/
build/
coverage/
*.log
src/generated/
Nếu repo có lockfile lớn, bạn có thể nhắc tác nhân:
Không đọc package-lock.json trừ khi tác vụ liên quan trực tiếp đến dependency resolution.
Lợi ích của bước này là lâu dài: cấu hình một lần, tiết kiệm ở mọi lần chạy.
5. Bật prompt caching cho phần ổn định
Prompt caching cho phép nhà cung cấp lưu một tiền tố ổn định của request, ví dụ:
- system prompt
- tool definitions
- quy ước repo
- hướng dẫn cố định
Các request sau dùng lại tiền tố đó với chi phí thấp hơn đáng kể.
Theo tài liệu prompt caching của Anthropic, cache write có chi phí cao hơn input token thông thường, nhưng cache read chỉ khoảng 10% input cơ bản. Nghĩa là phần prefix ổn định có thể được giảm giá khoảng 90% khi cache hit. Con số cụ thể có thể thay đổi theo nhà cung cấp và thời điểm, nên luôn kiểm tra trang giá chính thức.
Nguyên tắc cấu trúc:
tools → system → messages
Đặt phần ổn định lên trước, phần thay đổi xuống sau.
Ví dụ nếu bạn gọi model trực tiếp:
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system=[
{
"type": "text",
"text": SYSTEM_PROMPT + REPO_CONVENTIONS,
"cache_control": {"type": "ephemeral"},
}
],
messages=[
{
"role": "user",
"content": user_task,
}
],
)
u = response.usage
print("cache write:", u.cache_creation_input_tokens)
print("cache read :", u.cache_read_input_tokens)
print("fresh input:", u.input_tokens)
Lưu ý vận hành:
- Không chèn timestamp vào prefix được cache.
- Không thay đổi byte trước cache breakpoint nếu không cần.
- Gom các lần chạy liên quan gần nhau để tăng khả năng cache hit.
- Đo
cache_read_input_tokensđể xác nhận cache thật sự hoạt động.
Nếu caching chưa đủ, bạn có thể kết hợp với các mẹo định tuyến trong bài chạy GPT-5.5 miễn phí qua Codex.
6. Định tuyến tác vụ đơn giản sang mô hình rẻ hơn
Không phải mọi việc đều cần mô hình mạnh nhất.
Các tác vụ thường có thể chạy bằng mô hình rẻ hơn:
- viết commit message
- tóm tắt diff
- tạo changelog
- giải thích lỗi lint đơn giản
- đổi tên biến
- viết test boilerplate
- format lại tài liệu
Ví dụ:
claude --model haiku "viết commit message theo Conventional Commits cho diff đã stage"
claude --model sonnet "thiết kế lại lớp caching cho payment service"
Cách đặt mặc định hợp lý:
- Mặc định dùng mô hình rẻ cho tác vụ cơ học.
- Chỉ nâng lên mô hình mạnh khi cần reasoning, thiết kế hoặc refactor phức tạp.
- Tách tác vụ phụ ra khỏi phiên chính nếu có thể.
Nếu framework agent hỗ trợ sub-agent, hãy cho sub-agent dùng mô hình rẻ và context nhỏ. Sub-agent có thể tìm kiếm, tóm tắt, lọc kết quả rồi trả lại thông tin cô đọng cho agent chính.
Các mẫu tự động hóa trong lệnh mục tiêu trên Codex và Claude Code là ví dụ hữu ích cho kiểu ủy quyền này.
Nếu bạn dùng gói có giới hạn thay vì trả theo token thuần túy, định tuyến còn giúp kéo dài quota. Việc tăng giới hạn hàng tuần của Claude Code có ích, nhưng không thay thế được việc dùng đúng mô hình cho đúng việc.
7. Cắt bớt output của tool
Tool output là nguồn lãng phí dễ bị bỏ qua. Mỗi dòng log được trả về cho tác nhân có thể đi vào context và tiếp tục được phát lại ở lượt sau.
Làm command im lặng hơn
Thay vì:
npm test
Dùng:
npm test --silent -- --reporter=dot
Thay vì:
npm install
Dùng:
npm install --silent --no-audit --no-fund
Chỉ trả về phần log quan trọng
pytest -q 2>&1 | tail -n 30
npm test 2>&1 | grep -E "(FAIL|✗|Error)" | head -n 20
git diff --stat
Chỉ dùng full diff khi thật sự cần:
git diff src/payments/retry.ts
Tránh đọc toàn bộ file lớn
Thay vì để tác nhân đọc file 1.500 dòng, yêu cầu nó tìm symbol trước:
Tìm hàm xử lý retry trong src/payments/retry.ts.
Chỉ đọc vùng code quanh hàm đó, không đọc toàn bộ file nếu không cần.
Hoặc dùng CLI:
grep -n "function retry" src/payments/retry.ts
sed -n '120,220p' src/payments/retry.ts
Khác biệt có thể là vài trăm token thay vì hàng chục nghìn token.
8. Giới hạn truy xuất trong RAG hoặc code search
Nếu tác nhân dùng tìm kiếm codebase hoặc RAG trên tài liệu, hãy giới hạn:
- số lượng đoạn trả về
- kích thước mỗi đoạn
- thư mục được tìm kiếm
- loại file được phép đọc
Ví dụ prompt:
Tìm tối đa 5 đoạn liên quan nhất.
Mỗi đoạn không quá 200 token.
Ưu tiên src/payments và docs/payments.
Không đọc generated files.
Mười đoạn ngắn, đúng trọng tâm thường tốt hơn năm mươi đoạn dài làm nhiễu context. Bạn trả tiền cho mọi token được truy xuất, dù mô hình có dùng hay không.
9. Đo chi phí theo từng lần chạy
Bạn không thể tối ưu thứ mình không đo.
Nếu gọi API trực tiếp, lưu usage metadata:
u = response.usage
INPUT_RATE = 3.00 / 1_000_000
OUTPUT_RATE = 15.00 / 1_000_000
CACHE_READ = 0.30 / 1_000_000
CACHE_WRITE = 3.75 / 1_000_000
cost = (
u.input_tokens * INPUT_RATE +
u.output_tokens * OUTPUT_RATE +
u.cache_read_input_tokens * CACHE_READ +
u.cache_creation_input_tokens * CACHE_WRITE
)
print(
f"run cost ≈ ${cost:.4f} "
f"(in={u.input_tokens} out={u.output_tokens} "
f"cache_read={u.cache_read_input_tokens})"
)
Các mức giá trên chỉ để minh họa. Hãy thay bằng giá thực tế của model bạn dùng.
Nếu dùng CLI agent, có thể đo bằng cách:
# Kiểm tra chi phí phiên nếu CLI hỗ trợ
claude /cost
Hoặc tách API key theo dự án/tác nhân để dashboard nhà cung cấp phân bổ chi phí rõ hơn.
Một wrapper script đơn giản cũng đủ hữu ích:
#!/usr/bin/env bash
TASK_LABEL="$1"
shift
START=$(date -Iseconds)
claude "$@"
END=$(date -Iseconds)
echo "$START,$END,$TASK_LABEL" >> agent-runs.csv
Sau đó ghi thêm chi phí/token từ CLI hoặc dashboard vào CSV. Sau một tuần, bạn sẽ biết tác vụ nào đang tốn tiền nhất.
Bảng so sánh chiến thuật
| Chiến thuật | Mức tiết kiệm token điển hình | Nỗ lực |
|---|---|---|
| Khoanh vùng tập hợp làm việc | 30–60% input mỗi lần chạy | Thấp |
| Rút gọn tệp bộ nhớ dự án | 5–15% mỗi lượt | Thấp |
/compact hoặc /clear giữa các tác vụ |
40–80% trong phiên dài | Thấp |
| Prompt caching cho prefix ổn định | ~90% trên phần được cache | Trung bình |
| Định tuyến mô hình | 50–80% trên tác vụ phụ phù hợp | Trung bình |
| Tool output im lặng hoặc đã lọc | 20–50% với workflow nhiều tool | Thấp |
| Đọc có mục tiêu thay vì đọc toàn file | 70–95% trên file lớn | Thấp |
| Giới hạn RAG/code search | 30–60% với agent dùng truy xuất nhiều | Trung bình |
| Đo chi phí từng lần chạy | Không giảm trực tiếp, nhưng giúp tối ưu đúng chỗ | Thấp |
Các con số trên chỉ mang tính minh họa. Mức tiết kiệm thực tế phụ thuộc vào mức lãng phí ban đầu trong workflow của bạn.
Checklist triển khai nhanh
Áp dụng theo thứ tự này để có hiệu quả nhanh:
- Rút gọn
CLAUDE.md. - Thêm ignore cho
dist/,build/,coverage/, generated files. - Luôn prompt với file/thư mục cụ thể.
- Dùng
/clearkhi đổi tác vụ. - Dùng
/compactkhi phiên dài nhưng vẫn cùng chủ đề. - Chuyển command test/install sang chế độ ít log.
- Dùng
git diff --stattrước khi full diff. - Đặt model rẻ cho commit message, changelog, tóm tắt.
- Bật prompt caching nếu bạn gọi model trực tiếp.
- Ghi lại token/chi phí theo từng tác vụ đại diện.
Kết luận
Chi phí token của tác nhân CLI thường không đến từ phần reasoning thật sự, mà từ context thừa, log thừa, lịch sử phiên quá dài và việc dùng mô hình đắt cho tác vụ đơn giản.
Bắt đầu bằng các thay đổi rẻ nhất: khoanh vùng tác vụ, làm sạch tệp bộ nhớ, cắt output tool và reset phiên đúng lúc. Sau đó thêm prompt caching, model routing và đo chi phí theo từng lần chạy. Khi các thói quen này trở thành mặc định, hóa đơn giảm mà chất lượng công việc vẫn giữ nguyên.
Top comments (0)