
Caching Prompt LLM: Pangkas Biaya API hingga 90% (Semua 3 Penyedia)
Caching prompt LLM memungkinkan Anda menggunakan kembali token yang telah diproses sebelumnya di berbagai panggilan API, memotong biaya input hingga 90% dan mengurangi waktu-ke-token-pertama (time-to-first-token) hingga 85%. Jika Anda mengirimkan prompt sistem, definisi alat, atau contoh few-shot yang sama pada setiap permintaan, Anda membayar harga penuh untuk pekerjaan yang sudah dilakukan oleh GPU.
Panduan ini membahas OpenAI, Anthropic, dan Gemini dengan chatbot yang sama diimplementasikan di ketiga SDK tersebut, sesuatu yang tidak dilakukan oleh panduan lain. Kami juga akan membahas pembaruan caching otomatis Anthropic pada Februari 2026, skenario biaya produksi dengan jumlah dolar nyata, serta anti-pola yang secara diam-diam menghancurkan tingkat hit cache Anda.
<!-- IMAGE: Diagram alur penggunaan ulang cache KV yang menunjukkan pencocokan awalan prompt, jalur hit cache (cepat, murah), dan jalur miss cache (pemrosesan standar) -->Ringkasan Cepat, Ketiga Penyedia Sekilas
Sebelum menyelami detail implementasi, berikut adalah perbandingan lengkapnya. Jika Anda sudah tahu penyedia mana yang Anda gunakan, lompat ke bagian mereka. Jika Anda sedang mengevaluasi, tabel ini memberi tahu Anda semuanya dalam 10 detik.
| Fitur | OpenAI | Anthropic | Gemini |
|---|---|---|---|
| Jenis Caching | Otomatis | Otomatis + Eksplisit | Implisit + Eksplisit |
| Token Minimum | 1.024 | 1.024 (sebagian besar model) | 1.024 (Flash) / 4.096 (Pro) |
| TTL (Waktu Hidup) | 5-10 menit (hingga 24 jam diperpanjang) | 5 menit atau 1 jam | Dapat dikonfigurasi (default 1 jam) |
| Biaya Tulis Cache | 1x (tanpa biaya tambahan) | 1,25x (5-menit) / 2x (1-jam) | 1x (tanpa biaya tambahan) |
| Diskon Baca Cached | 50% dari input | 90% dari input | ~90% dari input |
| Isolasi Cache | Organisasi | Workspace | Proyek |
| Dukungan Streaming | Ya | Ya | Ya |
| Field Respons Hit Cache | cached_tokens | cache_read_input_tokens | cachedContentTokenCount |
| Kontrol Eksplisit | Tidak | Ya (cache_control) | Ya (objek cache bernama) |
| Pembaruan Besar Terbaru | Okt 2024 | Feb 2026 (caching otomatis) | 2026 (caching implisit) |
Poin utama: OpenAI adalah yang paling sederhana (nol konfigurasi, diskon 50%). Anthropic memberikan diskon terdalam (90%) dengan kontrol paling banyak. Gemini menawarkan TTL yang dapat dikonfigurasi dan caching implisit pada model 2.5+ dengan diskon sebanding dengan Anthropic.
Bagaimana Cara Kerja Caching Prompt LLM?
Anda tidak perlu memahami internal transformer untuk menggunakan caching prompt secara efektif. Namun, Anda perlu memahami satu konsep: pencocokan awalan (prefix matching).
Cache KV dalam 60 Detik
Ketika LLM memproses prompt Anda, ia menghitung status perhatian (pasangan kunci-nilai) untuk setiap token. Entri cache KV ini adalah bagian yang mahal; inilah yang memakan memori GPU dan waktu komputasi. Caching prompt menyimpan status yang telah dihitung ini sehingga permintaan berikutnya dengan awalan yang sama sepenuhnya melewatkan penghitungan ulang.
Kata kuncinya adalah awalan. Cache mencocokkan dari awal prompt Anda ke depan. Jika 2.000 token pertama cocok dengan entri yang di-cache tetapi token ke-2.001 berbeda, 2.000 token pertama tersebut dilayani dari cache. Segala sesuatu setelah titik divergensi dihitung ulang dari awal.
Inilah mengapa urutan prompt sangat penting. Strukturkan prompt Anda seperti ini:
- Definisi alat (paling statis)
- Prompt sistem
- Contoh few-shot statis
- Konteks yang diambil (semi-dinamis)
- Riwayat percakapan (bertambah per giliran)
- Kueri pengguna (selalu berbeda)
Konten statis di awal, konten dinamis di akhir. Semakin banyak token yang cocok dengan awalan yang di-cache, semakin besar penghematan Anda.
Caching Prompt vs Caching Semantik vs Caching Respons
Tiga istilah ini sering tertukar. Caching prompt (yang dibahas dalam panduan ini) menggunakan kembali status KV yang dihitung di level GPU untuk awalan token yang identik, tanpa kehilangan akurasi, output sama dengan yang tidak di-cache. Caching semantik menggunakan kesamaan embedding untuk mengembalikan respons yang dihasilkan sebelumnya untuk kueri yang "cukup mirip", lebih cepat tetapi dapat mengembalikan jawaban yang salah. Caching respons menyimpan pasangan input-output yang tepat dan mengembalikan respons yang di-cache secara verbatim, hanya bekerja untuk permintaan yang benar-benar identik.
Caching prompt adalah satu-satunya "optimisasi gratis"; ini mengurangi biaya dan latensi tanpa trade-off akurasi apa pun. Untuk matematika transformer mendalam di balik caching KV, penjelas teknis Hugging Face mengukur peningkatan kecepatan ~5,21x pada GPU T4.
Bagaimana OpenAI Menangani Caching Prompt?
Caching prompt OpenAI sepenuhnya otomatis. Sejak Oktober 2024, setiap panggilan API dengan 1.024+ token input secara otomatis mendapatkan manfaat dari caching. Anda tidak perlu opting-in, tidak perlu menambahkan header, dan tidak perlu mengubah kode Anda.
Cara Kerja Caching Otomatis OpenAI
Saat Anda mengirim permintaan dengan setidaknya 1.024 token, OpenAI memeriksa apakah awalan tersebut cocok dengan permintaan terbaru dari organisasi Anda. Hit cache berharga 50% dari harga token input standar. Setelah ambang batas 1.024 token awal, cache mencocokkan dalam kelipatan 128 token.
Cache bertahan selama 5-10 menit selama penggunaan normal dan dapat bertahan hingga 24 jam dengan retensi diperpanjang selama periode sepi. Cakupan cache per organisasi, sehingga proyek berbeda dalam org yang sama mendapat manfaat dari cache bersama.
Model yang didukung meliputi GPT-4o, GPT-4o-mini, GPT-4.1, o1, o3-mini, dan semua model yang lebih baru.
Contoh SDK Python 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...")Panggilan pertama memproses semuanya dengan harga penuh dan mengisi cache. Panggilan kedua menggunakan kembali token prompt sistem yang di-cache dengan setengah harga. Anda akan melihat sesuatu seperti Cached: 1920/2048 tokens (94%) dalam output.
Vonis: OpenAI adalah yang termudah untuk memulai, nol konfigurasi, caching terjadi begitu saja. Diskon 50% adalah yang terendah dari ketiga penyedia, tetapi Anda tidak bisa mengalahkan kesederhanaannya.
Bagaimana Anthropic/Claude Menangani Caching Prompt?
Anthropic menawarkan dua mode: caching otomatis (diaktifkan secara default sejak Februari 2026) dan caching eksplisit dengan breakpoint cache_control. Angka utamanya sulit diabaikan, bacaan yang di-cache harganya hanya 10% dari harga input standar, sebuah diskon 90%.
Caching Otomatis vs Eksplisit (Pembaruan 2026)
Per 5 Februari 2026, Anthropic mengaktifkan caching otomatis secara default untuk semua prompt yang memenuhi syarat. Anda tidak memerlukan header beta lama lagi. Sistem menentukan breakpoint cache optimal secara otomatis.
Caching eksplisit masih tersedia ketika Anda menginginkan kontrol yang halus. Anda menempatkan cache_control: {"type": "ephemeral"} pada blok konten tertentu untuk menandai secara tepat di mana batas cache harus berada. Ini berguna ketika prompt Anda memiliki struktur spesifik dan Anda ingin menjamin bagian tertentu di-cache.
Ada dua opsi TTL:
- Cache 5 menit (default): biaya tulis 1,25x harga input dasar, biaya baca 0,1x. Balik modal setelah 1 hit cache.
- Cache 1 jam: biaya tulis 2x harga input dasar, biaya baca 0,1x. Balik modal setelah 2 hit cache. Tersedia pada model Claude 4.5+.
Isolasi cache berubah dari tingkat organisasi menjadi tingkat workspace pada 5 Februari 2026. Ini berarti workspace berbeda dalam organisasi yang sama mempertahankan cache terpisah.
Saat bekerja dengan caching Anthropic, membantu untuk menstrukturkan prompt Anda untuk caching optimal, menempatkan konten statis sebelum konten dinamis bahkan lebih penting di sini karena Anda membayar premi tulis.
Contoh SDK Python 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...")Memahami Harga Tulis Cache vs Baca Cache
Di sinilah harga Anthropic menjadi menarik. Menggunakan Claude Sonnet 4.5 ($3/MTok input dasar) sebagai contoh:
- Input standar: $3,00 per juta token
- Tulis cache (5-menit): $3,75 per juta token (1,25x), Anda membayar lebih pada kali pertama
- Baca cache: $0,30 per juta token (0,1x) -- 90% lebih murah pada setiap hit berikutnya
Cache 5 menit balik modal hanya setelah 1 bacaan. Cache 1 jam ($6,00/MTok tulis) balik modal setelah 2 bacaan. Jika Anda membuat lebih dari beberapa permintaan per menit dengan awalan yang sama, matematikanya sangat menguntungkan Anda.
Vonis: Anthropic memberikan diskon terdalam (90%) dan kontrol paling banyak. Terbaik untuk beban kerja bervolume tinggi dan sensitif terhadap biaya.
Bagaimana Google Gemini Menangani Caching Prompt?
Gemini mengambil pendekatan berbeda dengan dua mekanisme caching yang berbeda: caching konteks eksplisit (objek cache bernama yang Anda buat dan referensi) dan caching implisit (otomatis, nol-konfigurasi, ditambahkan pada 2026 untuk model Gemini 2.5+).
Caching Konteks Eksplisit (Cache Bernama)
Tidak seperti OpenAI dan Anthropic di mana caching transparan, caching eksplisit Gemini mengharuskan Anda membuat objek cache bernama terlebih dahulu, lalu mereferensikannya dalam permintaan berikutnya. Ambang batas token minimum adalah 1.024 token untuk model Gemini Flash dan 4.096 token untuk model Pro. TTL dapat dikonfigurasi, defaultnya 1 jam, tetapi Anda dapat mengaturnya sesuai kebutuhan.
Token yang di-cache pada Gemini 2.5 Pro dihargai $0,125/MTok vs harga input standar $1,25/MTok, sebuah diskon 90%. Ada juga biaya penyimpanan sebesar $4,50 per juta token per jam untuk Pro, dan $1,00 untuk Flash.
Caching Implisit di Gemini 2.5 (2026)
Dimulai dengan Gemini 2.5 Pro dan Flash, Google menambahkan caching implisit, caching otomatis yang bekerja seperti pendekatan OpenAI. Tidak diperlukan konfigurasi. Tempatkan konten besar dan umum di awal prompt Anda dan kirim permintaan dengan awalan serupa dalam waktu berdekatan. Sistem secara otomatis mendeteksi konten yang memenuhi syarat untuk cache dan meneruskan penghematan.
Contoh SDK Python 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}")Pendekatan eksplisit memiliki satu keunggulan besar: Anda mengontrol TTL secara presisi. Jika Anda tahu pekerjaan batch Anda berjalan selama 4 jam, atur TTL 4 jam dan hindari kedaluwarsa cache di tengah pemrosesan.
Vonis: TTL yang dapat dikonfigurasi dan mode caching ganda Gemini (eksplisit + implisit) membuatnya serbaguna. Ambang batas minimum sekarang sebanding dengan penyedia lain, dan diskon 90% pada bacaan yang di-cache menyamai Anthropic.
Perbandingan Kode Side-by-Side, Kasus Penggunaan Sama, Semua 3 Penyedia
Berikut adalah chatbot yang sama dengan prompt sistem yang di-cache, diimplementasikan di ketiga SDK. Bandingkan pengalaman pengembang secara langsung.
# --- 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| Aspek | OpenAI | Anthropic | Gemini |
|---|---|---|---|
| Kompleksitas Penyiapan | Tidak ada | Tambahkan blok cache_control | Buat objek cache terlebih dahulu |
| Kontrol Cache | Hanya otomatis | Otomatis atau eksplisit | Implisit atau eksplisit |
| Diskon Baca Cached | 50% | 90% | ~90% |
| Token Min | 1.024 | 1.024 | 1.024 (Flash) / 4.096 (Pro) |
| Vonis DX | Paling Sederhana | Kontrol Paling Banyak | TTL Paling Fleksibel |
Jika Anda menginginkan penghematan tanpa usaha, pilih OpenAI. Jika Anda menginginkan diskon terdalam dan kontrol halus, pilih Anthropic. Jika Anda membutuhkan masa hidup cache yang dapat dikonfigurasi atau Anda sudah berada di Google Cloud, pilih Gemini.
Kalkulator Biaya Produksi, Penghematan Nyata dalam Skala Besar
Persentase abstrak tidak mendorong keputusan. Jumlah dolarlah yang melakukannya. Berikut adalah tiga skenario produksi dengan estimasi biaya nyata menggunakan Claude Sonnet 4.5 ($3/MTok input), GPT-4o ($2,50/MTok input), dan Gemini 2.5 Pro ($1,25/MTok input).
Harga diverifikasi Maret 2026. Periksa harga Anthropic, harga OpenAI, dan harga Gemini untuk tarif saat ini.
Asumsi: Tingkat hit cache 80% (realistis untuk prompt yang terstruktur dengan baik), token output dikecualikan karena caching hanya mempengaruhi biaya input.
| Skenario | Tanpa Caching (Bulanan) | Dengan Caching OpenAI | Dengan Caching Anthropic | Dengan Caching Gemini |
|---|---|---|---|---|
| Chatbot Hobi: 100 req/hari, 2K prompt sistem | OpenAI: $15 / Anthropic: $18 / Gemini: $7,50 | $12 (hemat $3) | $5,40 (hemat $12,60) | $2,25 (hemat $5,25) |
| API Pertumbuhan: 10K req/hari, 8K awalan di-cache | OpenAI: $600 / Anthropic: $720 / Gemini: $300 | $360 (hemat $240) | $144 (hemat $576) | $60 (hemat $240) |
| Pipeline Enterprise: 100K req/hari, 10K awalan di-cache | OpenAI: $7.500 / Anthropic: $9.000 / Gemini: $3.750 | $4.500 (hemat $3.000) | $1.800 (hemat $7.200) | $750 (hemat $3.000) |
Pada tingkat Pertumbuhan, caching Anthropic menghemat $576/bulan meskipun memiliki harga dasar lebih tinggi daripada OpenAI. Pada skala Enterprise, Anda melihat penghematan $7.200/bulan dengan Anthropic, atau $86.400 per tahun. Itu setara dengan gaji seorang insinyur senior dari sekadar perubahan konfigurasi.
Polanya jelas: semakin tinggi volume permintaan Anda dan semakin panjang awalan statis Anda, semakin besar penghematan dari caching. Diskon 90% Anthropic mendominasi dalam skala besar, tetapi harga dasar Gemini yang lebih rendah membuatnya kompetitif ketika Anda memperhitungkan total biaya.
Anti-Pola Caching Prompt, Kapan TIDAK Melakukan Caching
Caching terlihat sederhana sampai tingkat hit cache Anda secara misterius berada di 0%. Berikut adalah kesalahan yang secara diam-diam merusak caching prompt, dan cara memperbaikinya.
Kesalahan Pemecah Cache (Dengan Solusi)
Timestamp dalam prompt sistem, Kesalahan paling umum. Jika prompt sistem Anda menyertakan datetime.now(), kunci cache berubah setiap detik.
# 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}"Konten khusus pengguna sebelum konten statis, Jika Anda menempatkan session_id atau preferensi pengguna di awal, setiap pengguna mendapatkan awalan unik.
# 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}"},
]| Anti-Pola | Mengapa Merusak Cache | Solusi |
|---|---|---|
| Timestamp dalam prompt sistem | Awalan berubah setiap detik | Pindahkan timestamp ke pesan pengguna |
| ID Sesi/pengguna dalam awalan | Awalan unik per pengguna | Pindahkan konteks pengguna setelah konten statis |
| Contoh few-shot yang berputar | Contoh berbeda = awalan berbeda | Gunakan set contoh tetap |
| Definisi alat dinamis | Alat berubah = ketidakcocokan awalan | Jaga skema alat tetap statis |
| Prompt pendek (di bawah minimum) | Cache tidak akan terpicu | Konsolidasikan konteks untuk melebihi 1.024 token |
| Personalisasi per-permintaan dalam prompt sistem | Prompt sistem berubah setiap panggilan | Gunakan prompt sistem bersama + pesan pengguna khusus |
Kapan Caching Prompt Benar-Benar Tidak Membantu
Beberapa skenario tidak akan mendapat manfaat dari caching bahkan jika Anda menyusun prompt dengan sempurna:
- Prompt sekali pakai: Jika setiap permintaan memiliki konteks yang benar-benar unik dan tidak ada awalan bersama, tidak ada yang bisa di-cache.
- Prompt sangat pendek: Di bawah 1.024 token (OpenAI/Anthropic) atau 4.096 token (Gemini Pro), caching tidak aktif.
- Permintaan jarang: Jika permintaan berjarak berjam-jam, cache kedaluwarsa sebelum permintaan kedua tiba. Jendela 5-10 menit OpenAI dan TTL default 5 menit Anthropic berarti Anda memerlukan lalu lintas yang konsisten.
Apakah Caching Prompt Bekerja Dengan Streaming?
Ya. Caching prompt dan streaming adalah independen, caching beroperasi pada token input, streaming mempengaruhi pengiriman output. Mereka memecahkan masalah berbeda pada tahap berbeda dari siklus hidup permintaan.
Cache menangani fase prefill (memproses prompt input Anda). Streaming menangani fase decode (menghasilkan dan mengirim token output secara bertahap). Anda mendapatkan kedua manfaat secara bersamaan: prefill lebih cepat dari hit cache, plus pengiriman output progresif dari streaming.
Berikut adalah contoh streaming dengan caching diaktifkan:
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")Peningkatan TTFT dari caching sebenarnya paling terlihat dengan streaming. Tanpa caching, Anda menunggu prefill penuh sebelum token pertama mengalir kembali. Dengan caching, prefill hampir instan, sehingga token mulai mengalir hampir segera.
Cara Memantau Tingkat Hit Cache di Produksi
Menyiapkan caching adalah setengah dari pertempuran. Mengetahui apakah itu benar-benar bekerja adalah setengah lainnya. Jika tingkat hit cache Anda turun di bawah 50%, ada sesuatu yang berubah dalam struktur prompt Anda dan Anda membuang uang.
Metrik Cache Spesifik Penyedia
| Penyedia | Field Baca Cache | Field Tulis Cache | Field Input Total |
|---|---|---|---|
| OpenAI | usage.prompt_tokens_details.cached_tokens | N/A (otomatis) | usage.prompt_tokens |
| Anthropic | usage.cache_read_input_tokens | usage.cache_creation_input_tokens | usage.input_tokens |
| Gemini | usageMetadata.cachedContentTokenCount | N/A (objek cache eksplisit) | usageMetadata.promptTokenCount |
Logger Tingkat Hit Cache Sederhana
Berikut adalah fungsi utilitas yang dapat Anda masukkan ke proyek apa pun untuk melacak tingkat hit cache melalui field respons 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_rateSistem produksi yang sehat harus mempertahankan tingkat hit cache 70-90%. Jika Anda di bawah 50%, tinjau kembali bagian anti-pola. Anda juga dapat mengintegrasikan ini dengan metrik evaluasi otomatis untuk menangkap regresi dalam pipeline prompt Anda.
Caching Prompt dalam Kasus Penggunaan Dunia Nyata
Contoh chatbot di atas mengilustrasikan mekanismenya, tetapi caching prompt benar-benar bersinar dalam pola arsitektur tertentu.
Pipeline RAG
Dalam pengaturan RAG, prompt sistem dan contoh few-shot Anda statis di semua kueri. Dokumen yang diambil berubah setiap kali. Strukturkan prompt Anda untuk memaksimalkan awalan yang di-cache:
- Prompt sistem (di-cache)
- Contoh few-shot (di-cache)
- Dokumen yang diambil (dinamis, letakkan terakhir)
- Kueri pengguna (selalu unik)
Dengan prompt sistem 5.000 token dan 3.000 token contoh few-shot, itu adalah 8.000 token yang di-cache pada setiap permintaan. Pada 1.000 permintaan/hari di Anthropic, Anda akan menghemat sekitar $6,50/hari hanya dari awalan yang di-cache saja. Saat Anda mengambil dan memblokir konteks cache, pastikan output pengambilan datang setelah awalan statis.
Chatbot Multi-Turn
Percakapan multi-turn adalah titik manis untuk caching prompt. Setiap giliran menambah riwayat percakapan, tetapi seluruh percakapan sebelumnya sudah di-cache dari giliran sebelumnya. Manfaat cache bertambah; pada giliran ke-10, Anda mungkin memiliki 15.000 token riwayat yang di-cache dengan hanya 200 token segar dari pesan pengguna terbaru.
Sistem Agentic dan Definisi Alat MCP
Jika Anda membangun agen dengan penggunaan alat, definisi alat Anda adalah skema JSON statis yang diulang pada setiap panggilan API. Agen tipikal mungkin memiliki 20+ alat dengan total 3.000-5.000 token definisi. Itu adalah bahan caching utama.
Ini sangat relevan untuk arsitektur berbasis MCP di mana definisi alat server dikirim pada setiap panggilan. Dengan cache_control eksplisit Anthropic, Anda dapat menandai array tools untuk caching dan menjamin token tersebut digunakan kembali.
Penyedia Mana yang Harus Anda Pilih?
| Jika Anda Membutuhkan... | Pilihan Terbaik | Mengapa |
|---|---|---|
| Nol-konfigurasi, hanya ingin penghematan | OpenAI | Caching otomatis, tidak perlu perubahan kode |
| Pengurangan biaya maksimum (90%) | Anthropic | Harga baca cached 0,1x, diskon terdalam |
| Kontrol cache halus | Anthropic | Breakpoint eksplisit + TTL yang dapat dikonfigurasi (5-menit atau 1-jam) |
| Analisis dokumen panjang | Gemini | TTL yang dapat dikonfigurasi dengan cache bernama eksplisit |
| Kesederhanaan chat multi-turn | OpenAI | Pencocokan awalan otomatis pada riwayat percakapan yang berkembang |
| Sistem agentic dengan definisi alat | Anthropic | Cache definisi alat secara eksplisit dengan cache_control |
| Fleksibilitas multi-penyedia | LiteLLM | Sintaks caching terunifikasi di semua penyedia |
Jika Anda sudah menggunakan satu penyedia, mulailah dari sana, caching prompt tidak memerlukan pergantian. LiteLLM bertindak sebagai lapisan proxy yang menormalisasi parameter caching di seluruh penyedia, yang berguna jika Anda merutekan permintaan ke beberapa model.
FAQ, Caching Prompt LLM
Apa itu caching prompt di LLM?
Caching prompt menyimpan status perhatian yang dihitung (cache KV) dari awalan prompt yang telah diproses sebelumnya. Ketika permintaan berikutnya dimulai dengan urutan token yang sama, penyedia menggunakan kembali status yang disimpan tersebut daripada menghitungnya ulang, mengurangi biaya dan latensi tanpa dampak pada kualitas output.
Berapa banyak penghematan biaya API dari caching prompt?
Penghematan berkisar dari 50% hingga 90% tergantung pada penyedia. OpenAI menawarkan diskon 50% pada token input yang di-cache. Anthropic menawarkan hingga 90% diskon (bacaan cached pada 0,1x harga dasar). Gemini menawarkan sekitar 90% diskon pada bacaan cached. Penghematan aktual bergantung pada tingkat hit cache, panjang prompt, dan frekuensi permintaan.
Apakah caching prompt OpenAI terjadi secara otomatis?
Ya, sejak Oktober 2024. Setiap panggilan API dengan 1.024+ token input secara otomatis mendapatkan manfaat dari caching. Tidak perlu opting-in, tidak ada header, tidak ada perubahan kode yang diperlukan. Cache mencocokkan awalan token dari awal prompt.
Apa perbedaan antara caching prompt dan caching semantik?
Caching prompt mencocokkan awalan token yang tepat di level GPU, tidak ada kehilangan akurasi, dan output identik dengan permintaan yang tidak di-cache. Caching semantik menggunakan kesamaan embedding untuk menemukan kueri sebelumnya yang "cukup dekat" dan mengembalikan respons yang di-cache, lebih cepat tetapi dapat mengembalikan jawaban yang salah atau usang. Mereka memecahkan masalah yang fundamentally berbeda.
Berapa lama cache prompt bertahan?
Bervariasi menurut penyedia. OpenAI: 5-10 menit (hingga 24 jam dengan retensi diperpanjang). Anthropic: 5 menit (default) atau 1 jam (tersedia pada model Claude 4.5+, biaya tulis 2x). Gemini: dapat dikonfigurasi, default 1 jam untuk cache eksplisit. TTL caching implisit dikelola oleh Google secara otomatis.
Berapa panjang token minimum untuk caching prompt?
OpenAI: 1.024 token. Anthropic: 1.024 token untuk sebagian besar model saat ini. Gemini: 1.024 token untuk model Flash, 4.096 untuk model Pro. Prompt di bawah ambang batas ini tidak akan mengaktifkan caching, ini adalah jebakan "tidak bekerja" yang paling umum.
Apakah caching prompt bekerja dengan respons streaming?
Ya. Caching dan streaming beroperasi pada fase permintaan yang berbeda. Caching mempercepat fase prefill input; streaming mengirimkan token output secara bertahap. Keduanya bekerja secara simultan, dan Anda sebenarnya akan melihat peningkatan TTFT lebih jelas dengan streaming diaktifkan.
Kapan saya TIDAK BOLEH menggunakan caching prompt?
Hindari mengandalkan caching ketika prompt Anda di bawah ambang batas token minimum, ketika Anda menyertakan timestamp atau ID sesi dalam prompt sistem, ketika Anda memutar contoh few-shot antar panggilan, atau ketika permintaan terlalu jarang untuk mencapai cache sebelum kedaluwarsa (jendela 5-10 menit untuk OpenAI/Anthropic).
Bisakah saya menggunakan caching prompt dengan LangChain atau LiteLLM?
Ya. LangChain meneruskan parameter caching spesifik penyedia melalui wrapper API-nya. LiteLLM menyediakan sintaks caching terunifikasi yang menormalisasi cache_control di seluruh Anthropic, OpenAI, Gemini, Vertex AI, dan Bedrock, sangat berguna untuk pengaturan multi-penyedia.
Apa itu cache hit vs cache miss?
Cache hit berarti penyedia menemukan awalan yang cocok dalam memori dan menggunakan kembali status KV yang disimpan, Anda membayar harga token cached yang didiskon dan mendapatkan TTFT lebih cepat. Cache miss berarti tidak ditemukan kecocokan, sehingga prompt penuh diproses dari awal dengan harga standar. Periksa field cached_tokens (OpenAI), cache_read_input_tokens (Anthropic), atau cachedContentTokenCount (Gemini) dalam respons API untuk melihat mana yang terjadi.
Vonis Akhir
| Kategori | Pemenang | Alasan Utama |
|---|---|---|
| Penyiapan Termudah | OpenAI | Otomatis, nol konfigurasi |
| Diskon Terdalam | Anthropic | 90% diskon pada bacaan cached (0,1x dasar) |
| Kontrol Paling Banyak | Anthropic | Breakpoint eksplisit + TTL 5-menit atau 1-jam |
| Terbaik untuk Dokumen Panjang | Gemini | TTL yang dapat dikonfigurasi dengan objek cache bernama |
| Terbaik untuk Chat Multi-Turn | OpenAI | Pencocokan awalan otomatis pada riwayat percakapan |
| Terbaik untuk Agentic/MCP | Anthropic | Cache definisi alat secara eksplisit |
Caching prompt adalah optimisasi dengan usaha terendah dan hasil tertinggi dalam tumpukan API LLM. Anda tidak mengubah model, Anda tidak mengorbankan kualitas, dan implementasinya berkisar dari "tidak melakukan apa-apa" (OpenAI) hingga "menambahkan satu field" (Anthropic) hingga "membuat objek cache" (Gemini).
Mulailah dengan caching otomatis penyedia Anda saat ini. Ukur tingkat hit cache Anda dengan utilitas logging di atas. Jika Anda di bawah 70%, strukturkan ulang prompt Anda (statis dulu, dinamis terakhir) dan hilangkan anti-pola. Sebagian besar tim melihat pengurangan biaya 50-80% dalam sehari setelah menerapkan perubahan ini.