
Bộ nhớ đệm LLM Prompt: Cắt giảm 90% chi phí API (Cả 3 nhà cung cấp)
Bộ nhớ đệm prompt LLM cho phép bạn tái sử dụng các token đã xử lý trước đó qua các lần gọi API, giúp cắt giảm chi phí đầu vào đến 90% và giảm thời gian nhận token đầu tiên (time-to-first-token) đến 85%. Nếu bạn gửi cùng một system prompt, định nghĩa công cụ hoặc ví dụ few-shot trong mỗi yêu cầu, bạn đang trả đầy đủ giá cho những công việc mà GPU đã thực hiện xong.
Hướng dẫn này bao gồm OpenAI, Anthropic và Gemini với cùng một chatbot được triển khai trên cả ba SDK, điều mà không hướng dẫn nào khác làm được. Chúng ta cũng sẽ đề cập đến bản cập nhật bộ nhớ đệm tự động của Anthropic vào tháng 2 năm 2026, các kịch bản chi phí sản xuất với số tiền đô la thực tế, và những phản mẫu (anti-patterns) âm thầm phá hủy tỷ lệ truy cập bộ nhớ đệm (cache hit rate) của bạn.
<!-- IMAGE: Sơ đồ luồng tái sử dụng bộ nhớ đệm KV hiển thị khớp tiền tố prompt, đường đi truy cập bộ nhớ đệm (nhanh, rẻ) và đường đi trượt bộ nhớ đệm (xử lý tiêu chuẩn) -->Tóm tắt nhanh, Tổng quan cả ba nhà cung cấp
Trước khi đi sâu vào chi tiết triển khai, đây là bảng so sánh đầy đủ. Nếu bạn đã biết mình đang dùng nhà cung cấp nào, hãy nhảy thẳng đến phần tương ứng. Nếu bạn đang đánh giá, bảng này cho bạn biết mọi thứ chỉ trong 10 giây.
| Tính năng | OpenAI | Anthropic | Gemini |
|---|---|---|---|
| Loại bộ nhớ đệm | Tự động | Tự động + Tường minh | Ngầm định + Tường minh |
| Token tối thiểu | 1.024 | 1.024 (hầu hết mô hình) | 1.024 (Flash) / 4.096 (Pro) |
| TTL (Thời gian sống) | 5-10 phút (lên đến 24h nếu gia hạn) | 5 phút hoặc 1 giờ | Có thể cấu hình (mặc định 1 giờ) |
| Chi phí ghi bộ nhớ đệm | 1x (không phụ phí) | 1.25x (5 phút) / 2x (1 giờ) | 1x (không phụ phí) |
| Giảm giá đọc bộ nhớ đệm | Giảm 50% đầu vào | Giảm 90% đầu vào | ~Giảm 90% đầu vào |
| Cô lập bộ nhớ đệm | Tổ chức (Organization) | Không gian làm việc (Workspace) | Dự án (Project) |
| Hỗ trợ Streaming | Có | Có | Có |
| Trường phản hồi Cache Hit | cached_tokens | cache_read_input_tokens | cachedContentTokenCount |
| Kiểm soát tường minh | Không | Có (cache_control) | Có (đối tượng bộ nhớ đệm có tên) |
| Cập nhật lớn mới nhất | Tháng 10/2024 | Tháng 2/2026 (tự động hóa) | 2026 (bộ nhớ đệm ngầm định) |
Điểm mấu chốt: OpenAI là đơn giản nhất (không cần cấu hình, giảm giá 50%). Anthropic mang lại mức giảm giá sâu nhất (90%) với khả năng kiểm soát tốt nhất. Gemini cung cấp TTL có thể cấu hình và bộ nhớ đệm ngầm định trên các mô hình 2.5+ với mức giảm giá tương đương Anthropic.
Bộ nhớ đệm LLM Prompt hoạt động như thế nào?
Bạn không cần hiểu sâu về kiến trúc transformer để sử dụng hiệu quả bộ nhớ đệm prompt. Nhưng bạn cần hiểu một khái niệm: khớp tiền tố (prefix matching).
Bộ nhớ đệm KV trong 60 giây
Khi một LLM xử lý prompt của bạn, nó tính toán các trạng thái attention (các cặp khóa-giá trị) cho mỗi token. Các mục nhập bộ nhớ đệm KV này là phần tốn kém nhất, chúng ngốn bộ nhớ GPU và thời gian tính toán. Bộ nhớ đệm prompt lưu trữ các trạng thái đã tính toán này để yêu cầu tiếp theo có cùng tiền tố bỏ qua hoàn toàn việc tính toán lại.
Từ khóa quan trọng là tiền tố. Bộ nhớ đệm khớp từ đầu prompt của bạn trở đi. Nếu 2.000 token đầu tiên khớp với một mục nhập đã lưu trong bộ nhớ đệm nhưng token thứ 2.001 khác biệt, thì 2.000 token đầu tiên đó sẽ được phục vụ từ bộ nhớ đệm. Mọi thứ sau điểm phân kỳ sẽ được tính toán mới.
Đây là lý do tại sao thứ tự prompt rất quan trọng. Hãy cấu trúc prompt của bạn như sau:
- Định nghĩa công cụ (tĩnh nhất)
- System prompt
- Ví dụ few-shot tĩnh
- Ngữ cảnh truy xuất (bán động)
- Lịch sử hội thoại (tăng dần theo lượt)
- Truy vấn của người dùng (luôn khác nhau)
Nội dung tĩnh đặt trước, nội dung động đặt sau. Càng nhiều token khớp với tiền tố đã lưu trong bộ nhớ đệm, bạn càng tiết kiệm được nhiều.
Bộ nhớ đệm Prompt so với Bộ nhớ đệm Ngữ nghĩa so với Bộ nhớ đệm Phản hồi
Ba thuật ngữ này thường bị nhầm lẫn. Bộ nhớ đệm prompt (nội dung hướng dẫn này đề cập) tái sử dụng các trạng thái KV đã tính toán ở cấp độ GPU cho các tiền tố token giống hệt nhau, không mất độ chính xác, đầu ra giống hệt như khi không dùng bộ nhớ đệm. Bộ nhớ đệm ngữ nghĩa sử dụng độ tương đồng embedding để trả về các phản hồi đã tạo trước đó cho các truy vấn "đủ giống nhau", nhanh hơn nhưng có thể trả về câu trả lời sai. Bộ nhớ đệm phản hồi lưu trữ các cặp đầu vào-đầu ra chính xác và trả về nguyên văn phản hồi đã lưu, chỉ hoạt động với các yêu cầu hoàn toàn giống nhau.
Bộ nhớ đệm prompt là phương pháp "tối ưu hóa miễn phí" duy nhất, nó giảm chi phí và độ trễ mà không đánh đổi độ chính xác. Đối với toán học transformer chuyên sâu đằng sau bộ nhớ đệm KV, bài giải thích kỹ thuật của Hugging Face đã đo lường tốc độ tăng ~5.21 lần trên GPU T4.
OpenAI xử lý Bộ nhớ đệm Prompt như thế nào?
Bộ nhớ đệm prompt của OpenAI hoàn toàn tự động. Kể từ tháng 10 năm 2024, mọi lệnh gọi API với 1.024+ token đầu vào đều tự động hưởng lợi từ bộ nhớ đệm. Bạn không cần đăng ký tham gia, không cần thêm header, không cần thay đổi code.
Cách hoạt động của bộ nhớ đệm tự động OpenAI
Khi bạn gửi yêu cầu với ít nhất 1.024 token, OpenAI kiểm tra xem tiền tố có khớp với yêu cầu gần đây từ tổ chức của bạn hay không. Các lần truy cập bộ nhớ đệm (cache hits) có chi phí bằng 50% giá token đầu vào tiêu chuẩn. Sau ngưỡng 1.024 token ban đầu, bộ nhớ đệm khớp theo các khối 128 token.
Bộ nhớ đệm tồn tại trong 5-10 phút trong quá trình sử dụng bình thường và có thể kéo dài đến 24 giờ với chế độ lưu trữ mở rộng trong các giai đoạn thấp điểm. Phạm vi áp dụng theo tổ chức, vì vậy các dự án khác nhau trong cùng một tổ chức có thể hưởng lợi từ bộ nhớ đệm chung.
Các mô hình được hỗ trợ bao gồm GPT-4o, GPT-4o-mini, GPT-4.1, o1, o3-mini và tất cả các mô hình mới hơn.
Ví dụ Python SDK OpenAI
from openai import OpenAI
client = OpenAI()
# This system prompt is ~2,000 tokens -- well above the 1,024 minimum
SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""
def chat(user_message: str) -> str:
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_message},
],
)
# Check if caching kicked in
usage = response.usage
cached = usage.prompt_tokens_details.cached_tokens
total_input = usage.prompt_tokens
print(f"Cached: {cached}/{total_input} tokens ({cached/total_input*100:.0f}%)")
return response.choices[0].message.content
# First call: cache miss (full price)
chat("Review this async function for race conditions...")
# Second call within 5-10 min: cache hit (50% off on cached tokens)
chat("Now optimize the same function for throughput...")Lệnh gọi đầu tiên xử lý mọi thứ với giá đầy đủ và điền vào bộ nhớ đệm. Lệnh gọi thứ hai tái sử dụng các token system prompt đã lưu trong bộ nhớ đệm với nửa giá. Bạn sẽ thấy kết quả tương tự như Cached: 1920/2048 tokens (94%) trong đầu ra.
Kết luận: OpenAI là dễ bắt đầu nhất, không cần cấu hình, bộ nhớ đệm tự động diễn ra. Mức giảm giá 50% là thấp nhất trong ba nhà cung cấp, nhưng bạn không thể đánh bại sự đơn giản của nó.
Anthropic/Claude xử lý Bộ nhớ đệm Prompt như thế nào?
Anthropic cung cấp hai chế độ: bộ nhớ đệm tự động (được bật mặc định kể từ tháng 2 năm 2026) và bộ nhớ đệm tường minh với các điểm ngắt cache_control. Con số đáng chú ý khó có thể bỏ qua: các lần đọc từ bộ nhớ đệm chỉ tốn 10% giá đầu vào tiêu chuẩn, tức là giảm giá 90%.
Bộ nhớ đệm Tự động so với Tường minh (Cập nhật 2026)
Tính đến ngày 5 tháng 2 năm 2026, Anthropic bật bộ nhớ đệm tự động mặc định cho tất cả các prompt đủ điều kiện. Bạn không cần header beta cũ nữa. Hệ thống tự động xác định các điểm ngắt bộ nhớ đệm tối ưu.
Bộ nhớ đệm tường minh vẫn khả dụng khi bạn muốn kiểm soát chi tiết. Bạn đặt cache_control: {"type": "ephemeral"} trên các khối nội dung cụ thể để đánh dấu chính xác nơi ranh giới bộ nhớ đệm nên nằm. Điều này hữu ích khi prompt của bạn có cấu trúc cụ thể và bạn muốn đảm bảo certain sections được lưu vào bộ nhớ đệm.
Có hai tùy chọn TTL:
- Bộ nhớ đệm 5 phút (mặc định): chi phí ghi 1.25x giá đầu vào cơ sở, chi phí đọc 0.1x. Tự hoàn vốn sau 1 lần truy cập bộ nhớ đệm.
- Bộ nhớ đệm 1 giờ: chi phí ghi 2x giá đầu vào cơ sở, chi phí đọc 0.1x. Tự hoàn vốn sau 2 lần truy cập bộ nhớ đệm. Có sẵn trên các mô hình Claude 4.5+.
Phạm vi cô lập bộ nhớ đệm đã thay đổi từ cấp độ tổ chức sang cấp độ không gian làm việc (workspace) vào ngày 5 tháng 2 năm 2026. Điều này có nghĩa là các không gian làm việc khác nhau trong cùng một tổ chức duy trì các bộ nhớ đệm riêng biệt.
Khi làm việc với bộ nhớ đệm của Anthropic, sẽ rất hữu ích nếu bạn cấu trúc prompt để tối ưu hóa bộ nhớ đệm, việc đặt nội dung tĩnh trước nội dung động thậm chí còn quan trọng hơn ở đây vì bạn phải trả phí ghi cao hơn.
Ví dụ Python SDK Anthropic
import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""
def chat(user_message: str) -> str:
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[
{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"}, # Explicit breakpoint
}
],
messages=[
{"role": "user", "content": user_message},
],
)
# Read cache metrics from the response
usage = response.usage
created = usage.cache_creation_input_tokens
read = usage.cache_read_input_tokens
standard = usage.input_tokens
print(f"Cache write: {created}, Cache read: {read}, Standard: {standard}")
return response.content[0].text
# First call: cache_creation_input_tokens = ~1920 (write at 1.25x)
chat("Review this async function for race conditions...")
# Second call: cache_read_input_tokens = ~1920 (read at 0.1x -- 90% off!)
chat("Now optimize the same function for throughput...")Hiểu về Giá cả Ghi bộ nhớ đệm so với Đọc bộ nhớ đệm
Đây là nơi giá cả của Anthropic trở nên thú vị. Lấy Claude Sonnet 4.5 ($3/MTok đầu vào cơ sở) làm ví dụ:
- Đầu vào tiêu chuẩn: $3.00 mỗi triệu token
- Ghi bộ nhớ đệm (5 phút): $3.75 mỗi triệu token (1.25x), bạn trả nhiều hơn ở lần đầu tiên
- Đọc bộ nhớ đệm: $0.30 mỗi triệu token (0.1x) -- rẻ hơn 90% ở mỗi lần truy cập tiếp theo
Bộ nhớ đệm 5 phút tự hoàn vốn chỉ sau 1 lần đọc. Bộ nhớ đệm 1 giờ ($6.00/MTok ghi) tự hoàn vốn sau 2 lần đọc. Nếu bạn thực hiện nhiều hơn một vài yêu cầu mỗi phút với cùng tiền tố, bài toán kinh tế hoàn toàn có lợi cho bạn.
Kết luận: Anthropic mang lại mức giảm giá sâu nhất (90%) và khả năng kiểm soát tốt nhất. Tốt nhất cho các khối lượng công việc lớn, nhạy cảm về chi phí.
Google Gemini xử lý Bộ nhớ đệm Prompt như thế nào?
Gemini tiếp cận khác biệt với hai cơ chế bộ nhớ đệm riêng biệt: bộ nhớ đệm ngữ cảnh tường minh (các đối tượng bộ nhớ đệm có tên mà bạn tạo và tham chiếu) và bộ nhớ đệm ngầm định (tự động, không cần cấu hình, được thêm vào năm 2026 cho các mô hình Gemini 2.5+).
Bộ nhớ đệm Ngữ cảnh Tường minh (Bộ nhớ đệm có tên)
Không giống như OpenAI và Anthropic nơi bộ nhớ đệm trong suốt, bộ nhớ đệm tường minh của Gemini yêu cầu bạn tạo một đối tượng bộ nhớ đệm có tên trước, sau đó tham chiếu nó trong các yêu cầu tiếp theo. Ngưỡng token tối thiểu là 1.024 token cho các mô hình Gemini Flash và 4.096 token cho các mô hình Pro. TTL có thể cấu hình, mặc định là 1 giờ, nhưng bạn có thể đặt nó theo nhu cầu.
Các token được lưu trong bộ nhớ đệm trên Gemini 2.5 Pro có giá $0.125/MTok so với giá đầu vào tiêu chuẩn $1.25/MTok, tức là giảm giá 90%. Ngoài ra còn có chi phí lưu trữ là $4.50 mỗi triệu token mỗi giờ cho Pro, và $1.00 cho Flash.
Bộ nhớ đệm Ngầm định trong Gemini 2.5 (2026)
Bắt đầu với Gemini 2.5 Pro và Flash, Google đã thêm bộ nhớ đệm ngầm định, bộ nhớ đệm tự động hoạt động giống như cách tiếp cận của OpenAI. Không cần cấu hình. Đặt nội dung lớn, phổ biến ở đầu prompt của bạn và gửi các yêu cầu có tiền tố tương tự liên tiếp nhanh chóng. Hệ thống tự động phát hiện nội dung đủ điều kiện lưu bộ nhớ đệm và chuyển tiếp khoản tiết kiệm.
Ví dụ Python SDK Gemini
from google import genai
from google.genai import types
client = genai.Client()
SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""
# Step 1: Create a named cache object
cache = client.caches.create(
model="gemini-2.5-flash",
config=types.CreateCachedContentConfig(
display_name="python-review-guidelines",
system_instruction=SYSTEM_PROMPT,
ttl="3600s", # 1 hour
),
)
print(f"Cache created: {cache.name}, expires: {cache.expire_time}")
# Step 2: Use the cache in requests
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="Review this async function for race conditions...",
config=types.GenerateContentConfig(
cached_content=cache.name,
),
)
# Check cache usage in the response
metadata = response.usage_metadata
print(f"Cached tokens: {metadata.cached_content_token_count}")
print(f"Total input tokens: {metadata.prompt_token_count}")Cách tiếp cận tường minh có một lợi thế lớn: bạn kiểm soát chính xác TTL. Nếu bạn biết job batch của mình chạy trong 4 giờ, hãy đặt TTL 4 giờ và tránh việc hết hạn bộ nhớ đệm giữa chừng quá trình xử lý.
Kết luận: TTL có thể cấu hình và hai chế độ bộ nhớ đệm kép (tường minh + ngầm định) của Gemini khiến nó trở nên linh hoạt. Ngưỡng tối thiểu giờ đây có thể so sánh với các nhà cung cấp khác, và mức giảm giá 90% cho các lần đọc bộ nhớ đệm ngang bằng với Anthropic.
So sánh mã nguồn song song, Cùng trường hợp sử dụng, Cả 3 nhà cung cấp
Dưới đây là cùng một chatbot với system prompt được lưu trong bộ nhớ đệm, được triển khai trên cả ba SDK. Hãy so sánh trải nghiệm nhà phát triển trực tiếp.
# --- OpenAI: Zero config, just call the API ---
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT}, # Cached automatically
{"role": "user", "content": user_message},
],
)
cached = response.usage.prompt_tokens_details.cached_tokens# --- Anthropic: Explicit cache_control breakpoint ---
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"}, # Mark cache boundary
}],
messages=[{"role": "user", "content": user_message}],
)
cached = response.usage.cache_read_input_tokens# --- Gemini: Named cache object ---
from google import genai
from google.genai import types
client = genai.Client()
cache = client.caches.create(
model="gemini-2.5-flash",
config=types.CreateCachedContentConfig(
system_instruction=SYSTEM_PROMPT,
ttl="3600s",
),
)
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=user_message,
config=types.GenerateContentConfig(cached_content=cache.name),
)
cached = response.usage_metadata.cached_content_token_count| Khía cạnh | OpenAI | Anthropic | Gemini |
|---|---|---|---|
| Độ phức tạp thiết lập | Không có | Thêm khối cache_control | Tạo đối tượng bộ nhớ đệm trước |
| Kiểm soát bộ nhớ đệm | Chỉ tự động | Tự động hoặc tường minh | Ngầm định hoặc tường minh |
| Giảm giá đọc bộ nhớ đệm | 50% | 90% | ~90% |
| Token tối thiểu | 1.024 | 1.024 | 1.024 (Flash) / 4.096 (Pro) |
| Đánh giá DX | Đơn giản nhất | Kiểm soát tốt nhất | TTL linh hoạt nhất |
Nếu bạn muốn tiết kiệm không cần nỗ lực, hãy chọn OpenAI. Nếu bạn muốn mức giảm giá sâu nhất và kiểm soát chi tiết, hãy chọn Anthropic. Nếu bạn cần thời gian sống bộ nhớ đệm có thể cấu hình hoặc đang sử dụng Google Cloud, hãy chọn Gemini.
Máy tính chi phí sản xuất, Tiết kiệm thực tế ở quy mô lớn
Các con số phần trăm trừu tượng không thúc đẩy quyết định. Số tiền đô la thì có. Dưới đây là ba kịch bản sản xuất với ước tính chi phí thực tế sử dụng Claude Sonnet 4.5 ($3/MTok đầu vào), GPT-4o ($2.50/MTok đầu vào) và Gemini 2.5 Pro ($1.25/MTok đầu vào).
Giá đã xác minh tháng 3 năm 2026. Vui lòng kiểm tra giá Anthropic, giá OpenAI và giá Gemini để biết mức giá hiện tại.
Giả định: Tỷ lệ truy cập bộ nhớ đệm 80% (thực tế cho các prompt được cấu trúc tốt), loại trừ token đầu ra vì bộ nhớ đệm chỉ ảnh hưởng đến chi phí đầu vào.
| Kịch bản | Không có bộ nhớ đệm (Hàng tháng) | Với bộ nhớ đệm OpenAI | Với bộ nhớ đệm Anthropic | Với bộ nhớ đệm Gemini |
|---|---|---|---|---|
| Chatbot Hobby: 100 req/ngày, 2K system prompt | OpenAI: $15 / Anthropic: $18 / Gemini: $7.50 | $12 (tiết kiệm $3) | $5.40 (tiết kiệm $12.60) | $2.25 (tiết kiệm $5.25) |
| API Tăng trưởng: 10K req/ngày, 8K tiền tố lưu đệm | OpenAI: $600 / Anthropic: $720 / Gemini: $300 | $360 (tiết kiệm $240) | $144 (tiết kiệm $576) | $60 (tiết kiệm $240) |
| Pipeline Doanh nghiệp: 100K req/ngày, 10K tiền tố lưu đệm | OpenAI: $7,500 / Anthropic: $9,000 / Gemini: $3,750 | $4,500 (tiết kiệm $3,000) | $1,800 (tiết kiệm $7,200) | $750 (tiết kiệm $3,000) |
Ở cấp độ Tăng trưởng, bộ nhớ đệm Anthropic tiết kiệm $576/tháng mặc dù có giá cơ sở cao hơn OpenAI. Ở quy mô Doanh nghiệp, bạn đang nhìn thấy khoản tiết kiệm $7,200/tháng với Anthropic, hoặc $86,400 mỗi năm. Đó là mức tiết kiệm tương đương lương của một kỹ sư senior chỉ từ một thay đổi cấu hình.
Mô hình rõ ràng: khối lượng yêu cầu càng cao và tiền tố tĩnh càng dài, bộ nhớ đệm càng tiết kiệm nhiều. Mức giảm giá 90% của Anthropic chiếm ưu thế ở quy mô lớn, nhưng giá cơ sở thấp hơn của Gemini khiến nó trở nên cạnh tranh khi tính đến tổng chi phí.
Các phản mẫu Bộ nhớ đệm Prompt, Khi nào KHÔNG nên lưu đệm
Bộ nhớ đệm có vẻ đơn giản cho đến khi tỷ lệ truy cập bộ nhớ đệm của bạn bí ẩn nằm ở mức 0%. Dưới đây là những sai lầm âm thầm phá vỡ bộ nhớ đệm prompt và cách khắc phục.
Những sai lầm phá vỡ bộ nhớ đệm (Với cách sửa)
Dấu thời gian trong system prompt, Sai lầm phổ biến nhất. Nếu system prompt của bạn bao gồm datetime.now(), khóa bộ nhớ đệm thay đổi mỗi giây.
# BAD: Cache misses every single request
system_prompt = f"""You are a helpful assistant.
Current time: {datetime.now().isoformat()}
Always be helpful and accurate."""
# GOOD: Move the timestamp to the user message
system_prompt = """You are a helpful assistant.
Always be helpful and accurate."""
user_message = f"[Current time: {datetime.now().isoformat()}]\n{user_query}"Nội dung dành riêng cho người dùng trước nội dung tĩnh, Nếu bạn đặt session_id hoặc tùy chọn người dùng ở đầu, mỗi người dùng sẽ có một tiền tố duy nhất.
# BAD: Unique prefix per user = zero cache reuse
messages = [
{"role": "system", "content": f"User ID: {user_id}\nPreferences: {prefs}\n{GUIDELINES}"},
{"role": "user", "content": query},
]
# GOOD: Static content first, user context at the end
messages = [
{"role": "system", "content": GUIDELINES}, # Same for all users -> cached
{"role": "user", "content": f"Context: User {user_id}, prefs: {prefs}\n{query}"},
]| Phản mẫu | Tại sao nó phá vỡ bộ nhớ đệm | Cách sửa |
|---|---|---|
| Dấu thời gian trong system prompt | Tiền tố thay đổi mỗi giây | Di chuyển dấu thời gian vào tin nhắn người dùng |
| Session/user IDs trong tiền tố | Tiền tố duy nhất cho mỗi người dùng | Di chuyển ngữ cảnh người dùng sau nội dung tĩnh |
| Xoay vòng ví dụ few-shot | Ví dụ khác nhau = tiền tố khác nhau | Sử dụng bộ ví dụ cố định |
| Định nghĩa công cụ động | Thay đổi công cụ = không khớp tiền tố | Giữ schema công cụ tĩnh |
| Prompt ngắn (dưới mức tối thiểu) | Bộ nhớ đệm đơn giản là không kích hoạt | Hợp nhất ngữ cảnh để vượt quá 1.024 token |
| Cá nhân hóa từng yêu cầu trong system prompt | System prompt thay đổi mỗi lần gọi | Sử dụng system prompt chung + tin nhắn người dùng dành riêng cho người dùng |
Khi nào Bộ nhớ đệm Prompt thực sự không giúp ích
Một số kịch bản sẽ không hưởng lợi từ bộ nhớ đệm ngay cả khi bạn cấu trúc prompt hoàn hảo:
- Prompt sử dụng một lần: Nếu mỗi yêu cầu có ngữ cảnh hoàn toàn duy nhất và không có tiền tố chung, không có gì để lưu vào bộ nhớ đệm.
- Prompt rất ngắn: Dưới 1.024 token (OpenAI/Anthropic) hoặc 4.096 token (Gemini Pro), bộ nhớ đệm không kích hoạt.
- Yêu cầu không thường xuyên: Nếu các yêu cầu cách nhau hàng giờ, bộ nhớ đệm hết hạn trước khi yêu cầu thứ hai đến. Cửa sổ 5-10 phút của OpenAI và TTL mặc định 5 phút của Anthropic có nghĩa là bạn cần lưu lượng truy cập ổn định.
Bộ nhớ đệm Prompt có hoạt động với Streaming không?
Có. Bộ nhớ đệm prompt và streaming là độc lập, bộ nhớ đệm hoạt động trên token đầu vào, streaming ảnh hưởng đến việc phân phối đầu ra. Chúng giải quyết các vấn đề khác nhau ở các giai đoạn khác nhau của vòng đời yêu cầu.
Bộ nhớ đệm xử lý giai đoạn prefill (xử lý prompt đầu vào của bạn). Streaming xử lý giai đoạn decode (tạo và gửi token đầu ra từng phần). Bạn nhận được cả hai lợi ích cùng lúc: prefill nhanh hơn từ truy cập bộ nhớ đệm, cộng với phân phối đầu ra tiến triển từ streaming.
Dưới đây là ví dụ streaming với bộ nhớ đệm được bật:
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"},
}],
messages=[{"role": "user", "content": "Explain Python's GIL..."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
# After streaming completes, check cache metrics
usage = stream.get_final_message().usage
print(f"\nCache read: {usage.cache_read_input_tokens} tokens")Cải thiện TTFT từ bộ nhớ đệm thực sự dễ nhận thấy nhất với streaming. Không có bộ nhớ đệm, bạn chờ đợi full prefill trước khi token đầu tiên được stream về. Với bộ nhớ đệm, prefill gần như tức thì, vì vậy các token bắt đầu chảy gần như ngay lập tức.
Cách giám sát Tỷ lệ truy cập Bộ nhớ đệm trong Sản xuất
Thiết lập bộ nhớ đệm chỉ là một nửa trận chiến. Biết liệu nó có thực sự hoạt động hay không là nửa còn lại. Nếu tỷ lệ truy cập bộ nhớ đệm của bạn giảm xuống dưới 50%, điều gì đó đã thay đổi trong cấu trúc prompt của bạn và bạn đang để lỡ cơ hội tiết kiệm tiền.
Số liệu Bộ nhớ đệm Cụ thể theo Nhà cung cấp
| Nhà cung cấp | Trường Đọc Bộ nhớ đệm | Trường Ghi Bộ nhớ đệm | Trường Đầu vào Tổng |
|---|---|---|---|
| OpenAI | usage.prompt_tokens_details.cached_tokens | N/A (tự động) | usage.prompt_tokens |
| Anthropic | usage.cache_read_input_tokens | usage.cache_creation_input_tokens | usage.input_tokens |
| Gemini | usageMetadata.cachedContentTokenCount | N/A (đối tượng bộ nhớ đệm tường minh) | usageMetadata.promptTokenCount |
Trình ghi Nhật ký Tỷ lệ truy cập Bộ nhớ đệm Đơn giản
Dưới đây là một hàm tiện ích bạn có thể thả vào bất kỳ dự án nào để theo dõi tỷ lệ truy cập bộ nhớ đệm qua các trường phản hồi API:
import logging
logger = logging.getLogger("cache_monitor")
def log_cache_metrics(provider: str, usage: dict) -> float:
"""Extract and log cache metrics from any provider's response. Returns hit rate."""
if provider == "openai":
cached = getattr(usage.prompt_tokens_details, "cached_tokens", 0)
total = usage.prompt_tokens
elif provider == "anthropic":
cached = usage.cache_read_input_tokens
created = usage.cache_creation_input_tokens
total = cached + created + usage.input_tokens
elif provider == "gemini":
cached = getattr(usage, "cached_content_token_count", 0)
total = usage.prompt_token_count
else:
raise ValueError(f"Unknown provider: {provider}")
hit_rate = (cached / total * 100) if total > 0 else 0
logger.info(f"[{provider}] Cache hit rate: {hit_rate:.1f}% ({cached}/{total} tokens)")
if hit_rate < 50:
logger.warning(f"[{provider}] Low cache hit rate! Check prompt structure.")
return hit_rateMột hệ thống sản xuất khỏe mạnh nên duy trì tỷ lệ truy cập bộ nhớ đệm 70-90%. Nếu bạn dưới 50%, hãy xem lại phần phản mẫu. Bạn cũng có thể tích hợp điều này với các chỉ số đánh giá tự động để phát hiện sự suy giảm trong pipeline prompt của mình.
Bộ nhớ đệm Prompt trong Các trường hợp sử dụng Thực tế
Các ví dụ chatbot ở trên minh họa cơ chế, nhưng bộ nhớ đệm prompt thực sự tỏa sáng trong các mẫu kiến trúc cụ thể.
Pipeline RAG
Trong thiết lập RAG, system prompt và các ví dụ few-shot của bạn là tĩnh trên tất cả các truy vấn. Các tài liệu truy xuất thay đổi mỗi lần. Cấu trúc prompt của bạn để tối đa hóa tiền tố được lưu trong bộ nhớ đệm:
- System prompt (lưu đệm)
- Ví dụ few-shot (lưu đệm)
- Tài liệu truy xuất (động, đặt cuối)
- Truy vấn người dùng (luôn duy nhất)
Với system prompt 5.000 token và 3.000 token ví dụ few-shot, đó là 8.000 token được lưu trong bộ nhớ đệm cho mỗi yêu cầu. Với 1.000 yêu cầu/ngày trên Anthropic, bạn sẽ tiết kiệm khoảng $6.50/ngày chỉ riêng từ tiền tố được lưu trong bộ nhớ đệm. Khi bạn truy xuất và lưu các khối ngữ cảnh vào bộ nhớ đệm, hãy đảm bảo đầu ra truy xuất nằm sau tiền tố tĩnh.
Chatbot Đa lượt (Multi-Turn)
Cuộc hội thoại đa lượt là điểm ngọt ngào cho bộ nhớ đệm prompt. Mỗi lượt thêm vào lịch sử hội thoại, nhưng toàn bộ cuộc hội thoại trước đó đã được lưu trong bộ nhớ đệm từ các lượt trước. Lợi ích bộ nhớ đệm tích lũy, đến lượt thứ 10, bạn có thể có 15.000 token lịch sử được lưu trong bộ nhớ đệm với chỉ 200 token mới từ tin nhắn người dùng mới nhất.
Hệ thống Agent và Định nghĩa Công cụ MCP
Nếu bạn đang xây dựng agent với việc sử dụng công cụ, các định nghĩa công cụ của bạn là các schema JSON tĩnh được lặp lại trong mỗi lệnh gọi API. Một agent điển hình có thể có 20+ công cụ tổng cộng 3.000-5.000 token định nghĩa. Đó là nguyên liệu lý tưởng cho bộ nhớ đệm.
Điều này đặc biệt phù hợp với các kiến trúc dựa trên MCP nơi định nghĩa công cụ máy chủ được gửi trong mỗi lần gọi. Với cache_control tường minh của Anthropic, bạn có thể đánh dấu mảng tools để lưu vào bộ nhớ đệm và đảm bảo các token đó được tái sử dụng.
Bạn nên chọn Nhà cung cấp nào?
| Nếu bạn cần... | Lựa chọn tốt nhất | Tại sao |
|---|---|---|
| Không cấu hình, chỉ muốn tiết kiệm | OpenAI | Bộ nhớ đệm tự động, không cần thay đổi code |
| Giảm chi phí tối đa (90%) | Anthropic | Giá đọc bộ nhớ đệm 0.1x, giảm giá sâu nhất |
| Kiểm soát bộ nhớ đệm chi tiết | Anthropic | Điểm ngắt tường minh + TTL có thể cấu hình (5 phút hoặc 1 giờ) |
| Phân tích tài liệu dài | Gemini | TTL có thể cấu hình với bộ nhớ đệm có tên tường minh |
| Đơn giản hóa chat đa lượt | OpenAI | Khớp tiền tố tự động trên lịch sử hội thoại đang phát triển |
| Hệ thống Agent với định nghĩa công cụ | Anthropic | Lưu định nghĩa công cụ vào bộ nhớ đệm một cách tường minh với cache_control |
| Linh hoạt đa nhà cung cấp | LiteLLM | Cú pháp bộ nhớ đệm thống nhất trên tất cả các nhà cung cấp |
Nếu bạn đã sử dụng một nhà cung cấp, hãy bắt đầu từ đó, bộ nhớ đệm prompt không yêu cầu chuyển đổi. LiteLLM hoạt động như một lớp proxy chuẩn hóa các tham số bộ nhớ đệm trên các nhà cung cấp, rất hữu ích nếu bạn đang định tuyến yêu cầu đến nhiều mô hình.
FAQ, Bộ nhớ đệm LLM Prompt
Bộ nhớ đệm prompt trong LLM là gì?
Bộ nhớ đệm prompt lưu trữ các trạng thái attention đã tính toán (bộ nhớ đệm KV) từ các tiền tố prompt đã xử lý trước đó. Khi một yêu cầu tiếp theo bắt đầu bằng cùng chuỗi token, nhà cung cấp tái sử dụng các trạng thái đã lưu trữ đó thay vì tính toán lại, giảm cả chi phí và độ trễ mà không ảnh hưởng đến chất lượng đầu ra.
Bộ nhớ đệm prompt tiết kiệm bao nhiêu chi phí API?
Khoản tiết kiệm dao động từ 50% đến 90% tùy thuộc vào nhà cung cấp. OpenAI cung cấp giảm giá 50% cho các token đầu vào được lưu trong bộ nhớ đệm. Anthropic cung cấp giảm giá lên đến 90% (đọc bộ nhớ đệm ở giá 0.1x cơ sở). Gemini cung cấp giảm giá khoảng 90% cho các lần đọc bộ nhớ đệm. Khoản tiết kiệm thực tế phụ thuộc vào tỷ lệ truy cập bộ nhớ đệm, độ dài prompt và tần suất yêu cầu của bạn.
Bộ nhớ đệm prompt của OpenAI có diễn ra tự động không?
Có, kể từ tháng 10 năm 2024. Bất kỳ lệnh gọi API nào với 1.024+ token đầu vào đều tự động hưởng lợi từ bộ nhớ đệm. Không cần đăng ký, không cần header, không cần thay đổi code. Bộ nhớ đệm khớp các tiền tố token từ đầu prompt.
Sự khác biệt giữa bộ nhớ đệm prompt và bộ nhớ đệm ngữ nghĩa là gì?
Bộ nhớ đệm prompt khớp các tiền tố token chính xác ở cấp độ GPU, không có mất mát độ chính xác và đầu ra giống hệt với các yêu cầu không dùng bộ nhớ đệm. Bộ nhớ đệm ngữ nghĩa sử dụng độ tương đồng embedding để tìm các truy vấn trước đó "đủ gần" và trả về các phản hồi đã lưu, nó nhanh hơn nhưng có thể trả về câu trả lời sai hoặc lỗi thời. Chúng giải quyết các vấn đề hoàn toàn khác nhau.
Bộ nhớ đệm prompt tồn tại trong bao lâu?
Nó khác nhau tùy theo nhà cung cấp. OpenAI: 5-10 phút (lên đến 24 giờ với lưu trữ mở rộng). Anthropic: 5 phút (mặc định) hoặc 1 giờ (có sẵn trên các mô hình Claude 4.5+, chi phí ghi gấp 2 lần). Gemini: có thể cấu hình, mặc định là 1 giờ cho các bộ nhớ đệm tường minh. TTL bộ nhớ đệm ngầm định được Google quản lý tự động.
Độ dài token tối thiểu cho bộ nhớ đệm prompt là bao nhiêu?
OpenAI: 1.024 token. Anthropic: 1.024 token cho hầu hết các mô hình hiện tại. Gemini: 1.024 token cho các mô hình Flash, 4.096 cho các mô hình Pro. Các prompt dưới các ngưỡng này sẽ không kích hoạt bộ nhớ đệm, đây là lỗi "nó không hoạt động" phổ biến nhất.
Bộ nhớ đệm prompt có hoạt động với phản hồi streaming không?
Có. Bộ nhớ đệm và streaming hoạt động trên các giai đoạn khác nhau của yêu cầu. Bộ nhớ đệm tăng tốc giai đoạn prefill đầu vào; streaming phân phối các token đầu ra từng phần. Cả hai hoạt động đồng thời và bạn thực sự sẽ nhận thấy cải thiện TTFT rõ hơn khi bật streaming.
Khi nào tôi KHÔNG nên sử dụng bộ nhớ đệm prompt?
Tránh dựa vào bộ nhớ đệm khi prompt của bạn dưới ngưỡng token tối thiểu, khi bạn bao gồm dấu thời gian hoặc session IDs trong system prompt, khi bạn xoay vòng các ví dụ few-shot giữa các lần gọi, hoặc khi các yêu cầu quá thưa thớt để truy cập bộ nhớ đệm trước khi nó hết hạn (cửa sổ 5-10 phút cho OpenAI/Anthropic).
Tôi có thể sử dụng bộ nhớ đệm prompt với LangChain hoặc LiteLLM không?
Có. LangChain chuyển các tham số bộ nhớ đệm cụ thể của nhà cung cấp thông qua các wrapper API của nó. LiteLLM cung cấp cú pháp bộ nhớ đệm thống nhất chuẩn hóa cache_control trên Anthropic, OpenAI, Gemini, Vertex AI và Bedrock, đặc biệt hữu ích cho các thiết lập đa nhà cung cấp.
Cache hit và cache miss là gì?
Một cache hit có nghĩa là nhà cung cấp đã tìm thấy một tiền tố khớp trong bộ nhớ và tái sử dụng các trạng thái KV đã lưu, bạn trả mức giá token đã lưu trong bộ nhớ đệm giảm giá và nhận được TTFT nhanh hơn. Một cache miss có nghĩa là không tìm thấy kết quả khớp, vì vậy toàn bộ prompt được xử lý từ đầu với giá tiêu chuẩn. Kiểm tra các trường cached_tokens (OpenAI), cache_read_input_tokens (Anthropic) hoặc cachedContentTokenCount (Gemini) trong phản hồi API để xem điều nào đã xảy ra.
Kết luận cuối cùng
| Danh mục | Người chiến thắng | Lý do chính |
|---|---|---|
| Thiết lập dễ nhất | OpenAI | Tự động, không cần cấu hình |
| Giảm giá sâu nhất | Anthropic | Giảm 90% cho các lần đọc bộ nhớ đệm (0.1x cơ sở) |
| Kiểm soát nhiều nhất | Anthropic | Điểm ngắt tường minh + TTL 5 phút hoặc 1 giờ |
| Tốt nhất cho tài liệu dài | Gemini | TTL có thể cấu hình với các đối tượng bộ nhớ đệm có tên |
| Tốt nhất cho Chat đa lượt | OpenAI | Khớp tiền tố tự động trên lịch sử hội thoại |
| Tốt nhất cho Agentic/MCP | Anthropic | Lưu định nghĩa công cụ vào bộ nhớ đệm một cách tường minh |
Bộ nhớ đệm prompt là tối ưu hóa nỗ lực thấp nhất, lợi nhuận cao nhất trong ngăn xếp API LLM. Bạn không thay đổi mô hình, không hy sinh chất lượng và việc triển khai dao động từ "không làm gì cả" (OpenAI) đến "thêm một trường" (Anthropic) đến "tạo một đối tượng bộ nhớ đệm" (Gemini).
Hãy bắt đầu với bộ nhớ đệm tự động của nhà cung cấp hiện tại của bạn. Đo lường tỷ lệ truy cập bộ nhớ đệm của bạn với tiện ích ghi nhật ký ở trên. Nếu bạn dưới 70%, hãy cấu trúc lại prompt của bạn (tĩnh trước, động sau) và loại bỏ các phản mẫu. Hầu hết các nhóm thấy giảm chi phí 50-80% trong vòng một ngày sau khi triển khai các thay đổi này.