Bỏ qua, tới nội dung chính

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.

ModelCửa sổ contextGhi chú
deepseek-v4-flash · deepseek-v4-pro · glm-5.3-flash · glm-5.31.048.576 tokenLớp 1M
kimi-k2.6 · kimi-k2.7-code · glm-5.2 · qwen3.8-27b262.144 tokenLớp 256K
glm-4.7-flash131.072 tokenLớ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), 72–77 ms trên glm-5.3 (~23 s ra token đầu ở cỡ 300K), 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:

error
# 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_tokens rồ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
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 GLMtrong 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 Kimilệch vài % — estimator dùng đúng tỷ lệ của từng model
Tiếng Việt trên model DeepSeeklệ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

HeaderCó mặt khi nàoÝ nghĩa
x-gw-context-windowMọi response một khi model đã xác định, kể cả stream và lỗiCử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-tokensResponse non-stream và cache hitUsage 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.

DeepSeek V4 và GLM 5.3 Flash: giá cached là thật, nhưng hit chưa đều

Từ 26/08/2026 chúng tôi thấy request production trên deepseek-v4-flash và deepseek-v4-pro được tính giá cached_input khi tiền tố lặp lại trúng cache — và đồng thời vẫn có những lượt lặp nguyên văn bị tính giá input thường. Bài đo 27/08/2026 trên glm-5.3-flash ra đúng hình dạng đó: có lượt trúng cache thật, tính đúng giá cached công bố, xen kẽ những lượt lặp nguyên văn vẫn trượt. Trên glm-5.3 — bản full, vào catalog 28/08/2026 — bài đo lặp nguyên văn của chúng tôi còn chưa thấy lượt trúng nào. Cache đang được phía nguồn bật dần, chưa bảo đảm trúng ở mọi request. Khi trúng, giá cached tự áp không cần làm gì; chừng nào nó chưa đều, hãy coi khoản giảm là phần thưởng thêm chứ đừng xây bài toán chi phí dựa vào nó. Gửi các request liên quan sát nhau tăng cơ hội trúng. Chúng tôi cũng chưa đo được tuổi thọ cache trên các model này — chính vì hit còn thất thườ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.

  • 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.