Context & cache
Workload context dài và agent sống chết ở ba thứ: biết giới hạn, biết mình đang ở đâu so với nó, và hưởng giá cache mà không phải làm gì đặc biệt. Trang này nói cả ba — kèm một cam kết: chúng tôi không bao giờ viết lại hay cắt bớt messages của bạn.
Cửa sổ context
Mỗi model có cửa sổ context cố định tính trên token input CỘNG ngân sách max_tokens — nhà cung cấp đếm cả hai khi quyết request có vừa không, nên prompt còn dưới cửa sổ vẫn có thể bị từ chối nếu max_tokens đẩy tổng vượt trần.
| Model | Cửa sổ context | Ghi chú |
|---|---|---|
deepseek-v4-flash · deepseek-v4-pro | 1.048.576 token | Lớp 1M |
kimi-k2.6 · kimi-k2.7-code · glm-5.2 · qwen3.8-27b | 262.144 token | Lớp 256K |
glm-4.7-flash | 131.072 token | Lớp 128K |
Làm việc gần mốc 1M token
Với lớp model 1M, prefill là công việc thật: chúng tôi đo được ~45 ms mỗi 1.000 token input trên deepseek-v4-flash (prompt 600K token mất hơn một phút mới ra token đầu), còn deepseek-v4-pro có thể xếp hàng lâu hơn lúc đông tải. Hãy dùng streaming cho request lớn, và chấp nhận 429 no_capacity có thể xuất hiện giờ cao điểm với request rất lớn — lỗi này retry được.
Danh sách sống ở trang models và GET /v1/models. Độ dài output bị chặn riêng bởi max_tokens (mặc định 16.384 mỗi request cho một tổ chức).
Khi request quá lớn
Request quá cỡ fail nhanh với 400 context_length_exceeded — bị từ chối trước khi model chạy, nên không bị tính tiền. Message mang số ước lượng và giới hạn:
# 400 context_length_exceeded
{
"error": {
"message": "Estimated 332876 tokens (input + max_tokens) exceeds the model context window of 262144 tokens. Reduce message length or max_tokens.",
"type": "invalid_request_error",
"code": "context_length_exceeded",
"param": null
}
}- Đừng retry y nguyên. Cùng payload thì lần nào cũng bị từ chối y hệt. Rút gọn hội thoại hoặc giảm
max_tokensrồi mới gửi lại. - Cửa kiểm là ước lượng. Ngưỡng từ chối tính từ phép xấp xỉ, không phải chạy tokenizer chính xác — hãy coi các con số là ranh cứng có chút nhiễu, chừa lề thay vì tính sát từng token.
Đếm token trước khi gửi
POST /v1/count_tokens trả ước lượng cho messages của bạn mà không đụng model — miễn phí, không trừ rate limit, không tính tiền:
curl https://api.clfaigateway.dev/v1/count_tokens \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k2.6",
"messages": [{"role": "user", "content": "Summarize this repository..."}]
}'
# 200
{
"object": "token_count",
"model": "kimi-k2.6",
"estimated": true,
"method": "chars-per-model",
"estimated_input_tokens": 1210,
"context_window": 262144
}Ước lượng là ceil(tổng ký tự content / 4) — cùng họ xấp xỉ với cửa kiểm của nhà cung cấp, đó là lý do chúng tôi mô phỏng nó thay vì chạy một tokenizer sẽ cãi nhau với người gác cổng. Response dán nhãn "estimated": true, và sai số trung thực đo trên usage thật là:
| Loại nội dung | Ước lượng so với thật |
|---|---|
| Văn xuôi tiếng Anh | +22% đến +28% (ước cao — an toàn) |
| Tiếng Việt trên model GLM | trong khoảng ±2% |
| Mã nguồn | −3% đến −7% (Kimi/GLM) · −18% đến −35% (DeepSeek) |
| JSON / dữ liệu số | −16% đến −23% (Kimi/GLM) · −26% đến −40% (DeepSeek) |
| Tiếng Việt trên model Kimi | lệch vài % — estimator dùng đúng tỷ lệ của từng model |
| Tiếng Việt trên model DeepSeek | lệch vài % — như trên |
Prompt tiếng Việt trên Kimi và DeepSeek
Kimi token hóa tiếng Việt ở mức ~1,8 ký tự mỗi token và DeepSeek ~2,4, trong khi GLM ~4,1 và Qwen ~4,5. Cùng một đoạn văn vì thế tốn token input gấp ~2,2 lần trên Kimi so với GLM — đó là chênh lệch GIÁ thật, không phải sai số ước lượng. Từ 18/08/2026 estimator đã áp đúng tỷ lệ đo được của từng model cho văn bản tiếng Việt, nên bạn không phải tự nhân đôi nữa; thứ đáng cân nhắc là chọn model nào cho khối lượng việc tiếng Việt.
Header context trên mọi response
| Header | Có mặt khi nào | Ý nghĩa |
|---|---|---|
x-gw-context-window | Mọi response một khi model đã xác định, kể cả stream và lỗi | Cửa sổ context của model đã phục vụ (hoặc từ chối) request |
x-gw-prompt-tokens / x-gw-cached-tokens / x-gw-completion-tokens | Response non-stream và cache hit | Usage của request này, khớp từng token với object usage. Stream gửi header trước khi có usage — đọc chunk cuối thay thế. |
Prefix cache tự động
Prompt caching là tự động. Không có field nào để bật, không header nào phải gửi — tiền tố prompt lặp lại được phục vụ từ cache của nhà cung cấp và tính giá cached_input rẻ hơn (xem giá live) bất kể request rơi vào đâu.
Chuyển từ Anthropic hay OpenAI sang?
Không có block cache_control, không có TTL cache phải quản. Cứ gửi messages chuẩn OpenAI; cache tự chạy. Field lạ ở cấp cao nhất bị từ chối bằng unknown_parameter chứ không bị nuốt im lặng.
qwen3.8-27b: hiện không có giảm giá cached input
Prefix cache chưa hoạt động với model này trong bài đo của chúng tôi (lặp nguyên văn prompt 150K token sau 60 giây: 0 token cached), và phía nguồn cũng không công bố dòng giá cached riêng. Vì vậy chúng tôi để giá cached input bằng đúng giá input thường, thay vì quảng cáo một khoản tiết kiệm sẽ không tới. Prefill của model này cũng chậm hơn — cỡ 165–195 ms mỗi 1.000 token input — nên prompt rất lớn sẽ mất thời gian thật trước khi câu trả lời bắt đầu. Chúng tôi đo lại định kỳ; nếu có giá cached thật, trang models hiện ngay khi nó có hiệu lực.
DeepSeek V4: giá cached đã niêm yết, cache chưa kích hoạt
Giá cached_input của hai model DeepSeek V4 đã công bố và nối sẵn vào hệ thống, nhưng số đo ngày 16/08/2026 cho thấy prefix cache phía nguồn CHƯA phục vụ các model này (lặp nguyên văn một prompt 300K token sau 60 giây: 0 token cached). Bạn không bao giờ bị tính nhầm giá cached — nó đơn giản tự có hiệu lực ngay khi cache phía nguồn bật. Chúng tôi đo lại định kỳ; ghi chú này sẽ gỡ khi cache sống.
- Cache tính theo block 64 token — prompt rất ngắn không cache được; phần lợi bắt đầu từ vài trăm token tiền tố ổn định.
- Tiền tố đã cache còn ấm ít nhất một giờ khi được dùng lại — dư sức phủ phiên chat và vòng lặp agent.
- Giữ tiền tố ổn định từng byte để hưởng giá: system prompt cố định đứng đầu, lịch sử chỉ nối thêm, và đừng đặt timestamp, request id hay giá trị ngẫu nhiên gần đầu hội thoại. Một byte đổi ở đầu prompt là mọi block phía sau mất cache.
- Định nghĩa tools được serialize tất định bởi gateway (thứ tự khóa ổn định), nên cùng một bộ tools không bao giờ vô tình phá cache.
Chúng tôi không bao giờ sửa messages của bạn
Gateway forward messages đúng nguyên văn bạn gửi — không cắt bớt, không tóm tắt, không nén giữa chừng, không bao giờ, kể cả dưới dạng opt-in. Request không vừa thì fail to tiếng bằng lỗi phía trên thay vì bị âm thầm gọt thành một câu hỏi khác. Chiến lược quản lý context (cửa sổ trượt, tóm tắt lượt cũ) thuộc về ứng dụng của bạn, nơi bạn biết cái gì quan trọng; API này bảo đảm model thấy đúng thứ bạn đã gửi.