All Products
Search
Document Center

Alibaba Cloud Model Studio:Context Cache

Last Updated:Sep 02, 2026

Permintaan inferensi untuk model besar sering kali berisi input yang tumpang tindih, seperti dalam percakapan multi-putaran atau rangkaian pertanyaan tentang buku yang sama. Context Cache mengurangi komputasi berulang dengan menyimpan awalan umum dari permintaan tersebut di cache, sehingga meningkatkan kecepatan respons dan menurunkan biaya penggunaan tanpa memengaruhi kualitas respons.

Untuk mendukung berbagai skenario, Context Cache menyediakan dua mode. Pilih mode berdasarkan kebutuhan Anda terkait kenyamanan, determinisme, dan biaya:

  • Explicit cache: Mode yang diaktifkan secara manual. Anda membuat cache untuk konten tertentu guna memastikan hit yang deterministik selama periode validitas 5 menit. Token yang digunakan untuk membuat cache biasanya dikenai biaya sebesar 125% dari harga standar token input, sedangkan hit cache berikutnya biasanya hanya dikenai biaya sebesar 10% dari harga tersebut. Untuk informasi harga spesifik, lihat Billing.
  • Implicit cache: Mode otomatis ini tidak memerlukan konfigurasi tambahan dan tidak dapat dinonaktifkan, ideal untuk skenario yang mengutamakan kenyamanan. Sistem secara otomatis mengidentifikasi dan menyimpan awalan umum dari permintaan di cache, tetapi probabilitas hit tidak dijamin. Bagian input yang dilayani dari cache biasanya dikenai biaya sebesar 20% dari harga standar token input. Untuk informasi harga spesifik, lihat Billing.

Item

Explicit cache

Implicit cache

Dampak terhadap kualitas respons

Tidak ada

Tidak ada

Biaya token pembuatan cache

Biasanya 125% dari harga standar token input

100% dari harga standar token input

Biaya token input yang di-cache

Biasanya 10% dari harga standar token input (lihat Billing)

Biasanya 20% dari harga standar token input (lihat Billing)

Token minimum untuk caching

1024

256

Periode validitas cache

5 menit (diatur ulang saat terjadi hit)

Tidak pasti. Sistem secara berkala membersihkan data cache lama yang tidak digunakan.

CatatanExplicit cache dan implicit cache saling eksklusif.

CatatanPenerapan Provisioned Throughput Unit (PTU) juga mendukung context cache. Saat terjadi cache hit, sistem menghitung penggunaan PTU dengan faktor diskon cache. Untuk informasi lebih lanjut, lihat Input panjang dan caching untuk PTU.

CatatanUntuk antarmuka OpenAI Chat Completions, DashScope, dan yang kompatibel dengan Anthropic, gunakan Responses API dengan session cache untuk mengurangi latensi dan biaya inferensi. Lihat session cache untuk detailnya.

Explicit cache

Berbeda dengan implicit cache, explicit cache memerlukan pembuatan eksplisit dan menimbulkan overhead, tetapi memberikan rasio hit cache yang lebih tinggi serta latensi akses yang lebih rendah.

Cara kerja

Tambahkan penanda "cache_control": {"type": "ephemeral"} ke array messages. Sistem kemudian mencari mundur dari setiap penanda cache_control dan memeriksa hingga 20 blok content sebelumnya untuk menemukan cache hit.

Satu permintaan mendukung hingga empat penanda cache.

  • Cache miss

    Jika terjadi cache miss, sistem membuat blok cache baru dari konten antara awal array messages dan penanda cache_control. Blok cache baru memiliki periode validitas 5 menit.

    Sistem membuat cache setelah model menghasilkan respons. Tunggu hingga permintaan pembuatan selesai sebelum mencoba mengakses cache tersebut.

    Blok cache berisi minimal 1.024 token.

  • Cache hit

    Jika terjadi cache hit, sistem memilih awalan yang paling panjang sesuai dan mengatur ulang periode validitas blok cache yang sesuai menjadi 5 menit.

Contoh berikut menunjukkan cara kerjanya:

  1. Kirim permintaan pertama: Kirim pesan sistem berisi teks A (lebih dari 1.024 token), dan tambahkan penanda cache:
[{"role": "system", "content": [{"type": "text", "text": A, "cache_control": {"type": "ephemeral"}}]}]

Sistem membuat blok cache pertama, yang disebut blok cache A. 2. Kirim permintaan kedua: Kirim permintaan dengan struktur berikut:

[
    {"role": "system", "content": A},
    <Other messages>
    {"role": "user","content": [{"type": "text", "text": B, "cache_control": {"type": "ephemeral"}}]}
]
  • Jika terdapat 20 atau kurang "Other messages," permintaan akan mengenai blok cache A dan mengatur ulang periode validitasnya menjadi 5 menit. Sistem juga membuat blok cache baru berdasarkan A, pesan lainnya, dan B.
  • Jika terdapat lebih dari 20 "Other messages," permintaan tidak mengenai blok cache A. Sistem tetap membuat blok cache baru berdasarkan konteks lengkap (A, pesan lainnya, dan B).

Model yang didukung

Singapore

Model berikut tersedia dalam cakupan penerapan Internasional.

Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3.6-max-preview, qwen3-max

Qwen Open-source: qwen3.8-2.4t-a95b, qwen3.8-27b

Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen3.6-plus, qwen3.5-plus, qwen3.5-plus-2026-04-20, qwen-plus

Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen3.6-flash, qwen3.5-flash, qwen-flash

Qwen Coder: qwen3-coder-plus, qwen3-coder-flash

Qwen VL: qwen3-vl-plus, qwen3-vl-flash

DeepSeek: deepseek-v3.2

China (Beijing)

Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3.6-max-preview, qwen3-max

Qwen Open-source: qwen3.8-2.4t-a95b, qwen3.8-27b

Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen3.6-plus, qwen3.5-plus, qwen3.5-plus-2026-04-20, qwen-plus

Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen3.6-flash, qwen3.5-flash, qwen-flash

Qwen Coder: qwen3-coder-plus, qwen3-coder-flash

Qwen VL: qwen3-vl-plus, qwen3-vl-flash

DeepSeek: deepseek-v3.2

Kimi: kimi-k2.7-code, kimi-k2.6, kimi-k2.5

GLM: glm-5.1

Jerman (Frankfurt)

Model yang didukung bervariasi tergantung pada cakupan penerapan layanan.

  • Cakupan global:

    Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3-max

    Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen3.6-plus, qwen3.5-plus, qwen-plus

    Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen3.6-flash, qwen3.5-flash, qwen-flash

    Qwen VL: qwen3-vl-plus

    Qwen Coder: qwen3-coder-plus, qwen3-coder-flash

    Kimi: kimi-k2.7-code, kimi-k2.5

  • Cakupan UE:

    Qwen Max: qwen3-max

    Qwen Plus: qwen-plus

    Qwen Flash: qwen3.6-flash, qwen3.5-flash

    Qwen VL: qwen3-vl-plus, qwen3-vl-flash

Hong Kong (China)

Model yang didukung bervariasi tergantung pada cakupan penerapan layanan.

  • Cakupan global:

    Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3-max

    Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen3.6-plus, qwen3.5-plus, qwen-plus

    Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen3.6-flash, qwen3.5-flash, qwen-flash

    Kimi: kimi-k2.7-code

  • Cakupan Hong Kong (China):

    Qwen Max: qwen3-max

    Qwen Plus: qwen-plus

    Qwen Flash: qwen3.6-flash, qwen3.5-flash

    Qwen VL: qwen3-vl-plus

Jepang (Tokyo)

Model yang didukung bervariasi tergantung pada cakupan penerapan layanan.

  • Cakupan Jepang:

    Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26

  • Cakupan global:

    Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3-max

    Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen3.6-plus, qwen3.5-plus, qwen-plus

    Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen3.6-flash, qwen3.5-flash, qwen-flash

    Kimi: kimi-k2.7-code

AS (Virginia)

Model berikut tersedia dalam cakupan penerapan AS.

  • Cakupan global:

    Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3-max

    Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, kimi-k2.7-code

  • Cakupan AS:

    Qwen Max: qwen3.7-max-us

    Qwen Plus: qwen3.7-plus-us

    Qwen Flash: qwen3.6-flash-us

Memulai cepat

Contoh berikut menunjukkan mekanisme pembuatan blok cache dan cache hit untuk protokol yang kompatibel dengan OpenAI, DashScope, dan Anthropic.

Kompatibel dengan OpenAI

from openai import OpenAI
import os

client = OpenAI(
    # Jika variabel lingkungan tidak diatur, ganti baris berikut dengan: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Jika Anda menggunakan model di China (Beijing), ganti base_url dengan: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

# Konten repositori kode tiruan. Panjang prompt yang dapat di-cache minimal adalah 1.024 token.
long_text_content = "<Your Code Here>" * 400

# Fungsi untuk membuat permintaan
def get_completion(user_input):
    messages = [
        {
            "role": "system",
            "content": [
                {
                    "type": "text",
                    "text": long_text_content,
                    # Tempatkan penanda cache_control di sini. Ini membuat blok cache yang berisi semua konten dari awal array messages hingga titik ini.
                    "cache_control": {"type": "ephemeral"},
                }
            ],
        },
        # Pertanyaan pengguna berbeda untuk setiap permintaan.
        {
            "role": "user",
            "content": user_input,
        },
    ]
    completion = client.chat.completions.create(
        # Pilih model yang mendukung explicit cache.
        model="qwen3.8-max",
        messages=messages,
    )
    return completion

# Permintaan pertama
first_completion = get_completion("Apa isi kode ini?")
print(f"Token pembuatan cache permintaan pertama: {first_completion.usage.prompt_tokens_details.cache_creation_input_tokens}")
print(f"Token yang di-cache permintaan pertama: {first_completion.usage.prompt_tokens_details.cached_tokens}")
print("=" * 20)
# Permintaan kedua. Konten kode sama, tetapi pertanyaannya berbeda.
second_completion = get_completion("Bagaimana kode ini dapat dioptimalkan?")
print(f"Token pembuatan cache permintaan kedua: {second_completion.usage.prompt_tokens_details.cache_creation_input_tokens}")
print(f"Token yang di-cache permintaan kedua: {second_completion.usage.prompt_tokens_details.cached_tokens}")

DashScope

import os
from dashscope import MultiModalConversation
# URL berikut untuk Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"

# Konten repositori kode tiruan. Panjang prompt yang dapat di-cache minimal adalah 1.024 token.
long_text_content = "<Your Code Here>" * 400

# Fungsi untuk membuat permintaan
def get_completion(user_input):
    messages = [
        {
            "role": "system",
            "content": [
                {
                    "type": "text",
                    "text": long_text_content,
                    # Tempatkan penanda cache_control di sini. Ini membuat blok cache yang berisi semua konten dari awal array messages hingga titik ini.
                    "cache_control": {"type": "ephemeral"},
                }
            ],
        },
        # Pertanyaan pengguna berbeda untuk setiap permintaan.
        {
            "role": "user",
            "content": [{"text": user_input}],
        },
    ]
    response = MultiModalConversation.call(
        # Jika variabel lingkungan tidak diatur, gunakan langsung Kunci API Model Studio Anda: api_key = "sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        model="qwen3.8-max",
        messages=messages,
    )
    return response

# Permintaan pertama
first_completion = get_completion("Apa isi kode ini?")
print(f"Token pembuatan cache permintaan pertama: {first_completion.usage.prompt_tokens_details['cache_creation_input_tokens']}")
print(f"Token yang di-cache permintaan pertama: {first_completion.usage.prompt_tokens_details['cached_tokens']}")
print("=" * 20)
# Permintaan kedua. Konten kode sama, tetapi pertanyaannya berbeda.
second_completion = get_completion("Bagaimana kode ini dapat dioptimalkan?")
print(f"Token pembuatan cache permintaan kedua: {second_completion.usage.prompt_tokens_details['cache_creation_input_tokens']}")
print(f"Token yang di-cache permintaan kedua: {second_completion.usage.prompt_tokens_details['cached_tokens']}")
// Versi minimum SDK Java: 2.21.6
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.MessageContentText;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;

import java.util.Arrays;
import java.util.Collections;

public class Main {
    private static final String MODEL = "qwen3-coder-plus";
    // Konten repositori kode tiruan (diulang 400 kali untuk memastikan melebihi 1.024 token).
    private static final String LONG_TEXT_CONTENT = generateLongText(400);
    private static String generateLongText(int repeatCount) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < repeatCount; i++) {
            sb.append("<Your Code Here>");
        }
        return sb.toString();
    }
    private static GenerationResult getCompletion(String userQuestion)
            throws NoApiKeyException, ApiException, InputRequiredException {
        // URL berikut untuk Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
        Generation gen = new Generation("http", "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1");

        // Bangun pesan sistem dengan kontrol cache.
        MessageContentText systemContent = MessageContentText.builder()
                .type("text")
                .text(LONG_TEXT_CONTENT)
                .cacheControl(MessageContentText.CacheControl.builder()
                        .type("ephemeral") // Atur jenis cache.
                        .build())
                .build();

        Message systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .contents(Collections.singletonList(systemContent))
                .build();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content(userQuestion)
                .build();

        // Bangun parameter permintaan.
        GenerationParam param = GenerationParam.builder()
                .model(MODEL)
                .messages(Arrays.asList(systemMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        return gen.call(param);
    }

    private static void printCacheInfo(GenerationResult result, String requestLabel) {
        System.out.printf("%s token pembuatan cache: %d%n", requestLabel, result.getUsage().getPromptTokensDetails().getCacheCreationInputTokens());
        System.out.printf("%s token yang di-cache: %d%n", requestLabel, result.getUsage().getPromptTokensDetails().getCachedTokens());
    }

    public static void main(String[] args) {
        try {
            // Permintaan pertama
            GenerationResult firstResult = getCompletion("Apa isi kode ini?");
            printCacheInfo(firstResult, "Permintaan pertama");
            System.out.println(new String(new char[20]).replace('\0', '='));            // Permintaan kedua
            GenerationResult secondResult = getCompletion("Bagaimana kode ini dapat dioptimalkan?");
            printCacheInfo(secondResult, "Permintaan kedua");
        } catch (NoApiKeyException | ApiException | InputRequiredException e) {
            System.err.println("Panggilan API gagal: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Kompatibel dengan Anthropic

import anthropic
import os

api_key = os.getenv("DASHSCOPE_API_KEY")
client = anthropic.Anthropic(
    # Jika variabel lingkungan tidak diatur, ganti baris berikut dengan: api_key="sk-xxx"
    api_key=api_key,
    # Jika Anda menggunakan model di China (Beijing), ganti base_url dengan: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/apps/anthropic
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/apps/anthropic",
    default_headers={"Authorization": f"Bearer {api_key}"},
)

# Konten repositori kode tiruan. Panjang prompt yang dapat di-cache minimal adalah 1.024 token.
long_text_content = "<Your Code Here>" * 400

# Fungsi untuk membuat permintaan
def get_completion(user_input):
    response = client.messages.create(
        # Pilih model yang mendukung explicit cache.
        model="qwen3.8-max",
        max_tokens=1024,
        system=[
            {
                "type": "text",
                "text": long_text_content,
                # Tempatkan penanda cache_control di sini untuk membuat blok cache dari konten teks sistem. Penanda ini juga dapat ditempatkan di `messages`.
                "cache_control": {"type": "ephemeral"},
            }
        ],
        messages=[
            # Pertanyaan pengguna berbeda untuk setiap permintaan.
            {"role": "user", "content": user_input},
        ],
    )
    return response

# Permintaan pertama
first_completion = get_completion("Apa isi kode ini?")
print(f"Token pembuatan cache permintaan pertama: {first_completion.usage.cache_creation_input_tokens}")
print(f"Token yang di-cache permintaan pertama: {first_completion.usage.cache_read_input_tokens}")
print("=" * 20)
# Permintaan kedua. Konten kode sama, tetapi pertanyaannya berbeda.
second_completion = get_completion("Bagaimana kode ini dapat dioptimalkan?")
print(f"Token pembuatan cache permintaan kedua: {second_completion.usage.cache_creation_input_tokens}")
print(f"Token yang di-cache permintaan kedua: {second_completion.usage.cache_read_input_tokens}")

Menambahkan penanda cache_control mengaktifkan explicit cache untuk konten repositori kode tiruan. Untuk permintaan berikutnya yang menanyakan konten ini, sistem menggunakan kembali blok cache, sehingga menghilangkan komputasi ulang. Hal ini membuat permintaan yang mengenai cache lebih cepat dan lebih murah dibandingkan permintaan awal yang membuat cache.

Token pembuatan cache permintaan pertama: 1605
Token yang di-cache permintaan pertama: 0
====================
Token pembuatan cache permintaan kedua: 0
Token yang di-cache permintaan kedua: 1605

Kontrol detail halus dengan beberapa penanda cache

Dalam skenario kompleks, prompt sering terdiri dari beberapa bagian dengan frekuensi penggunaan ulang yang berbeda. Anda dapat menggunakan beberapa penanda cache untuk mencapai kontrol detail halus.

Sebagai contoh, prompt untuk agen layanan pelanggan cerdas biasanya mencakup:

  • Persona sistem: Sangat stabil dan jarang berubah.
  • Pengetahuan eksternal: Diperoleh dari basis pengetahuan atau melalui kueri tool dan mungkin tidak berubah selama satu percakapan.
  • Riwayat percakapan: Berkembang secara dinamis.
  • Pertanyaan saat ini: Berbeda untuk setiap permintaan.

Jika Anda menyimpan seluruh prompt sebagai satu unit, perubahan kecil apa pun, seperti pembaruan pada pengetahuan eksternal, dapat menyebabkan cache miss.

Anda dapat menambahkan hingga empat penanda cache dalam satu permintaan untuk membuat blok cache terpisah bagi bagian-bagian berbeda dari prompt. Hal ini meningkatkan rasio hit cache dan memungkinkan kontrol detail halus.

Billing

Explicit cache hanya memengaruhi cara token input ditagih. Aturannya adalah sebagai berikut:

  • Pembuatan cache: Konten yang digunakan untuk membuat cache baru ditagih sebesar 125% dari harga standar token input. Jika konten untuk cache baru mencakup cache yang sudah ada sebagai awalan, hanya bagian tambahannya yang ditagih untuk pembuatan cache (yaitu, jumlah token cache baru dikurangi jumlah token cache yang sudah ada).

    Sebagai contoh, jika Anda memiliki cache yang sudah ada sebesar 1.200 token (Cache A) dan Anda menggunakan permintaan baru untuk menyimpan cache 1.500 token konten (Konten AB), 1.200 token pertama ditagih sebagai cache hit sebesar 10% dari harga standar. 300 token baru ditagih untuk pembuatan cache sebesar 125% dari harga standar.

    Parameter cache_creation_input_tokens menentukan jumlah token yang digunakan untuk pembuatan cache.

  • Cache hit: Ditagih sebesar 10% dari harga standar token input.

    Parameter cached_tokens menentukan jumlah token yang di-cache.

  • Token lainnya: Token yang bukan merupakan cache hit maupun digunakan untuk pembuatan cache ditagih dengan harga standar token input.

  • Pengecualian: Harga cache hit eksplisit untuk qwen3.8-max, qwen3.8-flash, dan qwen3.8-2.4t-a95b bukan 10% dari harga standar token input. Untuk informasi harga spesifik, lihat konsol Model Studio. (Harga pembuatan cache tetap 125% dari harga standar.)

Konten yang dapat di-cache

Hanya jenis pesan berikut dalam array messages yang mendukung penambahan penanda cache:

  • Pesan sistem

    CatatanUntuk pemanggilan fungsi, jika permintaan mencakup parameter tools, definisi tool dimasukkan dalam pesan sistem untuk perhitungan cache. Definisi tool tidak dapat di-cache secara independen. Penanda cache yang ditambahkan ke definisi tool diabaikan, karena hanya dapat ditambahkan ke konten pesan.

  • Pesan pengguna

    Saat membuat cache dengan model qwen3-vl-plus, Anda dapat menempatkan penanda cache_control setelah konten multimodal atau teks. Posisinya tidak memengaruhi cara seluruh pesan pengguna di-cache.

  • Pesan asisten

  • Pesan tool (hasil eksekusi tool)

Sebagai contoh, untuk pesan sistem, Anda harus mengubah bidang content menjadi array dan menambahkan bidang cache_control:

{
  "role": "system",
  "content": [
    {
      "type": "text",
      "text": "<your specified prompt>",
      "cache_control": {
        "type": "ephemeral"
      }
    }
  ]
}

Struktur ini juga berlaku untuk jenis pesan lain dalam array messages.

Batasan cache

  • Panjang prompt minimum yang dapat di-cache adalah 1.024 token.

  • Cache menggunakan strategi pencocokan awalan mundur. Cache miss terjadi jika konten yang cocok dan pesan dengan penanda cache_control dipisahkan oleh lebih dari 20 blok konten.

  • type hanya dapat diatur ke ephemeral, yang membuat cache dengan periode validitas 5 menit.

  • Satu permintaan mendukung hingga empat penanda cache.

    Jika lebih dari empat penanda cache disediakan, hanya empat penanda terakhir yang berlaku.

Optimasi cache untuk Function Calling

Definisi tool diserialisasi menjadi string JSON untuk caching. Untuk mencegah invalidasi cache, definisi ini harus identik di semua permintaan. Perhatikan hal berikut:

  • Urutan tool konsisten: Urutan tool dalam array tools harus konsisten di semua permintaan.
  • Urutan bidang konsisten: Urutan bidang JSON dalam tool yang sama harus konsisten di semua permintaan.
  • Struktur bidang konsisten: Jangan menghilangkan atau menambahkan bidang, meskipun kosong atau opsional.

Mengoptimalkan struktur pesan untuk pemanggilan tool paralel

Saat Anda menggunakan pemanggilan tool paralel, model mengembalikan beberapa tool_calls dalam satu respons. Jika Anda mengirim setiap hasil tool sebagai pesan tool terpisah, jumlah blok konten dalam array messages meningkat pesat. Ketika lebih dari 20 blok konten memisahkan penanda cache_control dari konten sebelumnya, jendela pencarian mundur tidak dapat mencapai blok-blok tersebut, menyebabkan cache miss.

Untuk mengatasi hal ini, gabungkan pesan tool berurutan dengan peran yang sama menjadi satu pesan tool dengan beberapa blok konten sebelum mengirim permintaan berikutnya. Hal ini mengurangi jumlah total blok konten dan menjaga konten yang ingin Anda cache tetap berada dalam jendela pencarian mundur 20 blok.

Sebelum optimasi (pesan tool terpisah — tingkat hit cache lebih rendah):


# Setelah model mengembalikan tool_calls paralel, kirim setiap hasil sebagai pesan terpisah
messages.append(assistant_message)  # pesan asisten yang berisi tool_calls paralel
# Setiap hasil tool adalah pesannya sendiri — meningkatkan jumlah blok konten sebanyak N
messages.append({"role": "tool", "tool_call_id": "call_1", "content": "result_1"})
messages.append({"role": "tool", "tool_call_id": "call_2", "content": "result_2"})

Setelah optimasi (pesan tool digabung — tingkat hit cache lebih tinggi):


# Setelah model mengembalikan tool_calls paralel, gabungkan semua hasil menjadi satu pesan
messages.append(assistant_message)  # pesan asisten yang berisi tool_calls paralel
# Gabungkan semua hasil tool menjadi satu pesan dengan beberapa blok konten
messages.append({
    "role": "tool",
    "tool_call_id": "call_1",
    "content": [
        {"type": "text", "text": "result_1"},
        {"type": "text", "text": "result_2", "tool_call_id": "call_2"},
    ],
})

Untuk meningkatkan lebih lanjut tingkat hit cache, tempatkan penanda cache_control pada posisi stabil dalam array messages (misalnya, pada pesan sistem atau konten lain yang jarang berubah). Satu permintaan mendukung hingga empat penanda cache.

Contoh penggunaan

Menanyakan teks panjang

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ini adalah base_url untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan WorkspaceId aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

# Konten repositori kode tiruan
long_text_content = "<Your Code Here>" * 400

# Fungsi untuk mengirim permintaan
def get_completion(user_input):
    messages = [
        {
            "role": "system",
            "content": [
                {
                    "type": "text",
                    "text": long_text_content,
                    # Tempatkan penanda cache_control di sini untuk membuat cache dari awal prompt hingga akhir objek konten ini (konten repositori kode tiruan).
                    "cache_control": {"type": "ephemeral"},
                }
            ],
        },
        {
            "role": "user",
            "content": user_input,
        },
    ]
    completion = client.chat.completions.create(
        # Pilih model yang mendukung explicit cache
        model="qwen3.8-max",
        messages=messages,
    )
    return completion

# Permintaan pertama
first_completion = get_completion("Apa isi kode ini?")
created_cache_tokens = first_completion.usage.prompt_tokens_details.cache_creation_input_tokens
print(f"Permintaan pertama - Token pembuatan cache: {created_cache_tokens}")
hit_cached_tokens = first_completion.usage.prompt_tokens_details.cached_tokens
print(f"Permintaan pertama - Token hit cache: {hit_cached_tokens}")
print(f"Permintaan pertama - Token tidak di-cache: {first_completion.usage.prompt_tokens-created_cache_tokens-hit_cached_tokens}")
print("=" * 20)
# Permintaan kedua dengan konten kode yang sama tetapi pertanyaan berbeda
second_completion = get_completion("Apa saja kemungkinan optimasi untuk kode ini?")
created_cache_tokens = second_completion.usage.prompt_tokens_details.cache_creation_input_tokens
print(f"Permintaan kedua - Token pembuatan cache: {created_cache_tokens}")
hit_cached_tokens = second_completion.usage.prompt_tokens_details.cached_tokens
print(f"Permintaan kedua - Token hit cache: {hit_cached_tokens}")
print(f"Permintaan kedua - Token tidak di-cache: {second_completion.usage.prompt_tokens-created_cache_tokens-hit_cached_tokens}")

Contoh ini menyimpan konten repositori kode sebagai awalan. Permintaan berikutnya mengajukan pertanyaan berbeda tentang repositori yang sama.

Permintaan pertama - Token pembuatan cache: 1605
Permintaan pertama - Token hit cache: 0
Permintaan pertama - Token tidak di-cache: 13
====================
Permintaan kedua - Token pembuatan cache: 0
Permintaan kedua - Token hit cache: 1605
Permintaan kedua - Token tidak di-cache: 15

Untuk memastikan kinerja model, sistem menambahkan beberapa token internal. Token ini ditagih dengan harga input standar. Untuk informasi lebih lanjut, lihat FAQ.

Alat Caching untuk Pemanggilan Fungsi

Saat menyimpan pesan sistem untuk Function Calling, parameter tools di-cache sebagai bagian dari pesan sistem. Pastikan definisi tool identik untuk setiap permintaan (termasuk urutan tool, urutan bidang, dan struktur bidang), dan tambahkan penanda cache_control pada content terakhir dalam messages.

Berikut ini alur lengkapnya: permintaan pertama membuat cache, dan permintaan kedua mengenai cache.

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

# Konten repositori kode tiruan, memastikan melebihi ambang batas minimum 1.024 token untuk explicit cache.
long_text_content = "<Your Code Here>" * 400

# Definisi tool: Pastikan identik untuk setiap permintaan (urutan tool, urutan bidang, dan struktur bidang).
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Dapatkan informasi cuaca saat ini untuk kota yang ditentukan.",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "Nama kota, misalnya Beijing, Shanghai, atau New York."
                    },
                    "unit": {
                        "type": "string",
                        "description": "Satuan suhu, 'celsius' atau 'fahrenheit'. Default 'celsius'.",
                        "enum": ["celsius", "fahrenheit"]
                    }
                },
                "required": ["city"],
                "additionalProperties": False
            },
            "strict": True
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "Dapatkan tanggal dan waktu saat ini untuk zona waktu yang ditentukan.",
            "parameters": {
                "type": "object",
                "properties": {
                    "timezone": {
                        "type": "string",
                        "description": "Nama zona waktu IANA, misalnya 'Asia/Shanghai' atau 'America/New_York'. Default 'Asia/Shanghai'."
                    }
                },
                "required": [],
                "additionalProperties": False
            },
            "strict": True
        }
    },
    {
        "type": "function",
        "function": {
            "name": "convert_currency",
            "description": "Konversi jumlah mata uang berdasarkan nilai tukar real-time.",
            "parameters": {
                "type": "object",
                "properties": {
                    "from_currency": {
                        "type": "string",
                        "description": "Kode ISO 4217 mata uang sumber, misalnya CNY, USD, atau EUR."
                    },
                    "to_currency": {
                        "type": "string",
                        "description": "Kode ISO 4217 mata uang tujuan."
                    },
                    "amount": {
                        "type": "number",
                        "description": "Jumlah yang akan dikonversi."
                    }
                },
                "required": ["from_currency", "to_currency", "amount"],
                "additionalProperties": False
            },
            "strict": True
        }
    }
]

def get_completion(user_input, messages=None):
    if messages is None:
        messages = [
            {
                "role": "system",
                "content": [
                    {
                        "type": "text",
                        "text": long_text_content,
                        # Tempatkan penanda cache_control di sini. Ini membuat blok cache dengan semua konten dari awal array messages hingga objek konten saat ini.
                        # Penanda cache_control harus berada pada 'content' pesan, bukan pada 'tools'.
                        "cache_control": {"type": "ephemeral"},
                    }
                ],
            }
        ]

    messages.append({"role": "user", "content": user_input})

    completion = client.chat.completions.create(
        # Pilih model yang mendukung explicit cache
        model="qwen3.7-plus",
        messages=messages,
        tools=tools,
        # Nonaktifkan mode berpikir
        extra_body={"enable_thinking": False},
    )
    return completion

# Permintaan pertama: Buat cache
print("=== Permintaan pertama (Buat cache) ===")
first_completion = get_completion("Bagaimana cuaca di Beijing sekarang?")
usage = first_completion.usage
print(f"Token Prompt: {usage.prompt_tokens}")
print(f"Token pembuatan cache: {usage.prompt_tokens_details.cache_creation_input_tokens}")
print(f"Token hit cache: {usage.prompt_tokens_details.cached_tokens}")
print(f"Tool yang dipilih model: {[t.function.name for t in first_completion.choices[0].message.tool_calls or []]}")
print()

# Permintaan kedua: Mengenai cache dengan pesan sistem yang sama tetapi pertanyaan berbeda
print("=== Permintaan kedua (Cache hit) ===")
messages = [
    {
        "role": "system",
        "content": [
            {
                "type": "text",
                "text": long_text_content,
                "cache_control": {"type": "ephemeral"},
            }
        ],
    }
]
second_completion = get_completion("Bagaimana cuaca di Shanghai sekarang?", messages=messages)
usage = second_completion.usage
print(f"Token Prompt: {usage.prompt_tokens}")
print(f"Token pembuatan cache: {usage.prompt_tokens_details.cache_creation_input_tokens}")
print(f"Token hit cache: {usage.prompt_tokens_details.cached_tokens}")
print(f"Tool yang dipilih model: {[t.function.name for t in second_completion.choices[0].message.tool_calls or []]}")

Menjalankan kode menghasilkan output seperti berikut:

=== Permintaan pertama (Buat cache) ===
 Token Prompt: 2174
 Token pembuatan cache: 2156
 Token hit cache: 0
 Tool yang dipilih model: ['get_weather']

 === Permintaan kedua (Cache hit) ===
 Token Prompt: 2174
 Token pembuatan cache: 0
 Token hit cache: 2156
 Tool yang dipilih model: ['get_weather']

Percakapan multi-putaran berkelanjutan

Dalam skenario percakapan multi-putaran khas, tambahkan penanda cache pada objek konten terakhir dalam array messages untuk setiap permintaan. Mulai dari putaran kedua, setiap permintaan mengenai dan menyegarkan cache dari putaran sebelumnya sekaligus membuat blok cache baru untuk putaran saat ini.

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ini adalah base_url untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan WorkspaceId aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

system_prompt = "Anda adalah orang yang cerdas." * 400
messages = [{"role": "system", "content": system_prompt}]

def get_completion(messages):
    completion = client.chat.completions.create(
        model="qwen3.8-max",
        messages=messages,
    )
    return completion

while True:
    user_input = input("Pengguna: ")
    messages.append({"role": "user", "content": [{"type": "text", "text": user_input, "cache_control": {"type": "ephemeral"}}]})
    completion = get_completion(messages)
    print(f"[Respons AI] {completion.choices[0].message.content}")
    messages.append(completion.choices[0].message)
    created_cache_tokens = completion.usage.prompt_tokens_details.cache_creation_input_tokens
    hit_cached_tokens = completion.usage.prompt_tokens_details.cached_tokens
    uncached_tokens = completion.usage.prompt_tokens - created_cache_tokens - hit_cached_tokens
    print(f"[Info Cache] Token pembuatan cache: {created_cache_tokens}")
    print(f"[Info Cache] Token hit cache: {hit_cached_tokens}")
    print(f"[Info Cache] Token tidak di-cache: {uncached_tokens}")

Jalankan kode untuk memulai percakapan dengan model bahasa besar. Setiap pertanyaan berikutnya mengenai cache yang dibuat pada putaran sebelumnya.

Implicit cache

Model yang didukung

China (Beijing)

  • Model generasi teks
    • Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3-max, qwen3-max-preview, qwen-max
    • Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen-plus
    • Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen-flash
    • Qwen Turbo: qwen-turbo
    • Qwen Coder: qwen3-coder-plus, qwen3-coder-flash
    • Qwen Open-source: qwen3.8-2.4t-a95b, qwen3.8-27b
    • DeepSeek: deepseek-v4-pro, deepseek-v4-flash, deepseek-v3.2, deepseek-v3.1, deepseek-v3, deepseek-r1
    • Kimi: kimi-k3, kimi-k2.7-code, kimi-k2.6, kimi-k2.5, kimi-k2-thinking, Moonshot-Kimi-K2-Instruct
    • GLM: glm-5.2, glm-5.2-fast-preview, glm-5.1, glm-5, glm-4.7, glm-4.6
    • MiniMax: MiniMax-M2.5
  • Model pemahaman visual
    • Qwen VL: qwen3-vl-plus, qwen3-vl-flash, qwen-vl-max, qwen-vl-plus

Singapore

Model berikut berada dalam cakupan penerapan Internasional.

  • Model generasi teks
    • Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3-max, qwen3-max-preview, qwen-max
    • Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen-plus
    • Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen-flash
    • Qwen Turbo: qwen-turbo
    • Qwen Coder: qwen3-coder-plus, qwen3-coder-flash
    • Qwen Open-source: qwen3.8-2.4t-a95b, qwen3.8-27b
    • DeepSeek: deepseek-v4-pro, deepseek-v4-flash, deepseek-v3.2
    • GLM (diterapkan di Alibaba Cloud Model Studio): glm-5.1
    • Kimi (diterapkan di Alibaba Cloud Model Studio): kimi-k3, kimi-k2.7-code
    • GLM (diterapkan oleh Zhipu AI): ZHIPU/GLM-5.3, ZHIPU/GLM-5.2
  • Model pemahaman visual
    • Qwen VL: qwen3-vl-plus, qwen3-vl-flash, qwen-vl-max, qwen-vl-plus

AS (Virginia)

Model yang didukung bervariasi berdasarkan cakupan penerapan layanan.

  • Cakupan penerapan layanan global:
    • Model generasi teks

      • Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3-max
      • Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen-plus
      • Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen-flash
      • Qwen Coder: qwen3-coder-plus, qwen3-coder-flash
      • DeepSeek: deepseek-v4-pro, deepseek-v4-flash
      • Kimi (diterapkan di Alibaba Cloud Model Studio): kimi-k2.7-code, kimi-k2.5
      • GLM (diterapkan di Alibaba Cloud Model Studio): glm-5.2
    • Model pemahaman visual

      • Qwen VL: qwen3-vl-plus, qwen3-vl-flash
  • Cakupan penerapan layanan AS:
    • Model generasi teks

      • Qwen Max: qwen3.7-max-us
      • Qwen Plus: qwen-plus-us, qwen3.7-plus-us
      • Qwen Flash: qwen-flash-us
    • Model pemahaman visual

      • Qwen VL: qwen3-vl-flash-us

Jerman (Frankfurt)

Model yang didukung bervariasi berdasarkan cakupan penerapan layanan.

  • Cakupan penerapan layanan global:
    • Model generasi teks

      • Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3-max
      • Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen-plus
      • Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen-flash
      • Qwen Coder: qwen3-coder-plus, qwen3-coder-flash
      • DeepSeek: deepseek-v4-pro, deepseek-v4-flash
      • Kimi (diterapkan di Alibaba Cloud Model Studio): kimi-k3, kimi-k2.7-code, kimi-k2.5
      • GLM (diterapkan di Alibaba Cloud Model Studio): glm-5.2
    • Model pemahaman visual

      • Qwen VL: qwen3-vl-plus, qwen3-vl-flash
  • Cakupan penerapan layanan UE:
    • Model generasi teks

      • Qwen Max: qwen3-max
      • Qwen Plus: qwen-plus

      Model pemahaman visual

      • Qwen VL: qwen3-vl-plus, qwen3-vl-flash

China (Hong Kong)

Model yang didukung bervariasi berdasarkan cakupan penerapan layanan.

  • Cakupan penerapan layanan global:
    • Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08
    • Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26
    • Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15
    • GLM (diterapkan di Alibaba Cloud Model Studio): glm-5.2
    • KIMI(diterapkan di Alibaba Cloud Model Studio): kimi-k3, kimi-k2.7-code
  • Cakupan penerapan layanan China (Hong Kong):
    • Model generasi teks

      • Qwen Max: qwen3-max
      • Qwen Plus: qwen-plus
    • Model pemahaman visual

      • Qwen VL: qwen3-vl-plus

Jepang (Tokyo)

Model yang didukung bervariasi berdasarkan cakupan penerapan layanan.

  • Cakupan penerapan layanan Jepang:
    • Model generasi teks

      • Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26
      • DeepSeek (diterapkan di Alibaba Cloud Model Studio): deepseek-v4-pro, deepseek-v4-flash
  • Cakupan penerapan layanan global:
    • Model generasi teks

      • Qwen Max: qwen3.8-max, qwen3.7-max, qwen3.7-max-2026-05-20
      • Qwen Plus: qwen3.7-plus, qwen3.7-plus-2026-05-26
      • Qwen Flash: qwen3.8-flash, qwen3.7-flash, qwen3.7-flash-2026-07-15
      • DeepSeek (diterapkan di Alibaba Cloud Model Studio): deepseek-v4-pro, deepseek-v4-flash
      • GLM (diterapkan di Alibaba Cloud Model Studio): glm-5.1
      • Kimi (diterapkan di Alibaba Cloud Model Studio): kimi-k3, kimi-k2.5, kimi-k2.7-code

Cara kerja

Fitur implicit cache diaktifkan secara otomatis saat permintaan dikirim ke model yang didukung. Sistem bekerja sebagai berikut:

  1. Pencarian: Setelah menerima permintaan, sistem menggunakan pencocokan awalan untuk memeriksa cache guna mencari awalan umum dari konten dalam array messages permintaan.

  2. Keputusan:

    • Jika terjadi cache hit, sistem menggunakan hasil yang di-cache untuk sisa inferensi.
    • Jika terjadi cache miss, sistem memproses permintaan secara normal dan menyimpan awalan prompt di cache untuk permintaan mendatang.

Sistem secara berkala membersihkan data cache yang telah lama tidak digunakan. Probabilitas hit Context Cache tidak 100%. Cache miss dapat terjadi meskipun konteks permintaan identik. Sistem menentukan probabilitas hit spesifik.

CatatanJumlah minimum token yang diperlukan untuk memicu implicit cache adalah sekitar 1.024 untuk model yang dideploy di Alibaba Cloud Model Studio.

Meningkatkan probabilitas cache hit

Cache hit implicit terjadi ketika awalan dari permintaan berbeda memiliki konten duplikat. Untuk meningkatkan probabilitas hit, tempatkan konten duplikat di awal prompt dan konten unik di akhir.

  • Model teks: Sebagai contoh, asumsikan sistem telah menyimpan cache "ABCD". Permintaan untuk "ABE" mungkin mengenai bagian "AB", tetapi permintaan untuk "BCD" tidak akan mengenai.

  • Model pemahaman visual:
    • Untuk mengajukan beberapa pertanyaan tentang gambar atau video yang sama, tempatkan gambar atau video sebelum teks.
    • Untuk mengajukan pertanyaan yang sama tentang gambar atau video berbeda, tempatkan teks sebelum gambar atau video.

Billing

Tidak ada biaya tambahan yang dikenakan untuk mengaktifkan mode implicit cache.

Saat permintaan mengenai cache, token input dari cache hit ditagih sebagai cached_token. Tingkat diskon untuk token ini bervariasi berdasarkan model. Token input yang tidak mengenai cache ditagih sebagai input_token standar. Token output ditagih dengan harga aslinya.

  • Untuk model selain deepseek-v4-pro, qwen3.8-max, qwen3.8-flash, dan qwen3.8-2.4t-a95b: Harga satuan cached_token adalah 20% dari harga satuan input_token.

  • deepseek-v4-pro: Harga satuan cached_token bukan 20% dari harga satuan input_token. Untuk informasi harga spesifik, lihat konsol Model Studio.

  • qwen3.8-max, qwen3.8-flash, dan qwen3.8-2.4t-a95b: Harga satuan cached_token bukan 20% dari harga satuan input_token. Untuk informasi harga spesifik, lihat konsol Model Studio.

  • GLM (diterapkan di Alibaba Cloud Model Studio): 25% untuk glm-5.2 dan glm-5.2-fast-preview, dan 20% untuk semua model seri GLM lainnya.

Contoh: Permintaan berisi 10.000 token input, dan 5.000 di antaranya menghasilkan cache hit. Biaya dihitung sebagai berikut:

  • Token yang tidak mengenai cache (5.000): Ditagih 100% dari harga satuan.
  • Token yang mengenai cache (5.000): Ditagih 20% dari harga satuan.

Total biaya input adalah 60% dari biaya dalam mode tanpa cache: (50% × 100%) + (50% × 20%) = 60%.

image.png

Anda dapat memperoleh jumlah token yang mengenai cache dari atribut cached_tokens dalam respons.

Panggilan yang dilakukan menggunakan metode OpenAI-compatible - Batch (input file) tidak memenuhi syarat untuk diskon cache.

Contoh cache hit

Model generasi teks

Kompatibel dengan OpenAI

Saat Anda memanggil model menggunakan metode yang kompatibel dengan OpenAI dan memicu implicit cache, respons menunjukkan jumlah token yang mengenai cache dalam bidang usage.prompt_tokens_details.cached_tokens. Nilai ini merupakan bagian dari usage.prompt_tokens.

{
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "Saya adalah model bahasa skala besar yang dikembangkan oleh Alibaba Cloud. Nama saya Qwen."
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 3019,
        "completion_tokens": 104,
        "total_tokens": 3123,
        "prompt_tokens_details": {
            "cached_tokens": 2048
        }
    },
    "created": 1735120033,
    "system_fingerprint": null,
    "model": "qwen-plus",
    "id": "chatcmpl-6ada9ed2-7f33-9de2-8bb0-78bd4035025a"
}

DashScope

Saat Anda menggunakan SDK Python DashScope atau permintaan HTTP untuk memanggil model dan memicu implicit cache, respons berisi jumlah token yang mengenai cache dalam bidang usage.prompt_tokens_details.cached_tokens. Nilai ini merupakan bagian dari usage.input_tokens.

{
    "status_code": 200,
    "request_id": "f3acaa33-e248-97bb-96d5-cbeed34699e1",
    "code": "",
    "message": "",
    "output": {
        "text": null,
        "finish_reason": null,
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": "Saya adalah model bahasa besar dari Alibaba Cloud. Nama saya Qwen. Saya dapat menghasilkan berbagai jenis teks, seperti artikel, cerita, dan puisi, serta dapat menyesuaikannya berdasarkan skenario dan kebutuhan yang berbeda. Selain itu, saya dapat menjawab berbagai pertanyaan dan memberikan bantuan serta solusi. Jika Anda memiliki pertanyaan atau membutuhkan bantuan, jangan ragu untuk bertanya, dan saya akan berusaha sebaik mungkin memberikan dukungan. Harap dicatat bahwa mengulang konten yang sama mungkin tidak menghasilkan respons yang lebih detail. Kami menyarankan untuk memberikan informasi yang lebih spesifik atau mengubah pertanyaan Anda agar saya dapat lebih memahami kebutuhan Anda."
                }
            }
        ]
    },
    "usage": {
        "input_tokens": 3019,
        "output_tokens": 101,
        "prompt_tokens_details": {
            "cached_tokens": 2048
        },
        "total_tokens": 3120
    }
}

Kompatibel dengan Anthropic

Saat Anda memanggil model dengan cara yang kompatibel dengan Anthropic dan implicit cache dipicu, Anda dapat menemukan jumlah token yang mengenai cache dalam usage.cache_read_input_tokens (nilai ini tidak termasuk dalam usage.input_tokens tetapi dilaporkan secara terpisah).

{
    "id": "msg_01XFDUDYJgAACzvnptvVoYEL",
    "type": "message",
    "role": "assistant",
    "content": [
        {
            "type": "text",
            "text": "Konten ini adalah teks placeholder yang diulang."
        }
    ],
    "model": "qwen3.7-max",
    "stop_reason": "end_turn",
    "usage": {
        "input_tokens": 82,
        "cache_creation_input_tokens": 0,
        "cache_read_input_tokens": 1536,
        "output_tokens": 14
    }
}

Model pemahaman visual

Kompatibel dengan OpenAI

Saat Anda memanggil model dengan cara yang kompatibel dengan OpenAI dan implicit cache dipicu, respons menunjukkan jumlah token yang mengenai cache dalam bidang usage.prompt_tokens_details.cached_tokens. Jumlah token ini merupakan bagian dari usage.prompt_tokens.

{
  "id": "chatcmpl-3f3bf7d0-b168-9637-a245-dd0f946c700f",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "Gambar ini menunjukkan adegan hangat antara seorang wanita dan seekor anjing yang berinteraksi di pantai. Wanita tersebut, mengenakan kemeja kotak-kotak, duduk di pasir dan tersenyum saat berinteraksi dengan anjing tersebut. Anjing tersebut adalah jenis besar berwarna terang yang mengenakan kalung warna-warni, dengan kaki depannya terangkat seolah-olah hendak bersalaman atau memberi high-five kepada wanita tersebut. Latar belakangnya adalah lautan dan langit yang luas, dengan sinar matahari yang bersinar dari sisi kanan bingkai, menambah suasana hangat dan tenang pada seluruh adegan.",
        "refusal": null,
        "role": "assistant",
        "audio": null,
        "function_call": null,
        "tool_calls": null
      }
    }
  ],
  "created": 1744956927,
  "model": "qwen-vl-max",
  "object": "chat.completion",
  "service_tier": null,
  "system_fingerprint": null,
  "usage": {
    "completion_tokens": 93,
    "prompt_tokens": 1316,
    "total_tokens": 1409,
    "completion_tokens_details": null,
    "prompt_tokens_details": {
      "audio_tokens": null,
      "cached_tokens": 1152
    }
  }
}

DashScope

Saat Anda memanggil model menggunakan SDK Python DashScope atau permintaan HTTP dan terjadi cache hit implicit, jumlah token yang di-cache dilaporkan secara terpisah dari total token input (usage.input_tokens). Bidang spesifik tempat Anda dapat menemukan angka ini bervariasi berdasarkan wilayah dan model:

  • China (Beijing):

    • qwen-vl-max dan qwen-vl-plus: Periksa di usage.prompt_tokens_details.cached_tokens
    • qwen3-vl-plus, qwen3-vl-flash: Lihat di usage.prompt_tokens_details.cached_tokens
  • Wilayah Singapura: Untuk semua model, merujuk ke usage.cached_tokens

Model saat ini menggunakan usage.cached_tokens dan akan ditingkatkan ke usage.prompt_tokens_details.cached_tokens.

{
  "status_code": 200,
  "request_id": "06a8f3bb-d871-9db4-857d-2c6eeac819bc",
  "code": "",
  "message": "",
  "output": {
    "text": null,
    "finish_reason": null,
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "text": "Gambar ini menunjukkan adegan hangat antara seorang wanita dan seekor anjing yang berinteraksi di pantai. Wanita tersebut, mengenakan kemeja kotak-kotak, duduk di pasir dan tersenyum saat berinteraksi dengan anjing tersebut. Anjing tersebut adalah jenis besar yang mengenakan kalung warna-warni, dengan kaki depannya terangkat seolah-olah hendak bersalaman atau memberi high-five kepada wanita tersebut. Latar belakangnya adalah lautan dan langit yang luas, dengan sinar matahari yang bersinar dari sisi kanan bingkai, menambah suasana hangat dan tenang pada seluruh adegan."
            }
          ]
        }
      }
    ]
  },
  "usage": {
    "input_tokens": 1292,
    "output_tokens": 87,
    "input_tokens_details": {
      "text_tokens": 43,
      "image_tokens": 1249
    },
    "total_tokens": 1379,
    "output_tokens_details": {
      "text_tokens": 87
    },
    "image_tokens": 1249,
    "cached_tokens": 1152
  }
}

Kompatibel dengan Anthropic

Saat Anda memanggil model pemahaman visual dengan cara yang kompatibel dengan Anthropic dan implicit cache dipicu, jumlah token dari cache hit tercermin dalam bidang usage.cache_read_input_tokens (sama seperti untuk model generasi teks).

{
  "id": "msg_01XFDUDYJgAACzvnptvVoYEL",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Gambar ini menunjukkan adegan hangat antara seorang wanita dan seekor anjing yang berinteraksi di pantai."
    }
  ],
  "model": "qwen-vl-max",
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 369,
    "cache_creation_input_tokens": 0,
    "cache_read_input_tokens": 896,
    "output_tokens": 28
  }
}

Kasus penggunaan

Jika permintaan Anda memiliki awalan umum, context cache dapat secara signifikan meningkatkan kecepatan inferensi, menurunkan biaya inferensi, dan mengurangi latensi paket pertama. Fitur ini sangat berguna dalam kasus penggunaan berikut:

  1. Menjawab pertanyaan teks panjang

    Gunakan pola ini saat Anda mengirim beberapa permintaan tentang teks panjang yang sama, seperti novel, buku teks, atau dokumen hukum.

    Pesan permintaan pertama
messages = [{"role": "system","content": "Anda adalah guru bahasa yang dapat membantu siswa dengan pemahaman membaca."},
          {"role": "user","content": "
Array pesan permintaan berikutnya
messages = [{"role": "system","content": "Anda adalah guru seni bahasa. Anda dapat membantu siswa dengan pemahaman membaca."},
          {"role": "user","content": "<Konten artikel> Tolong analisis paragraf ketiga teks ini."}]

Meskipun pertanyaannya berbeda, semuanya didasarkan pada artikel yang sama. Prompt sistem dan konten artikel yang sama membentuk sejumlah besar informasi awalan berulang, yang memiliki probabilitas tinggi untuk cache hit. 2. Penyelesaian kode otomatis

Dalam skenario penyelesaian kode otomatis, model menggunakan kode di sekitarnya sebagai konteks untuk menghasilkan kode berikutnya. Saat Anda menulis, bagian awal file kode tetap sama. Context cache dapat menyimpan awalan ini untuk mempercepat penyelesaian kode. 3. Percakapan multi-putaran

Untuk percakapan multi-putaran, Anda menambahkan setiap putaran ke array messages. Hal ini memastikan bahwa setiap permintaan baru memiliki awalan umum dengan putaran sebelumnya, meningkatkan kemungkinan cache hit.

Pesan putaran pertama
messages=[{"role": "system","content": "Anda adalah asisten yang membantu."},
          {"role": "user","content": "Siapa kamu?"}]
Pesan putaran kedua
messages=[{"role": "system","content": "Anda adalah asisten yang membantu."},
          {"role": "user","content": "Siapa kamu?"},
          {"role": "assistant","content": "Saya Qwen, dikembangkan oleh Alibaba Cloud."},
          {"role": "user","content": "Apa yang bisa kamu lakukan?"}]

Saat percakapan berkembang, manfaat caching untuk kecepatan dan biaya inferensi menjadi lebih signifikan. 4. Bermain peran atau pembelajaran few-shot

Dalam skenario peran bermain atau pembelajaran few-shot, Anda sering menyertakan instruksi panjang dalam prompt untuk memandu format output model. Hal ini menciptakan awalan besar yang dibagikan di beberapa permintaan.

Sebagai contoh, saat menginstruksikan model untuk bertindak sebagai ahli pemasaran, prompt sistem berisi teks panjang. Berikut adalah dua contoh permintaan:

system_prompt = """Anda adalah ahli pemasaran berpengalaman. Berikan saran pemasaran terperinci untuk produk berbeda dalam format berikut:

1. Target audiens: xxx

2. Poin penjualan utama: xxx

3. Saluran pemasaran: xxx
...
12. Strategi pengembangan jangka panjang: xxx

Pastikan saran Anda spesifik, dapat ditindaklanjuti, dan sangat relevan dengan fitur produk."""

# Pesan pengguna untuk permintaan pertama menanyakan tentang smartwatch.
messages_1=[
  {"role": "system", "content": system_prompt},
  {"role": "user", "content": "Berikan saran pemasaran untuk smartwatch yang baru diluncurkan."}
]

# Pesan pengguna untuk permintaan kedua menanyakan tentang laptop. Karena system_prompt sama, kemungkinan besar terjadi cache hit.
messages_2=[
  {"role": "system", "content": system_prompt},
  {"role": "user", "content": "Berikan saran pemasaran untuk laptop yang baru diluncurkan."}
]

Dengan context cache, sistem dapat merespons lebih cepat karena prompt sistem yang panjang di-cache, bahkan saat Anda sering mengubah produk dalam permintaan Anda (misalnya, dari smartwatch ke laptop). 5. Pemahaman video

Dalam skenario pemahaman video, jika Anda mengajukan beberapa pertanyaan tentang video yang sama, menempatkan video sebelum teks meningkatkan probabilitas cache hit. Jika Anda mengajukan pertanyaan yang sama tentang video berbeda, menempatkan teks sebelum video meningkatkan probabilitas cache hit. Contoh berikut menunjukkan dua permintaan untuk video yang sama:

# Pesan pengguna untuk permintaan pertama menanyakan tentang konten video ini.
messages1 = [
    {"role":"system","content":[{"text": "Anda adalah asisten yang membantu."}]},
    {"role": "user",
        "content": [
            {"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250328/eepdcq/phase_change_480p.mov"},
            {"text": "Apa isi video ini?"}
        ]
    }
]

# Untuk permintaan kedua tentang video yang sama, menempatkan video sebelum teks meningkatkan kemungkinan cache hit.
messages2 = [
    {"role":"system","content":[{"text": "Anda adalah asisten yang membantu."}]},
    {"role": "user",
        "content": [
            {"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250328/eepdcq/phase_change_480p.mov"},
            {"text": "Jelaskan rangkaian peristiwa dalam video. Keluarkan waktu mulai (start_time), waktu selesai (end_time), dan event (event) dalam format JSON. Jangan sertakan blok kode ```json```."}
        ]
    }
]

FAQ

T: Berapa lama context cache disimpan (periode validitas)?

J: Periode validitas context cache tergantung pada jenis cache:

  • Explicit cache: Periode validitas adalah 5 menit, dan setiap cache hit mengatur ulangnya menjadi 5 menit lagi. Jika blok cache tidak mengenai dalam 5 menit, sistem secara otomatis membersihkannya.
  • Implicit cache: Dikelola secara otomatis oleh sistem tanpa periode validitas tetap. Sistem secara berkala membersihkan data cache yang telah lama tidak digunakan.

CatatanPeriode validitas ini mengacu pada siklus hidup context cache selama panggilan API. Ini bukan fitur yang sama dengan riwayat percakapan yang ditampilkan di halaman Pengalaman Model atau Debugging Model di konsol.

T: Bagaimana cara menonaktifkan implicit cache?

J: Anda tidak dapat menonaktifkannya. Implicit cache diaktifkan untuk semua permintaan model yang berlaku karena tidak memengaruhi kualitas respons. Saat terjadi cache hit, biaya berkurang dan kecepatan respons meningkat.

T: Mengapa cache miss eksplisit terjadi?

J: Cache miss dapat terjadi karena alasan berikut:

  • Sistem membersihkan blok cache jika tidak mengenai dalam periode validitas 5 menit.
  • Jika interval antara content terakhir dan blok cache yang sudah ada lebih dari 20 blok content, cache hit tidak akan terjadi. Kami menyarankan Anda membuat blok cache baru.

T: Apakah cache hit mengatur ulang validitasnya?

J: Ya. Setiap hit mengatur ulang periode validitas blok cache menjadi 5 menit.

T: Apakah explicit cache dibagikan antar akun?

J: Tidak. Data implicit cache dan explicit cache diisolasi pada tingkat akun.

T:Apakah explicit cache dibagikan lintas model?

J: Tidak. Data cache diisolasi antar model.

T: Mengapainput_tokensdalamusagetidak sama dengan jumlahcache_creation_input_tokensdancached_tokens?

J: Untuk memastikan kualitas output model, layanan backend menambahkan sejumlah kecil token (biasanya 10 atau kurang) ke prompt Anda. Token ini ditempatkan setelah penanda cache_control, sehingga tidak dihitung untuk pembuatan atau pembacaan cache, tetapi termasuk dalam total input_tokens.