Hóa đơn Claude của bạn thường phình lên vì token đầu vào, không phải đầu ra. API không trạng thái, nên mỗi lượt gọi bạn thường gửi lại toàn bộ lịch sử: system prompt, định nghĩa tool, tài liệu đã dán vào và các tin nhắn trước đó. Trong một vòng lặp agent dài hoặc phiên Claude Code, phần ngữ cảnh bị gửi lại này tăng rất nhanh và bị tính phí ở mỗi request.
Vì vậy, muốn giảm chi phí Claude, hãy tập trung vào 3 hướng: gửi ít token hơn, trả ít tiền hơn cho mỗi token, hoặc tránh gửi lại ngữ cảnh không còn cần thiết. Bài viết này đi theo hướng triển khai: bắt đầu từ các tính năng nội bộ của Claude, sau đó là proxy pxpipe, và cuối cùng là cách dùng API mock khi bạn vẫn đang build/test.
Nếu bạn cần nắm lại nền tảng về cách Claude tính phí, token là gì, cache được tính như thế nào và xử lý theo lô hoạt động ra sao, hãy đọc trước bài giải thích chi phí API Claude của chúng tôi. Bài này chỉ tập trung vào cách cắt giảm hóa đơn.
1. Bật prompt caching cho phần prompt ổn định
Prompt caching thường là thay đổi có tác động lớn nhất với agent, Claude Code hoặc workflow dùng nhiều lượt gọi.
Ý tưởng triển khai:
- Tách prompt thành 2 phần:
- Ổn định: system prompt, tool definitions, tài liệu tham khảo dài.
- Biến động: user message hiện tại, timestamp, request ID, dữ liệu phiên.
- Chỉ cache phần ổn định.
- Đảm bảo phần được cache giống hệt nhau ở cấp byte giữa các request.
Prompt caching khớp tiền tố ở cấp byte. Chỉ cần một thay đổi nhỏ trong vùng cache, ví dụ timestamp, session ID, thứ tự tool bị đổi, hoặc request counter, cache sẽ miss và bạn trả lại chi phí đầu vào đầy đủ.
Chi phí cũng cần được hiểu đúng:
- Đọc từ cache có giá khoảng
0.1xso với input token thông thường. - Ghi cache tốn nhiều hơn input token thường:
- TTL 5 phút: khoảng
1.25x - TTL 1 giờ: khoảng
2x
- TTL 5 phút: khoảng
- Điểm hòa vốn:
- Cache 5 phút: khoảng 2 request
- Cache 1 giờ: khoảng 3 request
Nói cách khác: cache chỉ đáng dùng khi tiền tố được tái sử dụng.
Checklist triển khai
- Không đặt timestamp trong system prompt.
- Không trộn user-specific data vào phần cache.
- Giữ thứ tự tool definition ổn định.
- Không serialize JSON với thứ tự key thay đổi.
- Theo dõi
usage.cache_read_input_tokens.
Ví dụ kiểm tra cache hit:
const response = await client.messages.create({
model: "claude-opus-4-8",
max_tokens: 1024,
messages: [
{
role: "user",
content: "Phân tích đoạn code này..."
}
]
});
console.log(response.usage.cache_read_input_tokens);
Nếu cache_read_input_tokens luôn bằng 0 trong các request lặp lại, tiền tố của bạn đang thay đổi hoặc chưa được cache đúng cách.
Để hiểu sâu hơn cơ chế này, xem lưu trữ cache lời nhắc là gì và hoạt động như thế nào.
2. Chọn model theo tác vụ, không chọn theo thói quen
Một lỗi phổ biến là dùng model lớn cho mọi request. Cách tiết kiệm thực tế hơn là định tuyến request theo độ khó.
Giá hiện tại cho mỗi 1 triệu token:
| Mô hình | ID mô hình | Đầu vào | Đầu ra | Cửa sổ ngữ cảnh |
|---|---|---|---|---|
| Fable 5 | claude-fable-5 |
$10 | $50 | 1M |
| Opus 4.8 | claude-opus-4-8 |
$5 | $25 | 1M |
| Sonnet 5 | claude-sonnet-5 |
$3 ($2 giới thiệu) | $15 ($10 giới thiệu) | 1M |
| Haiku 4.5 | claude-haiku-4-5 |
$1 | $5 | 200K |
Cách chọn thực tế:
- Fable 5: chỉ dùng cho reasoning rất phức tạp, nơi khả năng bổ sung thực sự thay đổi kết quả.
- Opus 4.8: default hợp lý cho nhiều tác vụ agent, coding và tool-use.
- Sonnet 5: phù hợp cho production traffic lớn cần chất lượng tốt nhưng chi phí thấp hơn.
- Haiku 4.5: dùng cho phân loại, trích xuất, routing, phản hồi ngắn hoặc tác vụ cần tốc độ.
Một router đơn giản có thể như sau:
function selectClaudeModel(task: {
type: "classify" | "extract" | "code" | "agent" | "deep_reasoning";
latencySensitive?: boolean;
volume?: "low" | "high";
}) {
if (task.type === "classify" || task.type === "extract") {
return "claude-haiku-4-5";
}
if (task.volume === "high") {
return "claude-sonnet-5";
}
if (task.type === "deep_reasoning") {
return "claude-fable-5";
}
return "claude-opus-4-8";
}
Lưu ý về Fable 5: nếu một bộ phân loại an toàn từ chối request, tham số beta fallbacks có thể định tuyến lượt đó sang Opus 4.8 và lượt đó được tính theo giá Opus. Đây thường là giảm chi phí, không phải phí bất ngờ, nhưng bạn nên biết khi đọc billing.
Để phân tích kỹ hơn, xem giá của Opus 4.8, giá của Fable 5, và so sánh Fable 5 và Opus 4.8. Nếu bạn đang đánh giá model, xem thêm cách sử dụng Opus 4.8 miễn phí và gọi API Fable 5.
3. Chuyển workload không realtime sang Batch API
Nếu request không cần trả lời ngay, hãy dùng API xử lý theo lô. Bạn gửi job đến:
/v1/messages/batches
Job chạy bất đồng bộ và bạn lấy kết quả sau. Hầu hết batch hoàn thành trong vòng một giờ, thời gian tối đa là 24 giờ. Giảm giá 50% áp dụng cho cả input token và output token trong batch.
Các workload phù hợp:
- Chạy evaluation trên test set.
- Phân loại hoặc trích xuất hàng loạt.
- Tạo summary, tag hoặc metadata cho dữ liệu cũ.
- Backfill dữ liệu.
- Job chạy ban đêm hoặc không nhạy cảm với độ trễ.
Quy tắc đơn giản:
Nếu user đang chờ response -> dùng endpoint đồng bộ.
Nếu job có thể chờ vài phút hoặc vài giờ -> dùng batch.
Nếu một nửa chi phí Claude của bạn đến từ xử lý offline đang chạy qua endpoint đồng bộ, chuyển phần đó sang batch có thể giảm trực tiếp 50% chi phí của workload đó.
4. Đặt effort, max_tokens và dùng count_tokens
Ba cấu hình này giúp giới hạn chi phí từng request.
output_config.effort
output_config.effort có các giá trị:
low, medium, high, xhigh, max
Nó ảnh hưởng đến mức độ model “suy nghĩ” trước khi trả lời. Token dùng cho phần suy nghĩ cũng bị tính phí.
Cách dùng thực tế:
- Bắt đầu với
medium. - Chỉ tăng lên
high,xhighhoặcmaxkhi benchmark cho thấy chất lượng tăng rõ. - Với phân loại, trích xuất, routing: thử
low.
Ví dụ cấu hình theo loại tác vụ:
const effortByTask = {
classification: "low",
extraction: "low",
code_review: "medium",
agent_loop: "medium",
hard_reasoning: "high"
} as const;
max_tokens
max_tokens là giới hạn cứng cho output. Nó không làm response ngắn rẻ hơn, nhưng ngăn model trả lời quá dài ngoài ý muốn.
Ví dụ:
const response = await client.messages.create({
model: "claude-haiku-4-5",
max_tokens: 300,
messages: [
{
role: "user",
content: "Trả về JSON gồm sentiment và category cho đoạn text sau..."
}
]
});
Nếu bạn chỉ cần JSON ngắn, đừng để max_tokens là vài nghìn.
count_tokens
Dùng count_tokens để ước tính chi phí trước khi gửi request thật.
Không dùng tiktoken cho Claude. tiktoken là tokenizer của OpenAI và có thể ước tính thiếu token Claude khoảng 15–20%, khiến budget lệch đáng kể.
Luồng triển khai nên là:
build request -> count_tokens -> kiểm tra budget -> gửi request thật
Ví dụ logic:
if (inputTokenCount > MAX_INPUT_TOKENS) {
throw new Error("Prompt quá lớn, cần rút gọn trước khi gọi Claude");
}
5. Cắt ngữ cảnh bị gửi lại trong agent loop
Vì API không trạng thái, agent loop dài thường gửi lại toàn bộ lịch sử ở mỗi lượt. Sau vài chục lượt, nhiều phần lịch sử không còn hữu ích:
- Tool result cũ.
- File đã đọc một lần.
- Nhánh điều tra đã bị bỏ qua.
- Log trung gian.
- Output dài từ command line.
Bạn vẫn trả tiền để gửi lại chúng.
Claude có hai tính năng phía server để giảm phần này:
-
Chỉnh sửa ngữ cảnh:
clear_tool_uses_20250919Xóa các kết quả tool cũ khỏi ngữ cảnh gửi lại. -
Nén ngữ cảnh:
compact_20260112Tóm tắt lịch sử cũ thành dạng ngắn hơn.
Hai tính năng này giúp bạn tránh tự viết logic tóm tắt hoặc tự cắt mảng message thủ công.
Với Claude Code, đây cũng là vấn đề khiến phiên làm việc chạm giới hạn context giữa chừng. Xem thêm hướng dẫn về cửa sổ token và đặt lại trong Claude Code.
Nguyên tắc billing rất đơn giản: đừng trả tiền để gửi lại ngữ cảnh mà model không còn cần.
6. Thử pxpipe nếu ngữ cảnh của bạn lớn, ổn định và dày đặc
Các cách ở trên giảm hoặc định giá lại token bạn gửi. pxpipe tiếp cận khác: chuyển một số phần ngữ cảnh thành hình ảnh để giảm chi phí token hóa.
pxpipe là gì?
pxpipe là proxy cục bộ, MIT license, viết bằng TypeScript. Nó nằm giữa client của bạn và Anthropic API.
Bạn trỏ:
ANTHROPIC_BASE_URL
vào proxy, sau đó pxpipe kiểm tra và viết lại request trước khi gửi đi.
Cách chạy
Cài và chạy proxy:
npx pxpipe-proxy
Proxy mặc định chạy tại:
127.0.0.1:47821
Chạy Claude Code qua proxy:
ANTHROPIC_BASE_URL=http://127.0.0.1:47821 claude
Nó tiết kiệm bằng cách nào?
pxpipe chuyển các khối lớn, ổn định và dày đặc như system prompt, tool docs hoặc lịch sử cũ thành PNG nhỏ gọn. Nội dung dày đặc có thể đạt khoảng 3,1 ký tự trên mỗi image-token, so với khoảng 1 ký tự trên mỗi text-token.
Dự án báo cáo một ví dụ: system prompt cộng tool docs dài khoảng 48k ký tự chỉ còn khoảng 2,7k image token, so với khoảng 25k token nếu để dạng văn bản.
Quan trọng: pxpipe có logic kiểm tra lợi ích. Nó chỉ chuyển sang hình ảnh khi tính toán token cho thấy có lợi. Văn xuôi thưa sẽ được giữ nguyên dưới dạng text.
Hỗ trợ model
Mặc định, pxpipe chuyển hình ảnh request cho:
claude-fable-5- GPT 5.6
Opus 4.7/4.8 và GPT 5.5 là tùy chọn, vì dự án báo cáo các model này đọc ngữ cảnh hình ảnh kém hơn đáng kể. Bạn có thể bật bằng biến môi trường:
PXPIPE_MODELS=...
hoặc qua dashboard tại URL proxy.
Các con số tiết kiệm được báo cáo
Đây là số liệu do chính dự án báo cáo, không phải số liệu được xác minh độc lập:
- Snapshot production tiết kiệm 59%.
- Hóa đơn 100 USD giảm còn khoảng 41 USD trên 13.709 request.
- SWE-bench Lite giảm 65% kích thước request.
Hãy coi đây là benchmark của nhà cung cấp và đo lại trên traffic của bạn.
Đánh đổi cần kiểm tra
pxpipe không phải “tiền miễn phí”.
Thứ nhất, nó có thể xung đột với prompt caching. Prompt caching khớp byte theo tiền tố. Khi pxpipe chuyển nội dung thành hình ảnh, byte của request thay đổi. Vì cả hai đều nhắm vào input token, bạn cần benchmark:
cache only vs pxpipe only vs cache + pxpipe
Thứ hai, model đọc phần hình ảnh bằng thị giác. Dự án cũng cảnh báo rằng chuỗi dày đặc như ID hex dài hoặc token chính xác có thể bị đọc sai. Lỗi bỏ sót có thể im lặng, không phải exception.
Thứ ba, đây là proxy bên thứ ba nằm trên đường đi của request. Dù chạy cục bộ, bạn vẫn nên đánh giá theo chính sách bảo mật trước khi đưa production traffic qua nó.
pxpipe đáng thử nếu ngữ cảnh của bạn lớn, dày đặc, lặp lại nhiều lần và bạn có test chất lượng đủ tốt.
7. Mock Anthropic API trong giai đoạn dev/test
Các cách trên giảm chi phí production. Nhưng trong lúc build integration, bạn vẫn có thể đốt token thật cho những thứ không cần model thật:
- Test parsing response.
- Test retry logic.
- Test error handling.
- CI chạy sau mỗi lần push.
- Debug request schema.
- Kiểm tra contract giữa frontend/backend.
Apidog không làm giảm hóa đơn Claude production của bạn, và không nên được hiểu theo hướng đó. Nó giúp giảm chi phí trong vòng lặp phát triển và kiểm thử.
Thay vì gọi Anthropic API thật trong dev/test, hãy mock response bằng Apidog:
- Định nghĩa endpoint Claude mà app của bạn đang gọi.
- Mô tả request body và response body.
- Tạo mock response có cấu trúc giống response thật.
- Trỏ test hoặc CI vào mock server.
- Chỉ gọi Claude thật ở test tích hợp cuối hoặc staging có kiểm soát.
Ví dụ response mock có thể là:
{
"id": "msg_mock_001",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "{\"sentiment\":\"positive\",\"category\":\"product_feedback\"}"
}
],
"model": "claude-haiku-4-5",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 120,
"output_tokens": 20
}
}
Điều này giúp bạn kiểm tra parser, schema, retry và CI mà không tiêu tốn token thật.
Cách kết hợp các kỹ thuật
Đừng chọn một kỹ thuật duy nhất. Hãy áp dụng theo thứ tự có tác động cao nhất:
Cache tiền tố ổn định
Cache system prompt, tool definitions và tài liệu dài. Xác minh bằngcache_read_input_tokens.Router model theo task
Dùng Opus 4.8 làm default cho agent/coding, Fable 5 chỉ cho reasoning rất khó, Sonnet 5 cho volume lớn, Haiku 4.5 cho tác vụ đơn giản.Batch workload offline
Chuyển job không realtime sang/v1/messages/batchesđể được giảm 50%.Giới hạn từng request
Chọnefforthợp lý, đặtmax_tokens, và dùngcount_tokenstrước khi gửi request lớn.Cắt ngữ cảnh gửi lại
Dùng context editing và context compression để agent loop không trả tiền cho lịch sử không còn cần.Benchmark pxpipe
Nếu prompt lớn, dày đặc và lặp lại nhiều lần, so sánh pxpipe với prompt caching trên workload thật.Mock khi build/test
Dùng API mock cho CI và dev loop để không đốt token thật cho test contract.
Bắt đầu với prompt caching và model routing. Đây thường là hai thay đổi mang lại phần lớn mức giảm chi phí. Sau mỗi thay đổi, đo lại bằng usage và hóa đơn thực tế.
Câu hỏi thường gặp
Token đầu vào hay đầu ra tốn kém hơn?
Theo từng token, output token đắt hơn input token trên mọi model. Nhưng với agent và coding workflow, input thường chiếm phần lớn hóa đơn vì bạn gửi lại toàn bộ lịch sử ở mỗi lượt.
Prompt caching hay Batch API tiết kiệm hơn?
Tùy workload. Prompt caching có thể tiết kiệm tới khoảng 90% cho tiền tố lặp lại trong luồng tương tác. Batch API giảm 50% cho workload offline. Nhiều hệ thống nên dùng cả hai.
Có nên mặc định mọi request là Fable 5 không?
Không. Fable 5 đắt gấp đôi Opus 4.8 ở cả input và output. Chỉ dùng khi tác vụ thật sự cần khả năng reasoning bổ sung.
pxpipe có cộng dồn với prompt caching không?
Không chắc. Vì pxpipe thay đổi byte của request, nó có thể ảnh hưởng đến cache hit. Hãy benchmark trên prompt thật của bạn thay vì giả định hai kỹ thuật cộng dồn.
Apidog có giảm chi phí Claude production không?
Không. Apidog giúp mock Anthropic API trong dev/test để CI và test không gọi model thật. Nó giảm chi phí phát triển và kiểm thử, không giảm hóa đơn production.
Top comments (0)