Ưu đãi cache có một cái sàn
Cùng một prompt, nhưng lưu lượng tiếng Hàn bị tính tiền chỉ bằng một phần mười lưu lượng tiếng Anh. Pipeline không hỏng. Chỉ là tiếng Anh ngắn tới mức không đủ điều kiện cache.
6 phút đọcViết từ Seoul và Nha Trang
Một trong các pipeline trích xuất của chúng tôi chạy cùng một system prompt bằng ba thứ tiếng. Tháng Sáu, bảng chi phí theo ngôn ngữ bỗng trở nên vô lý: các lệnh gọi tiếng Hàn và tiếng Việt bị tính tiền chỉ khoảng một phần mười so với tiếng Anh, dù prompt nói đúng một điều với đúng một model. Chẳng có gì hỏng cả. Tiếng Anh không được cache, hai thứ tiếng kia thì có.
Điều khoản không ai đọc
Prefix caching có cổng chặn. Một prefix chỉ được hưởng giá cache sau khi vượt qua một số token tối thiểu, và ở dưới cái sàn đó bạn trả giá đầy đủ mãi mãi, gửi lại đúng từng byte bao nhiêu lần cũng vậy. Các mức sàn đều được công bố, và cả ba nhà cung cấp đều tính bằng token.
| nhà cung cấp | sàn | khối | đọc từ cache |
|---|---|---|---|
| OpenAI | 1,024 đến 2,048 tùy model | 128 token | 0.1× |
| Anthropic | 512 / 1,024 / 2,048 / 4,096 tùy model | điểm ngắt | 0.1×, phải bật |
| Gemini | 2,048, model mới hơn là 4,096 | không áp dụng | 0.1×, ngầm định |
Kích thước khối là nửa còn lại của điều khoản. Cache chỉ di chuyển theo trọn khối 128 token, nên phần dư bị tính lại giá đầy đủ ở từng lệnh gọi.
eligible = prompt_tokens >= FLOOR // 1024 on our models
cached = Math.floor(prompt_tokens / 128) * 128
full = prompt_tokens - cached + tail // paid every call, forever
Token không trung lập với ngôn ngữ
Cùng một ý nghĩa tốn số token khác nhau ở mỗi ngôn ngữ, và tiếng Anh gần như luôn rẻ nhất. Người ta thường dẫn điều đó như một vấn đề công bằng gây thiệt cho các ngôn ngữ khác, và ở đoạn prompt đủ dài thì đúng là vậy. Nhưng đặt nó cạnh một cái sàn thì dấu bị đảo ngược. Vì tiếng Anh phình ít nhất, tiếng Anh là ngôn ngữ chạm sàn sau cùng. Tức là tồn tại một dải độ dài prompt mà mọi bản dịch đều được cache, còn bản gốc thì không.
Chúng tôi không tin phép tính suông mà đối chiếu với hóa đơn thật. Cùng một nội dung, dịch ra, gửi ở độ sâu tăng dần, rồi đọc thẳng usage.prompt_tokens_details.cached_tokens trong mỗi phản hồi.
| ngôn ngữ | D=20 | D=24 | D=28 | D=33 |
|---|---|---|---|---|
| Tiếng Anh | 0 | 0 | 0 | 1024 |
| Tiếng Hàn | 0 | 1024 | 1280 | 1536 |
| Tiếng Việt | 1024 | 1152 | 1280 | 1536 |
| Tiếng Thái | 1280 | 1536 | 1792 | 2048 |
| Tiếng Nhật | 1024 | 1280 | 1536 | 1792 |
Đây là số token được cache chứ không phải số tiền, nên không có gì để diễn giải. Ở D=24 và D=28, tiếng Anh là ngôn ngữ duy nhất trong bảng phải trả giá đầy đủ. Bản thân cái sàn cũng chính xác: một prefix tiếng Hàn ở 971 token thì không được cache, vẫn prefix ấy ở 1,157 token thì được. Và mọi ô đủ điều kiện đều khớp floor(p / 128) * 128 với sai số bằng không, nghĩa là quy tắc khối không phải một cách làm tròn cho tiện, nó chính là cách tính tiền.
Những gì chúng tôi đổi ngay chiều hôm đó
- Tỷ lệ cache hit giờ là chỉ số tách theo từng ngôn ngữ. Con số gộp suốt thời gian đó trông vẫn khỏe mạnh, vì hai trong ba ngôn ngữ đang kéo nó lên. Lấy trung bình các ngôn ngữ chính là cách giấu đi đúng cái sự cố mà chỉ số đó lẽ ra phải phơi ra.
- Mọi prompt production đều ghi log độ dài kèm mức sàn. Không phải độ dài của nó, mà là khoảng cách còn lại tới sàn, có dấu.
- Prompt tiếng Anh nằm dưới sàn là một cảnh báo, không phải một ghi chú. Đó là con bug rẻ nhất chúng tôi từng sửa, và nhìn vào hóa đơn thì không thấy được. Hóa đơn chỉ nói tổng tiền đã tăng.
Cách sửa hiển nhiên là độn thêm cho prompt ngắn vượt qua sàn. Nghe như đi cửa sau, mà đi cửa sau thì thường phải trả giá gì đó, nên trước khi đưa lên production chúng tôi đo xem cái giá ấy là bao nhiêu. Đó là nội dung ghi chú tiếp theo.