Prompt-cache
AUTOMATIKOAHosted open-weight modeloek prompt-prefix errepikatuak automatikoki cache-an gordetzen dituzte. Eskapide batbidean system prompt, tresnak eta mezuak berdin badira modelo berdineko eskapide berri batean, prefix ownak cache-tik irakurtzen da eta modeloaren sarrera-prezioaren %25ean kobratzen da. Ez dago aktibatzeko ezer, eta cache-idazketak doakoak dira.
Nola funtzionatzen duen
- Prefix, ordenan — Prompta ordenan irakurtzen da: system prompt, tresna-definitzioak eta ondoren mezuak. Cacheak sekuentzia horren hasieratik lehen token desbederia duten arteko z 만큼 batzaten
- Zer kontatzen da hit gisa — Eskapide bat, bere promptak eskapide berri batekin own content hasiz denean — ohikoztatuna da elkarrizketa berri batek mezuak gehitakoa izatea. Match egin duen prefixa sarrera cachekoa da; horren ondoren dakiuna sarrera ohiko sarrera da.
- Granularitasuna — Cacheak prompt bat 1,568 tokeneko blokeetan gordetzen du, beraz 1,500 token inguru baino laburragoa den prompt bat ez da cachean gordetzen. Erantzun bateko cacheko kopurua zure sarrera-kopurua promptaren cacheko zatiarekin biderkatuta da, behera biribilduta. Ez da zertan blokearen tamainaren multiploa izan.
- Hit gabe — Hasiera cachean ez dagoen eskaera sarrera-tasa arruntean fakturatzen da. Ez da cacheko promptentzako iraupenik argitaratzen eta hit bat ez dago bermatuta: irakurri
usageeskaera batek cachetik zer hartu duen ikusteko. - Etengailurik ez — Eskaera batek ez du aktibatu behar, eta ez dago cachea desaktibatzen duen eremurik.
- Zein modeloak — Hosted open-weight id guztiek. GET /v1/models reportatzen du capabilities.prompt_caching: true eta pricing.cached_input_per_million_usd. Shannon modeloek tarifa finko bat kobratzen dute.
Ikusi cache hit bat erantzun batean
Bidali bi eskaera system prompt luze berberarekin hasten direnak, eta inprimatu bakoitzaren erabilera. Lehen zenbakia eskaeraren sarrera da, bigarrena cachetik irakurritako zatia.
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 Prezioak
Sarrera cacheko tokenak modeloaren sarrera-tarifaren %25ean kobratzen dira, 1Mko $0.001ra birribiltuta. Cache-n idazteak ez dakar kostu gehigarikoik, eta irteerak ohiko moduan kobratzen da. Id bakoitzaren tarifa cachekoa 'Models & pricing' taulan dago. Modeloak eta prezioak
Dei baten sarrera honela kobratzen da: (sarrera − cachekoa) × sarrera-tasa + cachekoa × cacheko tasa. Cacheko kopurua ez da inoiz sarrera-kopurua baino handiagoa.
| Modeloa | Sarrera / 1M | Cacheko sarrera / 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 |
Erabilera-erregistroak dei bakoitzaren cacheko sarrera zerrendatzen du. Bere token fakturatuek eta kostuak cacheko tasa jada barne hartzen dute. Gakoak eta erabilera
Erabilpen-eremuak
| Endpoint-a | Sarrera cachekoa | Arrazoitzea |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — prompt_tokens zati bat | usage.completion_tokens_details.reasoning_tokens — completion_tokens zati bat |
/v1/responses | usage.input_tokens_details.cached_tokens — input_tokens zati bat | usage.output_tokens_details.reasoning_tokens — output_tokens zati bat |
/v1/messages | usage.cache_read_input_tokens — apart reportatua: input_tokens zati ez-cachekoa da; cache_creation_input_tokens beti 0 da | pentsatzea output_tokens-en kontatzen da |
{
"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
}
} Stream bidezko erantzun batek eremu berberak ditu bere azken erabileran. Ez duzu eskatu behar:
| Endpoint-a | Erabilera non iristen den |
|---|---|
/v1/chat/completions | usage data: [DONE] baino lehenagoko azken chunk-ean. Stream guztietan bidaltzen da. |
/v1/responses | response.completed gertaeraren response.usage. |
/v1/messages | message_delta gertaeraren usage. message_start-en usage-k zeroak ditu. |
Cache hit gehiago lortzeko
- Mantendu system prompt eta tresna-definitzioak byte-ra byte stable eskapideak artean. Put per-call balioak, timestampak edo request id-ak, azken mezuaren amaian jarri, ez system prompt-ean.
- Gehitu bakariz historiaren amaian. Lehen txandorak editatzea, moztu edo laburtzea prefixa aldatzen du, eta lehen aldaketaz geroa dena sarrera ohiko gisa kobratzen da.
- Ez aldatu tresnen, mezuen edo edukizun-blokuen ordena eskapideak artean, eta serializatu JSON (tresna-eskemak, argumentuak eta emaitzak) beti modu berean.
- Mantendu modelo-id bera elkarrizketa batean, eta bidali ondorengo deia aurrekoaren ondoren laster.
API-ak elkarrizketaren hasiera egonkor mantentzen du kasu hauetan:
- Elkarrizketan geroago bidalitako
systemedodevelopermezu bat bere lekuan geratzen da. Ez du promptaren hasiera aldatzen, beraz aurreko txandak cachean geratzen dira. - Assistant-en aurreko txanden tresna-deien argumentuak balioz alderatzen dira. JSON horren gakoen ordenak eta tarteek ez dute axola.
- Hiru endpoint-ek elkarrizketa modu berean irakurtzen dute. Beste endpoint batean jarraitutako elkarrizketak partekatutako aurrizkia mantentzen du edukia berbera denean.
Eskaera-eremuak
prompt_cache_key (Chat Completions eta Responses) eta cache_control mezuen edukizkiaren blokeetan onartzen dira, beraz bezeroaren kode existenteak aldatzez run egiten dira. Beti behar dira: cache-a automatikoa da eta berdin funtzionatzen du gabe.
| Eremua | Nori bidaltzen zaion | Zer den |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API-ko cache bideratze-gako bat. |
cache_control | /v1/messages | Cache-etenune bat eduki-bloke batean, system bloke batean edo Anthropic API-ko mezu batean. |
stream_options | /v1/chat/completions | include_usage-k OpenAI API-ari stream baten erabilera eskatzen dio. Hemen stream guztiak erabilerarekin amaitzen dira. |
Tokenak countatzea
Bi endpoint doakok, POST /v1/tokenize eta POST /v1/messages/count_tokens, testu baten edo eskaera oso baten tokenak kontatzen dituzte pisu irekiko modelo ostatatuetarako, bidali aurretik. Beren orrialdea dute: Tokenen kontaketa