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-pro1.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), 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 modelsGET /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.

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.