karawaci.kode

← Semua snippet

TypeScript Menengah AI

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_control tidak 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_control di 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_tokens di bawah 70%, kemungkinan ada drift di system prompt yang bikin cache miss terus.

# tags

claudeanthropicprompt-cachecost-optimizationai

Ditulis oleh Asti Larasati · 2 Juni 2026