Pakai prompt cache di Anthropic SDK
Prompt caching Anthropic bisa potong biaya 90% dan latency 80% kalau context-nya stabil. Wajib dipakai buat chatbot dengan system prompt panjang.
Dipublikasikan 2 Juni 2026
System prompt 8000 token yang sama dipanggil 100 kali sehari? Itu rugi banget tanpa cache. Prompt caching Anthropic ngebuat token system prompt cuma di-charge sekali (sekitar 1.25x harga input), sisanya jadi cache hit (~0.1x harga input). Snippet ini setup minimum + retrieval cache hit metric.
Kode
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY!,
});
// System prompt panjang (FAQ, dokumentasi produk, dll)
const KNOWLEDGE_BASE = `
Kamu CS Tokopedia yang menjawab pertanyaan seputar voucher cashback.
Berikut daftar voucher aktif Juni 2026:
- VCR-NANO-50: cashback 50rb min belanja 200rb
- VCR-NANO-25: cashback 25rb min belanja 100rb
...
(asumsikan ini 5000+ token konten panjang)
`;
interface CachedChatResult {
text: string;
usage: {
inputTokens: number;
cacheReadTokens: number;
cacheCreationTokens: number;
outputTokens: number;
};
}
export async function cachedChat(
userMessage: string
): Promise<CachedChatResult> {
const response = await client.messages.create({
model: "claude-opus-4-5",
max_tokens: 1024,
system: [
{
type: "text",
text: KNOWLEDGE_BASE,
// Marker cache_control bikin block ini di-cache
cache_control: { type: "ephemeral" },
},
],
messages: [{ role: "user", content: userMessage }],
});
const textBlock = response.content.find((c) => c.type === "text");
return {
text: textBlock?.type === "text" ? textBlock.text : "",
usage: {
inputTokens: response.usage.input_tokens,
cacheReadTokens: response.usage.cache_read_input_tokens ?? 0,
cacheCreationTokens: response.usage.cache_creation_input_tokens ?? 0,
outputTokens: response.usage.output_tokens,
},
};
}
Pemakaian
// Request pertama — populate cache
const first = await cachedChat("Voucher apa yang aktif sekarang?");
console.log("Pertama:", first.usage);
// → cacheCreationTokens: 5200, cacheReadTokens: 0
// Request kedua dalam 5 menit — cache hit!
const second = await cachedChat("Minimum belanja voucher NANO-50 berapa?");
console.log("Kedua:", second.usage);
// → cacheCreationTokens: 0, cacheReadTokens: 5200 (90% lebih murah)
// Hitung penghematan
function calculateSavings(usage: CachedChatResult["usage"]) {
const INPUT_RATE = 3.0; // USD per 1M token (Opus)
const CACHE_WRITE_RATE = 3.75;
const CACHE_READ_RATE = 0.3;
const noCacheCost =
((usage.inputTokens + usage.cacheReadTokens + usage.cacheCreationTokens) /
1_000_000) *
INPUT_RATE;
const actualCost =
((usage.inputTokens) / 1_000_000) * INPUT_RATE +
(usage.cacheCreationTokens / 1_000_000) * CACHE_WRITE_RATE +
(usage.cacheReadTokens / 1_000_000) * CACHE_READ_RATE;
return { noCacheCost, actualCost, saved: noCacheCost - actualCost };
}
Kapan dipakai
- Customer service bot dengan FAQ panjang (5000+ token).
- RAG yang inject dokumen sama berulang-ulang.
- Code assistant dengan project context yang stabil per session.
- Few-shot prompting dengan banyak contoh sampel.
Catatan
- Minimum 1024 token untuk Opus/Sonnet, 2048 token untuk Haiku. Di bawah itu marker
cache_controltidak bikin cache — request tetap jalan tapi tidak hemat. - TTL default 5 menit — refresh kalau ada cache hit. Buat workload dengan request sparse, pakai
cache_control: { type: "ephemeral", ttl: "1h" }(tarif beda). - Urutan content matter — cache match prefix-based. Kalau system prompt sama persis tapi ada whitespace beda, cache miss.
- Max 4 breakpoint per request — taruh
cache_controldi end of segment yang stabil. Konten setelah breakpoint terakhir tidak di-cache.
Cek dashboard Anthropic seminggu sekali — kalau ratio
cache_read_input_tokens / total_input_tokensdi bawah 70%, kemungkinan ada drift di system prompt yang bikin cache miss terus.
# tags
claudeanthropicprompt-cachecost-optimizationai
Ditulis oleh Asti Larasati · 2 Juni 2026