Prompti vahemäljutamine
AUTOMAATNEHosted open-weight mudelid vahemäljutavad korduvaid prompti prefikse automaatselt. Kui päring algab sama süsteem-prompti, tööriistade ja varasemate sõnumitega kui hilisema aegse päring samas mudelis, lugetakse see ühine prefiks vahemälust ja arvestatakse 25% mudeli sisendihinnast. Midagi aktiveerida pole vaja ning vahemälu kirjutamine on tasuta.
Kuidas see töötab
- Prefiks järjekorras — Prompt lugetakse järjekorras: süsteem-prompt, tööriistade definitsioonid ja seejärel sõnumid. Vahemälu sobib algusest kuni esimese erineva tokenini.
- Mida loetakse hitiks — Päring, mille prompt algab sama sisuvaga kui hilisema aegne päring — tavaliselt on see sama vestluse eeline pööre, millele on lisatud uued sõnumid. Ühisev prefiks on vahemälus olev sisend; kõik sellest edasi on tavaline sisend.
- Kaseerigus — Vahemälu hoiab prompti 1,568 tokeni suuruste plokkidena, seega alla umbes 1,500 tokeni pikkust prompti ei vahemällustata. Vastuses olev vahemälus olev arv on sinu sisendi arv korrutatud prompti vahemälus oleva osaga, allapoole ümardatud. See ei ole tingimata ploki suuruse kordne.
- Ilma tabamuseta — Päringut, mille algust vahemälus ei ole, arveldatakse tavalise sisendi hinnaga. Vahemällu pandud promptidele ei avaldata eluiga ja tabamust ei garanteerita: loe
usage, et näha, mida päring vahemälust võttis. - Lülitit ei ole — Päring ei vali seda ise ja ükski väli ei lülita vahemällu panekut välja.
- Millised mudelid — Kõik hosted open-weight id-d. GET /v1/models raporteerib neile capabilities.prompt_caching: true ja pricing.cached_input_per_million_usd. Shannon mudelid arvestavad ühe lamehinnaga.
Vaata vahemälutabamust vastuses
Saada kaks päringut, mis algavad sama pika süsteemipromptiga, ja trüki kummagi kasutusandmed. Esimene arv on päringu sisend, teine on selle osa, mis loeti vahemälust.
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 Hinnastamine
Vahemälus olevad sisenditokenid maksavad 25% mudeli sisendihinnast, ümardatuna $0.001 per 1M. Vahemälu kirjutamine ei maksa lisatagust ja väljund on arvestatud tavapäraselt. Iga id-i vahemälihind on Models & pricing tabelis. Mudelid ja hinnad
Kõne sisendi hind on (sisend − vahemälus) × sisendi hind + vahemälus × vahemälu hind. Vahemälus olev arv ei ole kunagi suurem kui sisendi arv.
| Mudel | Sisend / 1M | Vahemälus sisend / 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 |
Kasutuslogi loetleb iga kõne vahemälus oleva sisendi. Selle arveldatud tokenid ja hind sisaldavad vahemälu hinda juba. Võtmed ja kasutus
Kasutusväljad
| Lõpppunkt | Vahemälus olev sisend | Põrutus |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — osa prompt_tokens-ist | usage.completion_tokens_details.reasoning_tokens — osa completion_tokens-ist |
/v1/responses | usage.input_tokens_details.cached_tokens — osa input_tokens-ist | usage.output_tokens_details.reasoning_tokens — osa output_tokens-ist |
/v1/messages | usage.cache_read_input_tokens — raporteeritakse eraldi: input_tokens on vahemälus olematu osa; cache_creation_input_tokens on alati 0 | mõtlemine (thinking) on arvestatud output_tokens-is |
{
"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
}
} Voogedastatud vastus kannab samu välju oma lõplikus kasutuses. Sa ei pea seda küsima:
| Lõpppunkt | Kus kasutusandmed saabuvad |
|---|---|
/v1/chat/completions | usage viimasel chunkil enne data: [DONE]. See saadetakse igal voos. |
/v1/responses | response.completed-sündmuse response.usage. |
/v1/messages | message_delta-sündmuse usage. message_start usage sisaldab nulle. |
Kuidas saada rohkem hitisid
- Hoidke süsteem-prompt ja tööriistade definitsioonid kõnetvaheliselt byte-by-byte stabiilseks. asetage iga kõnega muutuvad väärtused, nagu ajatemplid või päringu id-d, viimase sõnumi lõppu, mitte süsteem-prompti.
- Lisage ajaloo lõpule. Varasemate pöörete redigeerimine, loomine või kokkuvõtte tegemine muudab prefiksit ja kõik pärast esimest muutust arvestatakse tavalise sisendina.
- Ärge muutke tööriistade, sõnumite või sisuplokkide järjekorda kõnetvaheliselt ning serialiseerige JSON (tööriistade skeemad, argumendid ja tulemused) iga korda samamoodi.
- Jää vestluse ajaks ühe mudeli id juurde ja saada järgmine kõne varsti pärast eelmist.
API hoiab vestluse alguse stabiilsena neil juhtudel:
- Vestluses hiljem saadetud
system- võideveloper-sõnum jääb oma kohale. See ei muuda prompti algust, seega jäävad selle ees olevad vahetused vahemällu. - Varasemate assistendi vahetuste tööriistakutsete argumente võrreldakse väärtuse järgi. Selle JSON-i võtmete järjekord ja tühikud ei loe.
- Kolm lõpp-punkti loevad vestlust ühtmoodi. Teises lõpp-punktis jätkatud vestlus säilitab ühise prefiksi, kui sisu on sama.
Päringu väljad
prompt_cache_key (Chat Completions ja Responses) ning cache_control Messagesi sisuplokkides on aktsepteeritud, et olemasolev kliendikood töötaks muutmata. Kumbki ei ole kohustuslik: caching on automaatne ja toimib ka ilma nendeta.
| Väli | Saadetakse | Mis see on |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API vahemälu marsruutimisvõti. |
cache_control | /v1/messages | Vahemälu murdepunkt sisuplokil, system-plokil või Anthropic API sõnumil. |
stream_options | /v1/chat/completions | include_usage küsib OpenAI API-lt voo kasutusandmeid. Siin lõpeb iga voog kasutusandmetega. |
Tokenite arvutamine
Kaks tasuta lõpp-punkti, POST /v1/tokenize ja POST /v1/messages/count_tokens, loevad hostitud avatud kaaludega mudelite jaoks teksti või kogu päringu tokenid enne saatmist. Neil on oma leht: Tokenite lugemine