All Products
Search
Document Center

Alibaba Cloud Model Studio:Context cache

Last Updated:Mar 31, 2026

Saat memanggil Large Language Model (LLM), permintaan inferensi yang berbeda mungkin memiliki konten input yang tumpang tindih, seperti dalam percakapan multi-putaran atau beberapa pertanyaan mengenai buku yang sama. Teknologi context cache menyimpan awalan umum tersebut untuk mengurangi komputasi berulang selama inferensi, sehingga meningkatkan kecepatan respons dan menurunkan biaya penggunaan tanpa memengaruhi kualitas respons.

Context cache menyediakan dua mode untuk memenuhi kebutuhan skenario yang berbeda. Pilih mode yang paling sesuai dengan kebutuhan Anda terkait kemudahan, prediktabilitas, dan biaya.

  • Explicit cache: Anda dapat mengaktifkan mode ini secara manual. Buat cache untuk konten tertentu guna menjamin hit dalam periode validitas cache (5 menit). Token yang digunakan untuk membuat cache dikenai biaya 125% dari harga standar token input, sedangkan hit berikutnya dikenai biaya 10%.

  • Implicit cache: Mode otomatis ini tidak memerlukan konfigurasi dan tidak dapat dinonaktifkan. Mode ini ideal untuk skenario umum di mana kemudahan penggunaan menjadi prioritas utama. Sistem secara otomatis mendeteksi dan menyimpan awalan umum dalam permintaan. Tingkat hit tidak dijamin, dan hit dikenai biaya 20% dari harga standar token input.

Item

Explicit cache

Implicit cache

Apakah efektivitas respons terpengaruh?

Tidak berdampak

Tidak berdampak

Penagihan untuk token yang digunakan untuk membuat cache

125% dari harga standar token input

100% dari harga standar token input

Penagihan untuk token input yang di-cache dan terkena hit

10% dari harga standar token input

20% dari harga standar token input

Token minimum untuk caching

1024

256

Periode validitas cache

5 menit (diatur ulang saat terjadi hit)

Tidak dijamin. Sistem secara berkala membersihkan data cache yang tidak digunakan.

Catatan

Explicit cache dan implicit cache saling eksklusif. Hanya satu mode yang berlaku per permintaan.

Catatan

Topik ini berlaku untuk API OpenAI Chat Completions dan DashScope. Untuk Responses API, gunakan Session cache untuk mengurangi latensi inferensi dan biaya. Untuk informasi lebih lanjut, lihat Session cache.

Explicit cache

Dibandingkan implicit cache, explicit cache memerlukan pembuatan manual dan menimbulkan overhead. Namun, mode ini mencapai rasio hit cache yang lebih tinggi dan latensi akses yang lebih rendah.

Penggunaan

Anda dapat menambahkan penanda "cache_control": {"type": "ephemeral"} ke dalam array `messages`. Sistem kemudian akan mencari mundur hingga 20 blok content dari posisi setiap penanda cache_control untuk mencoba mencocokkan cache.

Satu permintaan mendukung maksimal empat penanda cache.
  • Cache miss

    Sistem membuat blok cache baru dari konten antara awal array messages hingga penanda cache_control. Blok cache tersebut berlaku selama 5 menit.

    Pembuatan cache terjadi setelah respons model. Lakukan upaya hit cache hanya setelah permintaan pembuatan selesai.
    Blok cache harus berisi minimal 1024 token.
  • Cache hit

    Sistem memilih awalan yang paling panjang sebagai blok cache yang terkena hit dan mengatur ulang periode validitasnya menjadi 5 menit.

Contoh berikut menunjukkan cara menggunakan fitur ini:

  1. Kirim permintaan pertama: Anda dapat mengirim pesan sistem yang berisi teks A dengan lebih dari 1024 token dan menambahkan penanda cache.

    [{"role": "system", "content": [{"type": "text", "text": A, "cache_control": {"type": "ephemeral"}}]}] 

    Sistem membuat blok cache pertama, yang disebut sebagai blok cache A.

  2. Kirim permintaan kedua: Anda dapat mengirim permintaan dengan struktur berikut:

    [
        {"role": "system", "content": A},
        <other messages>
        {"role": "user","content": [{"type": "text", "text": B, "cache_control": {"type": "ephemeral"}}]}
    ]
    • Jika jumlah `other messages` tidak melebihi 20, blok cache A terkena hit dan periode validitasnya diatur ulang menjadi 5 menit. Sistem juga membuat blok cache baru berdasarkan A, `other messages`, dan B.

    • Jika jumlah `other messages` melebihi 20, blok cache A tidak terkena hit. Sistem membuat blok cache baru berdasarkan konteks lengkap (A + `other messages` + B).

Model yang didukung

Internasional

Qwen-Max: qwen3-max

Qwen-Plus: qwen3.5-plus, qwen-plus

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

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

Qwen-VL: qwen3-vl-plus

DeepSeek-Alibaba Cloud: deepseek-v3.2

Global

Qwen-Max: qwen3-max

Qwen-Plus: qwen3.5-plus, qwen-plus

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

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

Qwen-VL: qwen3-vl-plus

Model-model yang tercantum di atas hanya mendukung fitur explicit cache di wilayah Jerman.

Tiongkok daratan

Qwen-Max: qwen3-max

Qwen-Plus: qwen3.5-plus, qwen-plus

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

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

Qwen-VL: qwen3-vl-plus

DeepSeek-Alibaba Cloud: deepseek-v3.2

Kimi-Alibaba Cloud: kimi-k2.5

Hong Kong (Tiongkok)

Qwen-Max: qwen3-max

Qwen-Plus: qwen-plus

Qwen-Flash: qwen3.5-flash

Qwen-VL: qwen3-vl-plus

UE

Dalam mode penyebaran UE, titik akhir dan penyimpanan data keduanya berlokasi di Jerman (Frankfurt), dan sumber daya komputasi inferensi model dibatasi di UE.

Qwen-Max: qwen3-max

Qwen-Plus: qwen-plus

Qwen-Flash: qwen3.5-flash

Qwen-VL: qwen3-vl-plus

Memulai

Contoh berikut menunjukkan cara blok cache dibuat dan terkena hit pada antarmuka kompatibel OpenAI dan protokol DashScope.

Kompatibel dengan OpenAI

from openai import OpenAI
import os

client = OpenAI(
    # Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

# Konten repositori kode tiruan. Panjang prompt yang dapat di-cache minimal 1024 token.
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 blok cache yang berisi semua konten dari awal array messages hingga posisi konten saat ini.
                    "cache_control": {"type": "ephemeral"},
                }
            ],
        },
        # Konten pertanyaan berbeda untuk setiap permintaan.
        {
            "role": "user",
            "content": user_input,
        },
    ]
    completion = client.chat.completions.create(
        # Pilih model yang mendukung explicit cache.
        model="qwen3-coder-plus",
        messages=messages,
    )
    return completion

# Permintaan pertama
first_completion = get_completion("What is the content of this code?")
print(f"First request cache creation tokens: {first_completion.usage.prompt_tokens_details.cache_creation_input_tokens}")
print(f"First request cached hit tokens: {first_completion.usage.prompt_tokens_details.cached_tokens}")
print("=" * 20)
# Permintaan kedua. Konten kode sama, hanya pertanyaannya yang berubah.
second_completion = get_completion("How can this code be optimized?")
print(f"Second request cache creation tokens: {second_completion.usage.prompt_tokens_details.cache_creation_input_tokens}")
print(f"Second request cached hit tokens: {second_completion.usage.prompt_tokens_details.cached_tokens}")

DashScope

import os
from dashscope import Generation
# Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"

# Konten repositori kode tiruan. Panjang prompt yang dapat di-cache minimal 1024 token.
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 blok cache yang berisi semua konten dari awal array messages hingga posisi konten saat ini.
                    "cache_control": {"type": "ephemeral"},
                }
            ],
        },
        # Konten pertanyaan berbeda untuk setiap permintaan.
        {
            "role": "user",
            "content": user_input,
        },
    ]
    response = Generation.call(
        # Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: api_key = "sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"), 
        model="qwen3-coder-plus",
        messages=messages,
        result_format="message"
    )
    return response

# Permintaan pertama
first_completion = get_completion("What is the content of this code?")
print(f"First request cache creation tokens: {first_completion.usage.prompt_tokens_details['cache_creation_input_tokens']}")
print(f"First request cached hit tokens: {first_completion.usage.prompt_tokens_details['cached_tokens']}")
print("=" * 20)
# Permintaan kedua. Konten kode sama, hanya pertanyaannya yang berubah.
second_completion = get_completion("How can this code be optimized?")
print(f"Second request cache creation tokens: {second_completion.usage.prompt_tokens_details['cache_creation_input_tokens']}")
print(f"Second request cached hit tokens: {second_completion.usage.prompt_tokens_details['cached_tokens']}")
// Versi minimum Java SDK adalah 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 1024 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 {
        // Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Generation gen = new Generation("http", "https://dashscope-intl.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 cache creation tokens: %d%n", requestLabel, result.getUsage().getPromptTokensDetails().getCacheCreationInputTokens());
        System.out.printf("%s cached hit tokens: %d%n", requestLabel, result.getUsage().getPromptTokensDetails().getCachedTokens());
    }

    public static void main(String[] args) {
        try {
            // Permintaan pertama
            GenerationResult firstResult = getCompletion("What is the content of this code?");
            printCacheInfo(firstResult, "First request");
            System.out.println(new String(new char[20]).replace('\0', '='));            // Permintaan kedua
            GenerationResult secondResult = getCompletion("How can this code be optimized?");
            printCacheInfo(secondResult, "Second request");
        } catch (NoApiKeyException | ApiException | InputRequiredException e) {
            System.err.println("API call failed: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Konten repositori kode tiruan mengaktifkan explicit cache dengan menambahkan penanda cache_control. Untuk permintaan berikutnya tentang repositori ini, sistem dapat menggunakan kembali blok cache tanpa perlu menghitung ulang, sehingga menghasilkan respons yang lebih cepat dan biaya lebih rendah dibandingkan sebelum cache dibuat.

First request cache creation tokens: 1605
First request cached hit tokens: 0
====================
Second request cache creation tokens: 0
Second request cached hit tokens: 1605

Gunakan beberapa penanda cache untuk kontrol detail halus

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

Misalnya, prompt untuk agen layanan pelanggan cerdas biasanya mencakup:

  • Persona sistem: Sangat stabil dan hampir tidak pernah berubah.

  • Pengetahuan eksternal: Semi-stabil. Diambil dari basis pengetahuan atau dengan memanggil tool dan mungkin tetap tidak berubah selama percakapan berkelanjutan.

  • Riwayat percakapan: Berkembang secara dinamis.

  • Pertanyaan saat ini: Berbeda setiap kali.

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

Anda dapat menetapkan hingga empat penanda cache dalam satu permintaan untuk membuat blok cache terpisah untuk bagian-bagian berbeda dari prompt. Hal ini meningkatkan tingkat hit dan memberikan kontrol detail halus.

Penagihan

Explicit cache hanya memengaruhi metode penagihan untuk token input. Aturannya sebagai berikut:

  • Pembuatan cache: Konten cache yang baru dibuat dikenai biaya 125% dari harga input standar. Jika konten cache permintaan baru mencakup cache yang sudah ada sebagai awalan, hanya bagian tambahannya yang dikenai biaya (jumlah token cache baru dikurangi jumlah token cache yang sudah ada).

    Misalnya, jika Anda memiliki cache A yang sudah ada sebanyak 1200 token dan permintaan baru perlu menyimpan konten AB sebanyak 1500 token, 1200 token pertama dikenai biaya sebagai hit cache (10% dari harga standar), dan 300 token baru dikenai biaya sebagai pembuatan cache (125% dari harga standar).

    Anda dapat melihat jumlah token yang digunakan untuk pembuatan cache pada parameter cache_creation_input_tokens.
  • Cache hit: Dikenakan biaya sebesar 10% dari harga input standar.

    Anda dapat melihat jumlah token cache yang terkena hit pada parameter cached_tokens.
  • Token lainnya: Token yang tidak terkena hit atau tidak digunakan untuk membuat cache dikenai biaya sesuai harga aslinya.

Konten yang dapat di-cache

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

  • Pesan Sistem

  • Pesan Pengguna

    Saat Anda menggunakan model qwen3-vl-plus untuk membuat cache, penanda cache_control dapat ditempatkan setelah konten multimodal atau teks. Posisinya tidak memengaruhi caching seluruh pesan pengguna.
  • Pesan Asisten

  • Pesan Tool (hasil setelah tool dieksekusi)

    Jika permintaan mencakup parameter tools, menambahkan penanda cache dalam messages juga menyimpan deskripsi tool di dalamnya.

Untuk pesan sistem, Anda dapat 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.

Batas cache

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

  • Cache menggunakan strategi pencocokan awalan mundur. Sistem secara otomatis memeriksa 20 blok konten terakhir. Jika konten yang akan dicocokkan dipisahkan dari pesan yang memiliki penanda cache_control oleh lebih dari 20 blok konten, hit cache tidak dapat terjadi.

  • Hanya ephemeral yang didukung untuk parameter type, dengan periode validitas 5 menit.

  • Satu permintaan dapat memiliki maksimal 4 penanda cache.

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

Contoh penggunaan

Pertanyaan berbeda untuk teks panjang

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.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 blok 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-coder-plus",
        messages=messages,
    )
    return completion

# Permintaan pertama
first_completion = get_completion("What is the content of this code?")
created_cache_tokens = first_completion.usage.prompt_tokens_details.cache_creation_input_tokens
print(f"First request cache creation tokens: {created_cache_tokens}")
hit_cached_tokens = first_completion.usage.prompt_tokens_details.cached_tokens
print(f"First request cached hit tokens: {hit_cached_tokens}")
print(f"First request tokens not hit and not cached: {first_completion.usage.prompt_tokens-created_cache_tokens-hit_cached_tokens}")
print("=" * 20)
# Permintaan kedua. Konten kode sama, hanya pertanyaannya yang berubah.
second_completion = get_completion("What are some areas for optimization in this code?")
created_cache_tokens = second_completion.usage.prompt_tokens_details.cache_creation_input_tokens
print(f"Second request cache creation tokens: {created_cache_tokens}")
hit_cached_tokens = second_completion.usage.prompt_tokens_details.cached_tokens
print(f"Second request cached hit tokens: {hit_cached_tokens}")
print(f"Second request tokens not hit and not cached: {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 tersebut.

First request cache creation tokens: 1605
First request cached hit tokens: 0
First request tokens not hit and not cached: 13
====================
Second request cache creation tokens: 0
Second request cached hit tokens: 1605
Second request tokens not hit and not cached: 15
Untuk memastikan kinerja model, sistem menambahkan sejumlah kecil token internal. Token ini dikenai biaya sesuai harga input standar. Untuk informasi lebih lanjut, lihat FAQ.

Percakapan multi-putaran berkelanjutan

Dalam skenario percakapan multi-putaran, seperti obrolan sehari-hari, Anda dapat menambahkan penanda cache ke blok konten terakhir dalam array messages setiap permintaan. Mulai dari putaran kedua, setiap permintaan akan mencocokkan dan memperbarui blok cache yang dibuat pada putaran sebelumnya, serta membuat blok cache baru.

from openai import OpenAI
import os
  
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

system_prompt = "You are a witty person." * 400
messages = [{"role": "system", "content": system_prompt}]

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

while True:
    user_input = input("Please enter: ")
    messages.append({"role": "user", "content": [{"type": "text", "text": user_input, "cache_control": {"type": "ephemeral"}}]})
    completion = get_completion(messages)
    print(f"[AI Response] {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"[Cache Info] Cache creation tokens: {created_cache_tokens}")
    print(f"[Cache Info] Cached hit tokens: {hit_cached_tokens}")
    print(f"[Cache Info] Tokens not hit and not cached: {uncached_tokens}")

Anda dapat menjalankan kode dan memasukkan pertanyaan untuk berkomunikasi dengan LLM. Setiap pertanyaan akan mencocokkan blok cache yang dibuat pada putaran sebelumnya.

Implicit cache

Model yang didukung

Global

Dalam mode penyebaran global, titik akhir dan penyimpanan data berlokasi di wilayah AS (Virginia) atau wilayah Jerman (Frankfurt), dan sumber daya komputasi inferensi model dijadwalkan secara dinamis di seluruh dunia.

Internasional

Dalam mode penyebaran internasional, titik akhir dan penyimpanan data berlokasi di wilayah Singapura, dan sumber daya komputasi inferensi model dijadwalkan secara dinamis di seluruh dunia (tidak termasuk Tiongkok daratan).

  • Model generasi teks

  • Model pemahaman visual

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

  • Model khusus industri

    • Role playing: qwen-plus-character, qwen-flash-character, qwen-plus-character-ja

AS

Dalam mode penyebaran AS, titik akhir dan penyimpanan data berlokasi di wilayah AS (Virginia), dan sumber daya komputasi inferensi model dibatasi di Amerika Serikat.

Tiongkok daratan

Dalam mode penyebaran Tiongkok daratan, titik akhir dan penyimpanan data berlokasi di wilayah Beijing, dan sumber daya komputasi inferensi model dibatasi di Tiongkok daratan.

  • Model generasi teks

  • Model pemahaman visual

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

  • Model khusus industri

Tiongkok (Hong Kong)

Dalam mode penyebaran Tiongkok (Hong Kong), titik akhir dan penyimpanan data berlokasi di Tiongkok (Hong Kong), dan sumber daya komputasi inferensi model dibatasi di Tiongkok (Hong Kong).

Model generasi teks

Model pemahaman visual

UE

Dalam mode penyebaran UE, titik akhir dan penyimpanan data berlokasi di Jerman (Frankfurt), dan sumber daya komputasi inferensi model dibatasi di UE.

Model generasi teks

Model pemahaman visual

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

Catatan

Anda tidak dapat menggunakan model snapshot atau latest.

Cara kerja

Implicit cache diaktifkan secara otomatis untuk model yang didukung.

  1. Temukan: Setelah menerima permintaan, sistem memeriksa cache untuk mencari awalan umum dalam array messages menggunakan pencocokan awalan.

  2. Evaluasi:

    • Hit cache: Sistem menggunakan hasil cache untuk inferensi.

    • Miss cache: Sistem memproses permintaan secara normal dan menyimpan awalan prompt untuk permintaan mendatang.

Sistem secara berkala membersihkan entri cache yang tidak digunakan. Tingkat hit cache tidak dijamin — miss dapat terjadi meskipun konteksnya identik. Tingkat hit sebenarnya ditentukan oleh sistem.
Catatan

Konten yang berisi kurang dari 256 token tidak di-cache.

Meningkatkan tingkat hit

Implicit caching mencocokkan permintaan dengan membandingkan awalan-nya. Untuk meningkatkan tingkat hit, tempatkan konten statis di awal dan konten variabel di akhir.

  • Model teks saja: Jika sistem telah menyimpan cache “ABCD”, permintaan untuk “ABE” akan mencocokkan awalan “AB”, sedangkan permintaan untuk “BCD” tidak akan mencocokkan cache apa pun.

  • Model pemahaman visual:

    • Saat mengajukan beberapa pertanyaan tentang gambar atau video yang sama, tempatkan gambar atau video sebelum teks untuk meningkatkan tingkat hit.

    • Saat mengajukan pertanyaan yang sama tentang gambar atau video yang berbeda, tempatkan teks sebelum gambar atau video untuk meningkatkan tingkat hit.

Penagihan

Mengaktifkan mode implicit cache tidak menimbulkan biaya tambahan.

Saat terjadi hit cache, token input yang cocok dikenai biaya sebagai cached_token sebesar 20% dari harga satuan input_token. Token input yang tidak terkena hit dikenai biaya sesuai harga input_token standar. Token output dikenai biaya sesuai harga standar.

Contoh: Sebuah permintaan berisi 10.000 token input, di mana 5.000 di antaranya terkena hit cache:

  • Token yang tidak terkena hit (5.000): Dikenai biaya 100% dari harga satuan

  • Token yang terkena hit (5.000): Dikenai biaya 20% dari harga satuan

Total biaya input = 60% dari biaya tanpa caching: (50% × 100%) + (50% × 20%) = 60%.

image.png

Anda dapat mengambil jumlah token yang di-cache dari atribut cached_tokens pada hasil yang dikembalikan.

OpenAI compatible-Batch (file input) tidak memenuhi syarat untuk diskon cache.

Contoh hit cache

Model generasi teks

Kompatibel dengan OpenAI

Anda dapat memanggil model dengan cara yang kompatibel OpenAI untuk memicu implicit cache. Respons mencakup bidang usage.prompt_tokens_details.cached_tokens, yang menunjukkan jumlah token yang di-cache. Nilai ini merupakan bagian dari usage.prompt_tokens.

{
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "I am an ultra-large-scale language model developed by Alibaba Cloud. My name is 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

Anda dapat memanggil model menggunakan kit pengembangan perangkat lunak (SDK) Python DashScope atau permintaan HTTP untuk memicu implicit cache. Respons mencakup bidang usage.prompt_tokens_details.cached_tokens, yang menunjukkan jumlah token yang di-cache. 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": "I am a large-scale language model from Alibaba Cloud. My name is Qwen. I can generate various types of text, such as articles, stories, and poems, and can adapt and expand them for different scenarios and requirements. In addition, I can answer various questions and provide help and solutions. If you have any questions or need assistance, feel free to ask, and I will do my best to support you. Note that repeating the same content may not provide more detailed answers. Provide more specific information or ask questions in different ways so I can better understand your needs."
                }
            }
        ]
    },
    "usage": {
        "input_tokens": 3019,
        "output_tokens": 101,
        "prompt_tokens_details": {
            "cached_tokens": 2048
        },
        "total_tokens": 3120
    }
}

Model pemahaman visual

Kompatibel dengan OpenAI

Anda dapat memanggil model dengan cara yang kompatibel OpenAI untuk memicu implicit cache. Respons mencakup bidang usage.prompt_tokens_details.cached_tokens, yang menunjukkan jumlah token yang di-cache. Nilai ini merupakan bagian dari usage.prompt_tokens.

{
  "id": "chatcmpl-3f3bf7d0-b168-9637-a245-dd0f946c700f",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "This image shows a heartwarming scene of a woman and a dog interacting on a beach. The woman is wearing a plaid shirt and sitting on the sand, smiling as she interacts with the dog. The dog is a large, light-colored breed with a colorful collar, and its front paw is raised as if to shake hands or give a high-five to the woman. The background is a vast ocean and sky, with sunlight shining from the right side of the frame, adding a warm and peaceful atmosphere to the whole scene.",
        "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

Anda dapat memanggil model menggunakan SDK Python DashScope atau permintaan HTTP untuk memicu implicit cache. Jumlah token yang di-cache termasuk dalam total token input (usage.input_tokens). Bidang tempat Anda dapat melihat informasi ini bervariasi berdasarkan wilayah dan model:

  • Wilayah Beijing:

    • Untuk qwen-vl-max dan qwen-vl-plus, lihat informasi di usage.prompt_tokens_details.cached_tokens.

    • Untuk qwen3-vl-plus dan qwen3-vl-flash, lihat informasi di usage.cached_tokens.

  • Wilayah Singapura: Untuk semua model, lihat informasi di usage.cached_tokens.

Model yang saat ini menggunakan usage.cached_tokens akan ditingkatkan untuk menggunakan usage.prompt_tokens_details.cached_tokens di masa depan.
{
  "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": "This image shows a heartwarming scene of a woman and a dog interacting on a beach. The woman is wearing a plaid shirt and sitting on the sand, smiling as she interacts with the dog. The dog is a large breed with a colorful collar, and its front paw is raised as if to shake hands or give a high-five to the woman. The background is a vast ocean and sky, with sunlight shining from the right side of the frame, adding a warm and peaceful atmosphere to the whole scene."
            }
          ]
        }
      }
    ]
  },
  "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
  }
}

Skenario umum

Jika permintaan Anda memiliki awalan yang sama, context cache dapat meningkatkan kecepatan inferensi, mengurangi biaya, dan menurunkan waktu hingga token pertama. Berikut adalah skenario umum:

  1. Tanya jawab berdasarkan teks panjang

    Ini berlaku untuk skenario di mana Anda mengirim beberapa permintaan tentang teks panjang tetap, seperti novel, buku pelajaran, atau dokumen hukum.

    Array pesan untuk permintaan pertama

    messages = [{"role": "system","content": "You are a language teacher. You can help students with reading comprehension."},
              {"role": "user","content": "<Article content> What are the author's thoughts and feelings expressed in this text?"}]

    Array pesan untuk permintaan berikutnya

    messages = [{"role": "system","content": "You are a language teacher. You can help students with reading comprehension."},
              {"role": "user","content": "<Article content> Please analyze the third paragraph of this text."}]

    Meskipun pertanyaannya berbeda, semuanya didasarkan pada artikel yang sama. Prompt sistem dan konten artikel yang identik menciptakan awalan besar yang berulang, yang meningkatkan probabilitas hit cache.

  2. Penyelesaian Kode Otomatis

    Dalam skenario penyelesaian kode otomatis, Large Language Model (LLM) menyelesaikan kode berdasarkan kode yang ada dalam konteks. Saat pengguna terus menulis kode, awalan kode tetap tidak berubah. Context cache menyimpan kode sebelumnya untuk meningkatkan kecepatan penyelesaian.

  3. Percakapan multi-putaran

    Untuk mengimplementasikan percakapan multi-putaran, tambahkan informasi percakapan dari setiap putaran ke array messages. Oleh karena itu, setiap putaran memiliki awalan yang sama dengan putaran sebelumnya, yang meningkatkan probabilitas hit cache.

    Array pesan untuk putaran pertama percakapan

    messages=[{"role": "system","content": "You are a helpful assistant."},
              {"role": "user","content": "Who are you?"}]

    Array pesan untuk putaran kedua percakapan

    messages=[{"role": "system","content": "You are a helpful assistant."},
              {"role": "user","content": "Who are you?"},
              {"role": "assistant","content": "I am Qwen, developed by Alibaba Cloud."},
              {"role": "user","content": "What can you do?"}]

    Saat jumlah putaran percakapan meningkat, manfaat caching—seperti inferensi lebih cepat dan biaya lebih rendah—menjadi lebih signifikan.

  4. Role-playing atau pembelajaran few-shot

    Dalam skenario role-playing atau pembelajaran few-shot, Anda biasanya menambahkan sejumlah besar informasi ke prompt untuk memandu format output LLM. Hal ini menciptakan awalan besar yang berulang di berbagai permintaan.

    Misalnya, agar LLM bertindak sebagai ahli pemasaran, prompt sistem berisi banyak teks. Berikut adalah contoh pesan untuk dua permintaan:

    system_prompt = """You are an experienced marketing expert. Provide detailed marketing suggestions for different products in the following format:
    
    1. Target audience: xxx
    
    2. Main selling points: xxx
    
    3. Marketing channels: xxx
    ...
    12. Long-term development strategy: xxx
    
    Ensure your suggestions are specific, actionable, and highly relevant to the product features."""
    
    # Pesan pengguna untuk permintaan pertama, menanyakan tentang jam tangan pintar
    messages_1=[
      {"role": "system", "content": system_prompt},
      {"role": "user", "content": "Provide marketing suggestions for a newly launched smartwatch."}
    ]
    
    # Pesan pengguna untuk permintaan kedua, menanyakan tentang laptop. Karena system_prompt sama, hit cache sangat mungkin terjadi.
    messages_2=[
      {"role": "system", "content": system_prompt},
      {"role": "user", "content": "Provide marketing suggestions for a newly launched laptop."}
    ]

    Dengan menggunakan context cache, sistem dapat merespons dengan cepat setelah hit cache, bahkan jika pengguna sering mengubah jenis produk dalam kuerinya, seperti dari jam tangan pintar ke laptop.

  5. Pemahaman video

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

    # Pesan pengguna untuk permintaan pertama, menanyakan tentang konten video.
    messages1 = [
        {"role":"system","content":[{"text": "You are a helpful assistant."}]},
        {"role": "user",
            "content": [
                {"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250328/eepdcq/phase_change_480p.mov"},
                {"text": "What is the content of this video?"}
            ]
        }
    ]
    
    # Pesan pengguna untuk permintaan kedua, menanyakan tentang cap waktu video. Karena kueri tentang video yang sama, menempatkan video sebelum teks membuat hit cache sangat mungkin terjadi.
    messages2 = [
        {"role":"system","content":[{"text": "You are a helpful assistant."}]},
        {"role": "user",
            "content": [
                {"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250328/eepdcq/phase_change_480p.mov"},
                {"text": "Describe the series of events in the video. Output the start time (start_time), end time (end_time), and event (event) in JSON format. Do not include the ```json``` code segment."}
            ]
        }
    ]

FAQ

T: Bagaimana cara menonaktifkan implicit cache?

Anda tidak dapat menonaktifkan implicit cache. Fitur ini selalu diaktifkan untuk model yang didukung dan tidak berdampak pada kualitas output, sekaligus mengurangi biaya dan meningkatkan kecepatan respons.

P: Mengapa cache eksplisit tidak tercapai setelah saya membuatnya?

Kemungkinan penyebabnya:

  • Cache kedaluwarsa karena tidak terkena hit dalam waktu 5 menit.

  • Jika blok content terakhir dipisahkan dari cache yang sudah ada oleh lebih dari 20 blok content, cache tidak akan terkena hit. Buat blok cache baru sebagai gantinya.

Q: Apakah mengakses cache eksplisit mengatur ulang periode validitasnya?

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

T: Apakah explicit cache dibagi antar akun berbeda?

Tidak. Data cache implicit maupun explicit diisolasi berdasarkan akun dan tidak dibagi lintas akun.

Q: Apakah cache eksplisit dibagikan antara model-model berbeda di bawah akun yang sama?

Tidak. Data cache diisolasi antar model dan tidak dibagi.

T: Mengapa usage's input_tokens tidak sama dengan jumlah cache_creation_input_tokens dan cached_tokens?

Untuk memastikan kualitas output model, layanan backend menambahkan sejumlah kecil token—biasanya kurang dari 10—setelah prompt yang disediakan pengguna. Token ini muncul setelah penanda cache_control. Token tersebut tidak dihitung sebagai pembuatan cache atau hit cache, tetapi termasuk dalam total input_tokens.