All notes

Ư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ấpsànkhốiđọc từ cache
OpenAI1,024 đến 2,048 tùy model128 token0.1×
Anthropic512 / 1,024 / 2,048 / 4,096 tùy modelđiểm ngắt0.1×, phải bật
Gemini2,048, model mới hơn là 4,096không áp dụng0.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=20D=24D=28D=33
Tiếng Anh0001024
Tiếng Hàn0102412801536
Tiếng Việt1024115212801536
Tiếng Thái1280153617922048
Tiếng Nhật1024128015361792

Đâ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.