Promptu kešēšana
AUTOMĀTISKIHosted open-weight modeļi automātiski kešē atkārtotus promptu prefiksus. Ja pieprasījums sākas ar to pašu sistēmas promptu, rīkiem un iepriekšējiem ziņapmaiņiem kā nesenais pieprasījums tajam pašam modelim, šis kopīgais prefikss tiek nolasīts no keša un rēķināts pēc 25% no modeļa ievades cenas. Nav nekas jāaktivizē, un keša rakstīšana ir bezmaksas.
Kā tas darbojas
- Prefiks laika secībā — Prompts tiek nolasīts secībā: sistēmas prompts, rīku definīcijas, tad ziņapmaiņi. Kešs sakrīt no šīs secīgas sākuma līdz pirmajam tokenam, kas atšķiras.
- Kas tiek skaitīts kā 'hit' — Pieprasījums, kura prompta sākums sakrīt ar nesena pieprasījuma saturu — parasti tā ir iepriekšējā sarunasnodaļa ar pievienotiem jauniem ziņojumiem. Sakrītošais prefiks ir kešēta ievade; viss pēc tā ir regulāra ievade.
- Granularitāte — Kešs glabā uzvedni 1,568 tokenu blokos, tāpēc uzvedne, kas īsāka par aptuveni 1,500 tokeniem, netiek kešota. Kešoto tokenu skaits atbildē ir jūsu ievades skaits, reizināts ar uzvednes kešoto daļu, noapaļots uz leju. Tas ne vienmēr ir bloka izmēra daudzkārtnis.
- Bez trāpījuma — Pieprasījums, kura sākuma keša nav, tiek rēķināts pēc parastās ievades likmes. Kešotām uzvednēm dzīves ilgums nav publicēts, un trāpījums nav garantēts: lasiet
usage, lai redzētu, ko pieprasījums paņēma no keša. - Slēdža nav — Pieprasījums nav jāpiesaka, un neviens lauks kešošanu neizslēdz.
- Kuri modeļi — Katra hosted open-weight ID. GET /v1/models ziņo par capabilities.prompt_caching: true un pricing.cached_input_per_million_usd. Shannon modeļi rēķina vienotu tarifa.
Kā redzēt keša trāpījumu atbildē
Nosūtiet divus pieprasījumus, kas sākas ar vienu un to pašu garo sistēmas uzvedni, un izdrukājiet katra lietojuma datus. Pirmais skaitlis ir pieprasījuma ievade, otrais ir tās daļa, kas nolasīta no keša.
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 Cenas
Kešētie ievades tokeni tiek rēķināti pēc 25% no modeļa ievades tarifa, noapaļoti līdz $0.001 per 1M. Rakstīšana kešam neko papildu nemaksa, un izvade tiek rēķināta kā parasti. Katra ID kešētais tarifs ir tabulā 'Models & pricing'. Modeļi un cenas
Izsaukuma ievade tiek rēķināta kā (ievade − kešota) × ievades likme + kešota × kešotās ievades likme. Kešoto tokenu skaits nekad nav lielāks par ievades tokenu skaitu.
| Modelis | Ievade / 1M | Kešota ievade / 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 |
Lietojuma žurnālā ir norādīta katra izsaukuma kešotā ievade. Tā rēķinātie tokeni un izmaksas jau ietver kešotās ievades likmi. Atslēgas un izmantošana
Izmantošanas lauki
| Endpoints | Kešēta ievade | Spēja spēkotiet (Reasoning) |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — daļa no prompt_tokens | usage.completion_tokens_details.reasoning_tokens — daļa no completion_tokens |
/v1/responses | usage.input_tokens_details.cached_tokens — daļa no input_tokens | usage.output_tokens_details.reasoning_tokens — daļa no output_tokens |
/v1/messages | usage.cache_read_input_tokens — ziņota atsevišķi: input_tokens ir nekešētais fragments; cache_creation_input_tokens vienmēr ir 0 | atspoguļo 'thinking' output_tokens sadaļā |
{
"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
}
} Straumēta atbilde savos noslēguma lietojuma datos nes tos pašus laukus. Tie nav jāpieprasa:
| Endpoints | Kur ierodas lietojuma dati |
|---|---|
/v1/chat/completions | usage pēdējā daļā pirms data: [DONE]. To sūta katrā straumē. |
/v1/responses | Notikuma response.completed response.usage. |
/v1/messages | Notikuma message_delta usage. message_start usage satur nulles. |
Kā panākt vairāk keša 'hit'u
- Sagatājiet sistēmas promptu un rīku definīcijas tā, lai tie būtu identiski (byte-for-byte) starp izsaukumiem. Novietojiet mainīgos vērtījumus, piemēram, laika zīmītes vai pieprasījuma ID, ziņojuma beigās, nevis sistēmas promptā.
- Pievienojiet informāciju tikai vēstures beigās. Ipriekšējo posmu redizēšana, apgriešana vai apkopšana maina prefiksu, un viss pēc pirmā mainījuma tiek rēķināts kā regulāra ievade.
- Nemainiet rīku, ziņojumu vai satura bloku secību starp izsaukumiem un katru reizi JSON (rīku shēmas, argumenti un rezultāti) serializējiet vienādu veidā.
- Sarunai paliciet pie viena modeļa id un nākamo izsaukumu sūtiet drīz pēc iepriekšējā.
API šajos gadījumos saglabā sarunas sākumu stabilu:
- Sarunā vēlāk nosūtīts
systemvaideveloperziņojums paliek savā vietā. Tas nemaina uzvednes sākumu, tāpēc pirms tā esošās reizes paliek kešotas. - Rīku izsaukumu argumenti iepriekšējās asistenta reizēs tiek salīdzināti pēc vērtības. Šī JSON atslēgu secība un atstarpes nav svarīgas.
- Trīs galapunkti nolasa sarunu vienādi. Saruna, kas turpināta citā galapunktā, saglabā kopīgo prefiksu, ja saturs ir tāds pats.
Requesta lauki
Tiek pieņemti prompt_cache_key (Chat Completions un Responses) un cache_control Messages satura blokos, tāpēc esošais klienta kods darbojas nemainīti. Neviens no tiem nav obligāts: kešēšana ir automātiska un darbojas tāpat arī bez tiem.
| Lauks | Sūta uz | Kas tas ir |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API keša maršrutēšanas atslēga. |
cache_control | /v1/messages | Keša pārtraukuma punkts satura blokam, system blokam vai Anthropic API ziņojumam. |
stream_options | /v1/chat/completions | include_usage lūdz OpenAI API lietojuma datus straumē. Šeit katra straume beidzas ar lietojuma datiem. |
Tokenu skaitīšana
Divi bezmaksas galapunkti, POST /v1/tokenize un POST /v1/messages/count_tokens, saskaita teksta vai visa pieprasījuma tokenus hostētajiem atvērto svaru modeļiem, pirms jūs to nosūtāt. Tiem ir sava lapa: Tokenu skaitīšana