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. |
Explicit cache dan implicit cache saling eksklusif. Hanya satu mode yang berlaku per permintaan.
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:
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.
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: 1605Gunakan 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-plusuntuk membuat cache, penandacache_controldapat 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 dalammessagesjuga 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_controloleh lebih dari 20 blok konten, hit cache tidak dapat terjadi.Hanya
ephemeralyang didukung untuk parametertype, 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
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.
Model generasi teks
Qwen-Max: qwen3-max
Qwen-Plus: qwen-plus
Qwen-Flash: qwen-flash
Qwen-Coder: qwen3-coder-plus, qwen3-coder-flash
Model pemahaman visual
Qwen-VL: qwen3-vl-plus, qwen3-vl-flash
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
Qwen-Max: qwen3-max, qwen3-max-preview, qwen-max
Qwen-Plus: qwen-plus
Qwen-Flash: qwen-flash
Qwen-Turbo: qwen-turbo
Qwen-Coder: qwen3-coder-plus, qwen3-coder-flash
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.
Model generasi teks
Qwen-Plus: qwen-plus-us
Qwen-Flash: qwen-flash-us
Model pemahaman visual
Qwen-VL: qwen3-vl-flash-us
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
Qwen-Max: qwen3-max, qwen-max
Qwen-Plus: qwen-plus
Qwen-Flash: qwen-flash
Qwen-Turbo: qwen-turbo
Qwen-Coder: qwen3-coder-plus, qwen3-coder-flash
DeepSeek: deepseek-v3.2, deepseek-v3.1, deepseek-v3, deepseek-r1
Kimi: kimi-k2.5, kimi-k2-thinking, Moonshot-Kimi-K2-Instruct
GLM: 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
Model khusus industri
Role playing: qwen-plus-character
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
Qwen-VL: qwen3-vl-plus
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
Anda tidak dapat menggunakan model snapshot atau latest.
Cara kerja
Implicit cache diaktifkan secara otomatis untuk model yang didukung.
Temukan: Setelah menerima permintaan, sistem memeriksa cache untuk mencari awalan umum dalam array
messagesmenggunakan pencocokan awalan.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.
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%.

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-maxdanqwen-vl-plus, lihat informasi diusage.prompt_tokens_details.cached_tokens.Untuk
qwen3-vl-plusdanqwen3-vl-flash, lihat informasi diusage.cached_tokens.
Wilayah Singapura: Untuk semua model, lihat informasi di
usage.cached_tokens.
Model yang saat ini menggunakanusage.cached_tokensakan ditingkatkan untuk menggunakanusage.prompt_tokens_details.cached_tokensdi 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:
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.
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.
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.
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.
Pemahaman video
Dalam skenario pemahaman video, jika Anda mengajukan beberapa pertanyaan tentang video yang sama, menempatkan
videosebelumteksmeningkatkan probabilitas hit cache. Jika Anda mengajukan pertanyaan yang sama tentang video yang berbeda, menempatkantekssebelumvideomeningkatkan 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
contentterakhir dipisahkan dari cache yang sudah ada oleh lebih dari 20 blokcontent, 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.