Bộ nhớ đệm lời nhắc là đòn bẩy đơn lẻ lớn nhất trên hóa đơn của một tác vụ, và cũng là thứ có khả năng âm thầm không hoạt động nhất. Nếu đánh dấu đúng, phần lặp lại trong yêu cầu của bạn được tính bằng một phần mười mức phí đầu vào. Nếu đánh dấu sai — hoặc định tuyến qua thứ viết lại tiền tố — phần đó bị tính cao hơn mức thông thường, vì bạn đang trả tiền để ghi các mục bộ nhớ đệm mà không ai đọc.
Cơ chế này đã được tài liệu hóa đầy đủ ở nơi khác. Điều không được tài liệu hóa ở đâu là những gì thay đổi khi yêu cầu đi qua gateway, vốn là tình huống của hầu hết người đọc trang này. Cả hai phần đều ở bên dưới.
Tài liệu tham chiếu để làm điều này trên Kunavo — các trường của yêu cầu, giá bộ nhớ đệm của từng mô hình và cách kiểm tra bằng hai yêu cầu — là tài liệu về bộ nhớ đệm prompt; trang này nói về lý do bộ nhớ đệm không còn đem lại lợi ích.
Tóm tắt cơ chế
Bạn đánh dấu một tiền tố ổn định — lời nhắc hệ thống, lược đồ công cụ, tài liệu — và nhà cung cấp lưu dạng đã xử lý của nó. Yêu cầu tiếp theo có tiền tố khớp chính xác sẽ đọc lại tiền tố đó thay vì xử lý lại.
{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"system": [
{
"type": "text",
"text": "<your long, stable instructions>",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [{ "role": "user", "content": "..." }]
}Hai thuộc tính thực hiện toàn bộ công việc và gây ra mọi rắc rối. Việc khớp dựa trên tiền tố, nên bất cứ thay đổi nào ở phần đầu đều làm mất hiệu lực của mọi phần sau đó. Một mục cũng có thời gian tồn tại, nên cuộc trò chuyện có khoảng cách dài giữa các lượt sẽ xây dựng lại thay vì đọc lại.
Chi phí
| Mô hình | Đầu vào, trên mỗi 1M | Đọc bộ nhớ đệm | Ghi bộ nhớ đệm trên Kunavo |
|---|---|---|---|
| Claude Haiku 4.5 | $0,70 | $0,07 | $0,88 |
| Claude Sonnet 5 | $1,40 | $0,14 | $1,75 |
| Claude Opus 5 | $3,50 | $0,35 | $4,38 |
Cột thứ ba là tỷ lệ tiêu chuẩn: một lần đọc có giá bằng một phần mười đầu vào. Cột thứ tư cũng là tiêu chuẩn — một lần ghi bộ nhớ đệm có giá 1,25× đầu vào, là hệ số Anthropic liệt kê cho mục năm phút — và vì cả hai tỷ lệ đều áp dụng cho giá đầu vào của Kunavo, mỗi tỷ lệ có cùng mức chiết khấu so với bảng giá Anthropic như đầu vào của mô hình. Điểm Kunavo khác Anthropic là mục một giờ: Anthropic liệt kê lần ghi đó ở mức 2× đầu vào, còn Kunavo tính ở mức 1,25× tương tự. Điều này đặc biệt quan trọng với khối lượng công việc thường xuyên xây dựng lại — các tác nhân chạy trong thời gian dài, cuộc trò chuyện chậm, bất kỳ thứ gì có tiền tố thay đổi liên tục — vì đó là các khối lượng công việc mà lần ghi, chứ không phải lần đọc, chiếm phần chính trên hóa đơn bộ nhớ đệm.
Cả hai con số đều được đọc từ danh mục tại thời điểm hiển thị, cùng nguồn mà bảng giá và công cụ tính Claude đọc — không có mức giá nào được nhập thủ công trên trang này.
Đọc đối tượng usage
Đừng suy luận hành vi bộ nhớ đệm từ hóa đơn; mọi phản hồi đều cho bạn biết trực tiếp, và ba số lượng token là toàn bộ chẩn đoán.
// The four numbers that tell you whether caching is working.
// Read them from every response before you tune anything.
"usage": {
"input_tokens": 312, // billed at the input rate
"cache_creation_input_tokens": 0, // billed at the write rate
"cache_read_input_tokens": 24106, // billed at the read rate
"output_tokens": 890
}
// A healthy cached agent turn looks like the above: a small
// input_tokens, a large cache_read, and a zero creation.
// If cache_creation is large on EVERY turn, the cache is being
// rebuilt each time and you are paying more, not less.Vì sao tỷ lệ hit giảm phía sau gateway
Bộ nhớ đệm nằm tại upstream đã tạo ra nó, còn việc khớp tiền tố là chính xác. Hai sự thật đó cùng nhau tạo ra ba dạng lỗi không bao giờ xảy ra khi bạn gọi trực tiếp một nhà cung cấp:
Định tuyến đã thay đổi. Nếu các yêu cầu liên tiếp đến các upstream khác nhau, yêu cầu thứ hai không tìm thấy bộ nhớ đệm — mục mà yêu cầu thứ nhất ghi không hiển thị ở nơi yêu cầu thứ hai chạy. Điều này không xuất hiện trong nhật ký của bạn và chỉ thể hiện qua số lượng tạo bộ nhớ đệm lẽ ra phải là số lượng đọc. Đây là nguyên nhân phổ biến nhất, cũng là lý do gateway tự do định tuyến lại giữa các upstream có thể rẻ hơn theo token nhưng đắt hơn theo phiên.
Có thứ gì đó được chèn trước tiền tố của bạn. Một lớp viết lại thông báo hệ thống, chuẩn hóa định nghĩa công cụ hoặc sắp xếp lại các trường sẽ tạo ra tiền tố khác, và tiền tố khác là cache miss. Không có lỗi nào xảy ra; hóa đơn chỉ tăng lên.
Khoảng cách dài hơn thời gian tồn tại của mục. Một tác vụ suy nghĩ vài phút giữa các lượt có thể xây dựng lại mỗi lần. Đây là thuộc tính của khối lượng công việc chứ không phải gateway, nhưng nó tương tác xấu với nguyên nhân đầu tiên: một lần xây dựng lại cũng là một cơ hội định tuyến lại.
Cách chẩn đoán cả ba trường hợp là như nhau — theo dõi cache_creation_input_tokens trong suốt một phiên. Giá trị luôn cao và không thay đổi nghĩa là bạn đang xây dựng lại. Giá trị cao một lần rồi bằng 0 sau đó nghĩa là bộ nhớ đệm đang hoạt động. Trên Kunavo, chi phí cho từng yêu cầu và số token được lưu trong bộ nhớ đệm có trong trang thống kê sử dụng, còn tài liệu tham khảo về bộ nhớ đệm có thông tin chi tiết cho từng điểm cuối.
Cần làm gì
Giữ tiền tố được lưu trong bộ nhớ đệm thực sự ổn định — đặt mọi thứ thay đổi theo từng yêu cầu sau khối được đánh dấu, không bao giờ đặt trước nó. Gom các lượt của tác vụ gần nhau hơn khi có thể, vì thời gian nhàn rỗi là kẻ thù của mục có thời gian tồn tại ngắn. Và đo lường toàn bộ phiên thay vì một yêu cầu: bộ nhớ đệm là thuộc tính của một chuỗi, còn ước tính theo từng yêu cầu không thể thấy điều đó. Công cụ tính chi phí token Claude có trường token được lưu trong bộ nhớ đệm chính vì lý do này — đặt nó thành phần lời nhắc thực sự lặp lại và con số hằng tháng sẽ không còn là hư cấu.
Câu hỏi thường gặp
Bộ nhớ đệm lời nhắc Claude hoạt động như thế nào?
Bạn đánh dấu một tiền tố ổn định của yêu cầu — thường là lời nhắc hệ thống, định nghĩa công cụ hoặc tài liệu dài — bằng cache_control, rồi nhà cung cấp lưu dạng đã xử lý của các token đó. Ở yêu cầu tiếp theo có tiền tố khớp chính xác, các token đó được phục vụ từ bộ nhớ đệm và tính phí bằng một phần mức phí đầu vào thay vì được xử lý lại. Việc khớp dựa trên tiền tố chính xác, nên bất cứ thứ gì thay đổi ở phần đầu yêu cầu đều làm mất hiệu lực của mọi phần sau đó.
Bộ nhớ đệm lời nhắc Claude tiết kiệm được bao nhiêu?
Đọc bộ nhớ đệm được tính phí bằng một phần mười mức giá input của model. Với Claude Sonnet 5, mức đó là $0,14 thay vì $1,40 cho mỗi 1M token; với Claude Opus 5, $0,35 thay vì $3,50; với Claude Haiku 4.5, $0,07 thay vì $0,70. Khoản tiết kiệm hoàn toàn phụ thuộc vào tỷ lệ input được lặp lại: một sản phẩm trò chuyện trong đó mọi prompt đều khác nhau sẽ không tiết kiệm được gì, còn một coding agent gửi lại sơ đồ kho mã 24.000 token ở mỗi lượt sẽ biến phần lớn hóa đơn input thành một phần mười ban đầu.
Kunavo có tính phụ phí ghi bộ nhớ đệm không?
Có — cùng mức 1,25× mà Anthropic tính, áp dụng theo mức chiết khấu của mô hình. API riêng của Anthropic tính phí ghi một mục bộ nhớ đệm cao hơn mức đầu vào thông thường, vì việc ghi tốn chi phí xử lý cao hơn một token bình thường: 1,25× đầu vào cho mục năm phút và 2× cho mục một giờ. Kunavo tính mọi lần ghi bộ nhớ đệm bằng 1,25× mức đầu vào riêng của mô hình, bao gồm cả loại một giờ, vì vậy một lần ghi có cùng mức chiết khấu so với bảng giá Anthropic như đầu vào của mô hình — trên Claude Sonnet 5, $1,75 trên mỗi 1M token ghi so với $1,40 cho đầu vào thông thường. Điều này được đặt tại một nơi trong mã tính phí, với tỷ lệ ghi là 1,25 cho các mô hình Claude, và các công cụ tính trên trang này đọc mức giá kết quả từ cùng hàm đó thay vì ghi lại, nên con số chúng in ra không thể lệch với số tiền bị tính.
Vì sao tỷ lệ cache hit của tôi thấp khi đi qua gateway?
Vì bộ nhớ đệm gắn với upstream đang giữ nó, còn việc khớp tiền tố là chính xác. Trong thiết lập gateway, có ba điều làm hỏng bộ nhớ đệm nhưng sẽ không làm hỏng nó khi gọi trực tiếp một nhà cung cấp. Yêu cầu được định tuyến đến upstream khác với yêu cầu trước sẽ không tìm thấy bộ nhớ đệm ở đó, vì bộ nhớ đệm không được chia sẻ giữa các upstream. Bất kỳ thứ gì được chèn trước tiền tố của bạn — thông báo hệ thống bị viết lại, danh sách công cụ bị sắp xếp lại — đều tạo ra tiền tố khác và vì thế bị cache miss. Khoảng cách dài hơn thời gian tồn tại của mục sẽ làm mục hết hạn, khiến tác vụ phản hồi chậm phải xây dựng lại ở mỗi lượt. Đối tượng usage cho biết nguyên nhân: cache_creation_input_tokens lớn trong mọi yêu cầu nghĩa là đang xây dựng lại, không phải đang đọc bộ nhớ đệm.
Làm sao biết bộ nhớ đệm lời nhắc thực sự hoạt động?
Đọc đối tượng usage thay vì hóa đơn. Mỗi phản hồi báo riêng input_tokens, cache_creation_input_tokens và cache_read_input_tokens. Bộ nhớ đệm hoạt động sẽ có số lượng đầu vào nhỏ, số lượng cache_read lớn và số lượng tạo bằng 0 hoặc chỉ thỉnh thoảng. Bộ nhớ đệm bị xây dựng lại sẽ có số lượng tạo lớn ở từng lượt — tốn hơn cả không dùng bộ nhớ đệm, vì bạn trả tiền để ghi các mục mà không ai đọc.
Kích thước tối thiểu cho bộ nhớ đệm lời nhắc Claude là bao nhiêu?
Có một ngưỡng bên dưới đó tiền tố không thể được lưu trong bộ nhớ đệm, và ngưỡng này khác nhau theo cấp mô hình, nên một lời nhắc hệ thống ngắn có thể âm thầm không bao giờ được lưu, dù bạn đánh dấu nó thế nào. Cách kiểm tra thực tế là thực nghiệm thay vì dựa vào tài liệu: đánh dấu tiền tố, gửi hai yêu cầu giống hệt nhau và xem yêu cầu thứ hai có báo cache_read_input_tokens lớn hơn 0 hay không. Nếu không, tiền tố hoặc nằm dưới ngưỡng hoặc không giống nhau từng byte.
Bộ nhớ đệm lời nhắc có thay đổi nội dung mô hình trả về không?
Không. Bộ nhớ đệm là tối ưu hóa chi phí và độ trễ khi xử lý tiền tố, không phải thay đổi những gì mô hình nhìn thấy hay tạo ra. Cùng một yêu cầu có hoặc không có cache_control sẽ trả về cùng loại câu trả lời; điều thay đổi là chi phí của tiền tố và tốc độ token đầu tiên xuất hiện.