Hostlinku

Hostlinku Docs

Dokumentasi

Menu

Hemat dengan Prompt Caching

Cara memakai cache_control di Hostlinku agar prompt besar yang berulang hanya ditagih ~10% — untuk Claude Code, Cursor, agent, dan aplikasi dengan system prompt panjang

Prompt caching membuat bagian prompt yang sama (system prompt panjang, definisi tools, dokumen referensi, riwayat percakapan) hanya diproses penuh sekali. Pada request berikutnya bagian itu dibaca dari cache dan ditagih sekitar 10% dari harga input normal. Hostlinku meneruskan dan menagih cache persis seperti Anthropic — tidak ada markup tambahan.

Cara kerja harga

Jenis tokenTarif relatif ke input normalKapan terjadi
Input normal1×Bagian prompt yang tidak di-cache
Cache write1,25×Pertama kali blok ditandai cache_control dan belum ada di cache
Cache read0,1×Blok yang sama dikirim lagi dalam masa hidup cache

Masa hidup cache default 5 menit sejak terakhir dipakai (diperpanjang tiap kali kena hit). Artinya cache sudah balik modal bila blok yang sama dipakai minimal 2 kali; makin sering dipakai, makin besar hematnya. Tarif per model ada di Katalog Model (kolom cache_read / cache_write).

Prinsip susunan prompt

Cache bekerja berdasarkan prefix — semua konten sebelum penanda cache_control harus identik byte-per-byte agar kena hit. Susun prompt dari yang paling statis ke paling dinamis:

  1. tools (definisi fungsi) — jarang berubah
  2. system — instruksi, persona, dokumen referensi
  3. messages lama — riwayat percakapan
  4. Pesan user terbaru — selalu berubah, jangan di-cache

Maksimal 4 penanda cache_control per request. Yang paling umum: satu di akhir system.

Format Anthropic (/v1/messages)

Dipakai oleh Anthropic SDK, Claude Code, Cursor, Cline, dan tool lain berprotokol Anthropic. system ditulis sebagai array blok, lalu beri cache_control pada blok terakhir yang statis:

curl https://api.hostlinku.com/v1/messages \
  -H "x-api-key: sk-isi-api-key-kamu" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "system": [
      {
        "type": "text",
        "text": "<instruksi panjang + dokumen referensi di sini>",
        "cache_control": { "type": "ephemeral" }
      }
    ],
    "messages": [
      { "role": "user", "content": "Ringkas bagian 3 dokumen di atas." }
    ]
  }'

Respons melaporkan token cache terpisah dari input_tokens:

"usage": {
  "input_tokens": 16,
  "cache_creation_input_tokens": 3601,
  "cache_read_input_tokens": 0,
  "output_tokens": 4
}

Pada request kedua dengan system yang sama, nilainya menjadi cache_creation_input_tokens: 0 dan cache_read_input_tokens: 3601 — itulah tanda cache bekerja.

Python (Anthropic SDK)

import anthropic

client = anthropic.Anthropic(
    base_url="https://api.hostlinku.com",
    api_key="sk-isi-api-key-kamu",
)

resp = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": DOKUMEN_REFERENSI,  # konten statis & panjang
            "cache_control": {"type": "ephemeral"},
        }
    ],
    messages=[{"role": "user", "content": "Ringkas bagian 3."}],
)
print(resp.usage.cache_read_input_tokens)

Format OpenAI (/v1/chat/completions)

Untuk aplikasi yang memakai OpenAI SDK, tulis content system sebagai array content parts dan letakkan cache_control pada part-nya. Hostlinku menerjemahkannya ke Anthropic — hanya berlaku untuk model Claude.

curl https://api.hostlinku.com/v1/chat/completions \
  -H "Authorization: Bearer sk-isi-api-key-kamu" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "messages": [
      {
        "role": "system",
        "content": [
          {
            "type": "text",
            "text": "<instruksi panjang + dokumen referensi di sini>",
            "cache_control": { "type": "ephemeral" }
          }
        ]
      },
      { "role": "user", "content": "Ringkas bagian 3 dokumen di atas." }
    ]
  }'

Token cache muncul di usage.prompt_tokens_details:

"usage": {
  "prompt_tokens": 3583,
  "completion_tokens": 4,
  "prompt_tokens_details": {
    "cached_tokens": 3569,
    "cache_write_tokens": 0
  }
}

Python (OpenAI SDK)

from openai import OpenAI

client = OpenAI(base_url="https://api.hostlinku.com/v1", api_key="sk-isi-api-key-kamu")

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[
        {
            "role": "system",
            "content": [
                {
                    "type": "text",
                    "text": DOKUMEN_REFERENSI,
                    "cache_control": {"type": "ephemeral"},
                }
            ],
        },
        {"role": "user", "content": "Ringkas bagian 3."},
    ],
)
print(resp.usage.prompt_tokens_details.cached_tokens)

Claude Code, Cursor, Cline, dan agent

Tool-tool ini sudah memasang cache_control sendiri pada system prompt dan definisi tools mereka. Begitu kamu mengarahkan base URL ke Hostlinku (lihat Integrasi IDE & Agent), penghematan berjalan otomatis — tidak perlu konfigurasi tambahan. Di log kamu akan melihat Cache Read yang besar pada hampir setiap request lanjutan dalam satu sesi.

Cek di console

Buka Log Permintaan di console. Setiap baris menampilkan Input, Output, Cache Read, Cache Write, dan biaya final. Cara cepat memastikan cache bekerja:

Kirim request pertama

Pastikan cache_control terpasang dan blok ≥ ambang minimum. Di log, kolom Cache Write terisi dan Cache Read = 0.

Kirim request kedua dalam 5 menit

Dengan prefix yang identik. Kolom Cache Read kini terisi, Cache Write = 0, dan biaya baris itu jauh lebih kecil.

Bandingkan biaya

Selisih kedua baris itulah penghematanmu. Bila Cache Read tetap 0, cek: apakah ada bagian sebelum penanda yang berubah (timestamp, ID sesi, urutan tools), atau blok terlalu kecil.

Dukungan model

ModelPrompt caching
Semua claude-*Ya — cache_control eksplisit (kedua format di atas)
gpt-*, deepseek-*, glm-*, kimi-*, qwen*, minimax-*, mimo-*Belum tersedia lewat Hostlinku saat ini; request tetap berjalan normal, cached_tokens akan 0

Pertanyaan lain? Lihat FAQ atau hubungi Bantuan.