Strategi Caching untuk AI Agent: Memangkas Biaya Tanpa Mengorbankan Kualitas
Strategi Caching untuk AI Agent: Memangkas Biaya Tanpa Mengorbankan Kualitas
Research agent Anda menjalankan 50 tugas per hari. Setiap tugas dimulai dengan system prompt yang sama berisi 3.000 token, definisi tool yang sama berisi 2.500 token, dan knowledge base yang sama berisi 5.000 token. Itu berarti 10.500 token yang diulang 50 kali — 525.000 token per hari yang dibaca model secara identik setiap saat. Dengan harga standar, Anda membayar untuk memproses konten yang sama berulang kali.
Caching adalah optimasi dengan usaha paling minimal namun berdampak paling besar untuk agent yang sudah berjalan di produksi. Prompt caching saja dapat mengurangi biaya token input hingga 90% untuk konten yang di-cache. Dikombinasikan dengan tool result caching, Anda sering dapat memangkas total biaya agent hingga setengahnya — tanpa mengorbankan kualitas, akurasi, atau fleksibilitas.
Dalam artikel ini, Anda akan mempelajari tiga lapisan caching untuk agent — prompt caching, tool result caching, dan response memoization — beserta pola implementasinya menggunakan API Claude dan analisis biaya yang jelas untuk memandu keputusan Anda.
Bagian 1: Anatomi Biaya Agent
Sebelum melakukan optimasi, Anda perlu memahami ke mana token Anda sebenarnya pergi. Mari kita uraikan alur kerja agentic yang umum.
Rincian Token Per Giliran
Dalam arsitektur agent standar, setiap pemanggilan API ke model mencakup:
| Komponen | Perkiraan Token | Diulang? |
|---|---|---|
| System prompt | ~1.500 | Setiap giliran |
| Definisi tool | ~2.000 | Setiap giliran |
| Knowledge base / konteks | ~3.000 | Setiap giliran |
| Riwayat percakapan | Bertambah | Terakumulasi |
| Hasil tool | ~500 rata-rata | Per pemanggilan tool |
Overhead statis — system prompt, definisi tool, dan knowledge base — berjumlah sekitar 6.500 token per giliran, dan identik setiap saat.
Masalah Biaya Berlipat Ganda
Agent tidak hanya melakukan satu pemanggilan API. Mereka berulang. Sebuah agent yang berjalan selama 15 langkah umum terlihat seperti ini:
Tanpa caching:
Masing-masing dari 15 langkah mengirimkan konteks penuh. Dengan asumsi riwayat percakapan bertambah sekitar ~300 token per langkah secara rata-rata:
- Token statis per langkah: 6.500
- Total token statis dalam 15 langkah: 97.500
- Token riwayat percakapan (kumulatif): ~33.750
- Token hasil tool: ~7.500
- Total token input: ~138.750
Dengan harga input Claude Sonnet sebesar $3 per juta token, itu sekitar $0,42 per tugas. Jalankan 50 tugas per hari dan Anda akan menghadapi $21/hari — hanya untuk token input.
Dengan prompt caching:
Token yang di-cache dikenakan biaya $0,30 per juta untuk pembacaan cache (diskon 90%). Jika Anda men-cache 6.500 token statis:
- Pembacaan token cache dalam 15 langkah: 97.500 token × $0,30/juta = $0,029
- Token yang tidak di-cache tetap dengan harga standar: ~41.250 × $3/juta = $0,124
- Penulisan cache (langkah pertama): 6.500 × $3,75/juta = $0,024
- Total biaya input: ~$0,18 per tugas
Itu adalah pengurangan 57% hanya dari caching. Pada 50 tugas per hari, Anda menghemat lebih dari $12/hari — sekitar $360/bulan — dengan perubahan kode yang minimal.
Bagian 2: Prompt Caching dengan Claude
API prompt caching Claude adalah optimasi tunggal yang paling berdampak yang dapat Anda terapkan pada alur kerja agentic. API ini memungkinkan Anda memberi tahu API “bagian prompt ini tidak berubah — gunakan kembali komputasi yang di-cache.”
Cara Kerja Prompt Caching
Ketika Anda mengirim permintaan dengan caching diaktifkan, infrastruktur Anthropic:
- Memeriksa apakah versi cache dari prefiks yang ditandai ada
- Saat cache miss: Memproses prompt penuh, men-cache prefiks, dan mengenakan biaya penulisan cache (premium 25% di atas harga input standar)
- Saat cache hit: Menggunakan kembali komputasi yang di-cache, hanya mengenakan biaya pembacaan cache (diskon 90% dari harga input standar)
Cache memiliki TTL 5 menit (Time to Live — durasi sebelum data yang di-cache kedaluwarsa). Setiap cache hit mereset TTL, sehingga agent yang aktif menjaga cache mereka tetap hidup secara alami. Pekerjaan batch dengan jeda lebih dari 5 menit antar pemanggilan akan lebih sering menanggung biaya penulisan cache.
Apa yang Harus Di-cache
Tidak semua hal dapat atau harus di-cache. Cache prefiks stabil yang diulang:
- System prompt — Hampir selalu identik di semua eksekusi. Cache ini terlebih dahulu.
- Definisi tool — Skema tool Anda jarang berubah antar pemanggilan.
- Knowledge base statis — Dokumen referensi, panduan, kebijakan.
- Prefiks percakapan — Untuk percakapan multi-giliran, cache giliran-giliran sebelumnya yang tidak akan berubah.
Batasan penting:
- Caching bersifat berbasis prefiks — Anda hanya dapat men-cache konten dari awal prompt, secara berurutan. Anda tidak dapat men-cache bagian di tengah sambil membiarkan bagian sebelumnya tidak di-cache.
- Ada panjang minimum yang dapat di-cache sebesar 1.024 token untuk Claude Sonnet dan Haiku (2.048 untuk Opus).
- Anda dapat menetapkan hingga 4 breakpoint cache dalam satu permintaan.
Implementasi
Berikut adalah contoh lengkap yang menunjukkan pengaturan agent dengan prompt caching:
Sebelum (tanpa caching):
import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """You are a research assistant specializing in market analysis.You have access to tools for searching databases, reading files, and performingcalculations. Always cite your sources and provide confidence levels for yourfindings. [... detailed instructions totaling ~1,500 tokens ...]"""
TOOLS = [ { "name": "search_database", "description": "Search the company database for market data, competitor info, or financial records.", "input_schema": { "type": "object", "properties": { "query": {"type": "string", "description": "Search query"}, "database": {"type": "string", "enum": ["market", "competitors", "financial"]}, "limit": {"type": "integer", "description": "Max results", "default": 10} }, "required": ["query", "database"] } }, { "name": "read_file", "description": "Read the contents of a research file.", "input_schema": { "type": "object", "properties": { "file_path": {"type": "string", "description": "Path to the file"} }, "required": ["file_path"] } }, # ... more tools totaling ~2,000 tokens in definitions]
KNOWLEDGE_BASE = """## Company Policies and Guidelines[... reference material totaling ~3,000 tokens ...]"""
def run_agent(user_query: str): messages = [{"role": "user", "content": user_query}]
response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=4096, system=f"{SYSTEM_PROMPT}\n\n{KNOWLEDGE_BASE}", tools=TOOLS, messages=messages, ) # Log token usage print(f"Input tokens: {response.usage.input_tokens}") return responseSetelah (dengan prompt caching):
import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """You are a research assistant specializing in market analysis.You have access to tools for searching databases, reading files, and performingcalculations. Always cite your sources and provide confidence levels for yourfindings. [... detailed instructions totaling ~1,500 tokens ...]"""
KNOWLEDGE_BASE = """## Company Policies and Guidelines[... reference material totaling ~3,000 tokens ...]"""
TOOLS = [ { "name": "search_database", "description": "Search the company database for market data, competitor info, or financial records.", "input_schema": { "type": "object", "properties": { "query": {"type": "string", "description": "Search query"}, "database": {"type": "string", "enum": ["market", "competitors", "financial"]}, "limit": {"type": "integer", "description": "Max results", "default": 10} }, "required": ["query", "database"] } }, { "name": "read_file", "description": "Read the contents of a research file.", "input_schema": { "type": "object", "properties": { "file_path": {"type": "string", "description": "Path to the file"} }, "required": ["file_path"] }, "cache_control": {"type": "ephemeral"} # Cache breakpoint after tools },]
def run_agent_cached(user_query: str): messages = [{"role": "user", "content": user_query}]
response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=4096, system=[ { "type": "text", "text": SYSTEM_PROMPT, }, { "type": "text", "text": KNOWLEDGE_BASE, "cache_control": {"type": "ephemeral"}, # Cache breakpoint }, ], tools=TOOLS, messages=messages, ) # Log token usage — now includes cache metrics usage = response.usage print(f"Input tokens: {usage.input_tokens}") print(f"Cache read tokens: {usage.cache_read_input_tokens}") print(f"Cache creation tokens: {usage.cache_creation_input_tokens}") return responsePerubahan utamanya:
- Parameter
systemmenjadi daftar blok konten (bukan string biasa) sehingga Anda dapat melampirkancache_controlke blok tertentu. - Tambahkan `“cache_control”: {“type
Artikel Terkait
- Optimasi Biaya Agen: Panduan Praktis Mengurangi Pengeluaran API
- Pemulihan Error Agen: 5 Pola untuk Keandalan Produksi
- Pola Penggunaan Alat: Membangun Antarmuka Agen-Alat yang Andal