Prompt keşləmə
AVTOMATİKHosted open-weight modelləri təkrar prompt prefikslərini avtomatik keşləyir. Sorğu eyni modeldəki son sorğu ilə eyni sistem promptu, alətlər və əvvəlki mesajlarla başlayanda, həmin ortaq prefiks keşdən oxunur və modelin giriş qiymətinin 25%-i ilə hesablanır. Aktivləşdirməyə ehtiyac yoxdur və keş yazmaları pulsuzdur.
Necə işləyir
- Ardıcıllıqla prefiks — Prompt ardıcıllıqla oxunur: sistem promptu, alət təyinatları, sonra isə mesajlar. Keş, həmin ardıcıllığın başlanğıcından ilk fərqli tokenə qədər uyğunlaşır.
- Nə hit sayılır — Promptu son sorğu ilə eyni məzmunla başlayan sorğu — adətən yeni mesajlar əlavə edilmiş eyni söhbətin əvvəlki növbəsi. Uyğun gələn prefiks keşlənmiş girişdir; ondan sonrakı hər şey adi girişdir.
- Kəmiyyət (Granularity) — Keş promptu 1,568 tokenlik bloklarla saxlayır, buna görə təxminən 1,500 tokendən qısa prompt keşlənmir. Cavabdakı keşlənmiş say sizin giriş sayınızın promptun keşlənmiş payına vurulub aşağı yuvarlaqlaşdırılmış dəyəridir. O, mütləq blok ölçüsünün misli deyil.
- Hit olmadıqda — Başlanğıcı keşdə olmayan sorğu adi giriş tarifi ilə hesablanır. Keşlənmiş promptlar üçün ömür müddəti dərc olunmur və hit zəmanət verilmir: sorğunun keşdən nə götürdüyünü görmək üçün
usagesahəsini oxuyun. - Açar yoxdur — Sorğu qoşulmur və heç bir sahə keşləməni söndürmür.
- Hansı modellər — Hər bir hosted open-weight id. GET /v1/models onlarda capabilities.prompt_caching: true və pricing.cached_input_per_million_usd göstəricilərini qaytarır. Shannon modelləri isə vahid tariflə hesablanır.
Cavabda keş hit-ini görmək
Eyni uzun system prompt ilə başlayan iki sorğu göndərin və hər birinin istifadə məlumatını çap edin. Birinci rəqəm sorğunun girişi, ikincisi onun keşdən oxunan hissəsidir.
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.shannon-ai.com/v1")
handbook = open("handbook.txt").read() # a long text that stays the same
def ask(question):
response = client.chat.completions.create(
model="Kimi-K3-3BIT-REAP",
messages=[
{"role": "system", "content": handbook},
{"role": "user", "content": question},
],
)
usage = response.usage
print(usage.prompt_tokens, usage.prompt_tokens_details.cached_tokens)
ask("What is the refund policy?")
ask("Who approves travel?") # same start: read the second number import { readFileSync } from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1" });
const handbook = readFileSync("handbook.txt", "utf8"); // a long text that stays the same
async function ask(question) {
const response = await client.chat.completions.create({
model: "Kimi-K3-3BIT-REAP",
messages: [
{ role: "system", content: handbook },
{ role: "user", content: question },
],
});
const usage = response.usage;
console.log(usage.prompt_tokens, usage.prompt_tokens_details.cached_tokens);
}
await ask("What is the refund policy?");
await ask("Who approves travel?"); // same start: read the second number # handbook.txt is a long text that stays the same. jq builds the JSON body from it
# and prints the usage object of the reply. Run it twice with different questions.
jq -Rs '{
model: "Kimi-K3-3BIT-REAP",
messages: [
{role: "system", content: .},
{role: "user", content: "What is the refund policy?"}
]
}' handbook.txt \
| curl -s https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d @- \
| jq .usage Qiymətləndirmə
Keşlənmiş giriş tokenləri modelin giriş tarifinin 25%-i ilə, 1M üçün $0.001-ə yuvarlaqlaşdırılaraq hesablanır. Keşə yazmaq əlavə xərc tələb etmir və çıxış adi qaydada hesablanır. Hər bir id-nin keş tarifi 'Modellər və qiymətləndirmə' cədvəlindədir. Modellər və qiymətlər
Çağırışın girişi (giriş − keşlənmiş) × giriş tarifi + keşlənmiş × keşlənmiş tarif kimi hesablanır. Keşlənmiş say heç vaxt giriş sayından böyük olmur.
| Model | Giriş / 1M | Keşlənmiş giriş / 1M |
|---|---|---|
DeepSeek-V4-Pro-0813-3BIT-REAP | $1.95 | $0.488 |
GLM-5.2-3BIT-REAP | $0.73 | $0.183 |
Kimi-K3-3BIT-REAP | $3.83 | $0.958 |
Nemotron3Ultra-3BIT-REAP | $0.75 | $0.188 |
MiniMax-M3-3BIT-REAP | $0.50 | $0.125 |
DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP | $0.50 | $0.125 |
Kimi-K2.6-W4A16-AUTOROUND-REAP | $0.78 | $0.195 |
Laguna-S-2.1-W4A16-AUTOROUND-REAP | $0.50 | $0.125 |
inkling-W4A16-AUTOROUND-REAP | $1.42 | $0.355 |
MiMo-V2.5-Pro-W8A16 | $0.50 | $0.125 |
MiMo-V2.5-W8A16 | $0.50 | $0.125 |
Hy3-W8A16 | $0.50 | $0.125 |
İstifadə jurnalı hər çağırışın keşlənmiş girişini göstərir. Onun hesablanmış tokenləri və xərci keşlənmiş tarifi artıq özündə ehtiva edir. Keys & usage
İstifadə sahələri
| Endpoint | Keşlənmiş giriş | Məntiq (Reasoning) |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — prompt_tokens-un hissəsi | usage.completion_tokens_details.reasoning_tokens — completion_tokens-un hissəsi |
/v1/responses | usage.input_tokens_details.cached_tokens — input_tokens-un hissəsi | usage.output_tokens_details.reasoning_tokens — output_tokens-un hissəsi |
/v1/messages | usage.cache_read_input_tokens — ayrıca bildirilir: input_tokens keşlənməmiş hissədir; cache_creation_input_tokens həmişə 0-dır | düşünmə (thinking) output_tokens-da sayılır |
{
"usage": {
"prompt_tokens": 20000,
"completion_tokens": 812,
"total_tokens": 20812,
"prompt_tokens_details": {
"cached_tokens": 18000
},
"completion_tokens_details": {
"reasoning_tokens": 604
}
}
} {
"usage": {
"input_tokens": 20000,
"input_tokens_details": {
"cached_tokens": 18000
},
"output_tokens": 812,
"output_tokens_details": {
"reasoning_tokens": 604
},
"total_tokens": 20812
}
} {
"usage": {
"input_tokens": 2000,
"cache_read_input_tokens": 18000,
"cache_creation_input_tokens": 0,
"output_tokens": 812
}
} Axınla gələn cavab eyni sahələri yekun istifadə məlumatında daşıyır. Bunu istəməyə ehtiyac yoxdur:
| Endpoint | İstifadə məlumatının gəldiyi yer |
|---|---|
/v1/chat/completions | data: [DONE] xəttindən əvvəlki son chunk-da usage. Hər axında göndərilir. |
/v1/responses | response.completed hadisəsinin response.usage sahəsi. |
/v1/messages | message_delta hadisəsinin usage sahəsi. message_start hadisəsinin usage sahəsində sıfırlar olur. |
Daha çox keş hit-ləri əldə etmək
- Sistem promptunu və alət təyinatlarını çağırışlar boyunca bayt-bayt sabit saxlayın. Zaman möhürləri və ya sorğu id-ləri kimi hər çağırışa aid dəyərləri sistem promptuna deyil, son mesajın sonuna yerləşdirin.
- Tarixçəyə yalnız əlavə etmə (append) aparın. Əvvəlki növbələri redaktə etmək, kəsmək və ya xülasə etmək prefiksi dəyişir və ilk dəyişiklikdən sonrakı hər şey adi giriş kimi hesablanır.
- Çağırışlar arasında alətlərin, mesajların və ya məzmun bloklarının sırasını dəyişməyin və JSON-u (alət sxemaları, alət arqumentləri və nəticələri) hər dəfə eyni şəkildə seriyallaşdırın.
- Söhbət boyu bir model id-sində qalın və növbəti çağırışı əvvəlkindən az sonra göndərin.
API söhbətin başlanğıcını bu hallarda sabit saxlayır:
- Söhbətdə sonradan göndərilən
systemvə yadevelopermesajı öz yerində qalır. O, promptun başlanğıcını dəyişmir, buna görə ondan əvvəlki növbələr keşlənmiş qalır. - Əvvəlki assistant növbələrindəki alət çağırışlarının arqumentləri dəyərə görə müqayisə olunur. Həmin JSON-un açar sırası və boşluqları əhəmiyyət daşımır.
- Üç endpoint söhbəti eyni cür oxuyur. Başqa endpoint-də davam etdirilən söhbət məzmun eyni olduqda ümumi prefiksini saxlayır.
Sorğu sahələri
prompt_cache_key (Chat Completions və Responses) və Messages kontent bloklarında cache_control qəbul edilir, beləliklə mövcud klient kodu dəyişmədən işləyir. Heç biri tələb olunmur: keşləmə avtomatikdir və onlar olmadan da eyni şəkildə işləyir.
| Sahə | Göndərilən yer | Nə olduğu |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API-nin keş marşrutlaşdırma açarı. |
cache_control | /v1/messages | Anthropic API-nin məzmun blokunda, system blokunda və ya mesajda keş kəsmə nöqtəsi. |
stream_options | /v1/chat/completions | include_usage OpenAI API-dən axında istifadə məlumatını istəyir. Burada hər axın istifadə məlumatı ilə bitir. |
Tokenlərin sayılması
İki pulsuz endpoint, POST /v1/tokenize və POST /v1/messages/count_tokens, host edilmiş açıq çəkili modellər üçün mətnin və ya bütöv sorğunun tokenlərini onu göndərməzdən əvvəl sayır. Onların ayrıca səhifəsi var: Tokenlərin sayılması