Prompt кэшлэл
АВТОМАТHosted open-weight загварууд давтагдсан prompt prefix-ийг автоматаар кэшлэх боломжтой. Хэрэв хүсэлт нь сүүлийн үеийн ижил загварын system prompt, tools болон өмнөх мессежүүдээр эхэлж байвал, тухайн хуваагдсан prefix-ийг кэшээс уншиж, загварын оролтын үнийн 25%-иар тооцож нэрийн төлбөр авна. Идэвхжүүлэх тохиргоо шаардлагагүй бөгөөд кэш бичих үйлдэл үнэгүй юм.
Хэрхэн ажиллах вэ
- Дараалсан prefix — Prompt-ийг дарааллын дагуу уншина: system prompt, tool definitions, дараа нь мессежүүд. Кэш нь тухайн дарааллын эхнээс эхлээд хамгийн эхний зөрүүтэй токен хүртэл таарч буй хэсгийг тооцно.
- Юуг 'hit' гэж үзэх вэ — Сүүлийн үеийн хүсэлттэй ижил агуулгаар эхэлсэн prompt-ийг хит гэж үзнэ — ихэвчлэн шинэ мессеж нэмэгдсэн нэгэн хаConversation-ий өмнөх ээлж байдаг. Таарсан prefix нь кэшлэгдсэн оролт бөгөөд үүний дараах бүх зүйл нь ердийн оролт болно.
- Нарийвчлал — Кэш prompt-ийг 1,568 токены блокоор хадгалдаг тул ойролцоогоор 1,500 токеноос богино prompt кэшлэгдэхгүй. Хариулт дахь кэшлэгдсэн тоо нь таны оролтын тоог prompt-ийн кэшлэгдсэн хувиар үржүүлээд доош бөөрөнхийлсөн утга. Энэ нь блокийн хэмжээний үржвэр байх албагүй.
- Hit-гүй үед — Эхлэл нь кэшэнд байхгүй хүсэлтийг ердийн оролтын үнээр тооцно. Кэшлэгдсэн prompt-ийн хадгалах хугацааг мэдээлдэггүй бөгөөд hit баталгаагүй: хүсэлт кэшээс юу авснаа
usage-аас уншина уу. - Унтраалга байхгүй — Хүсэлт нь идэвхжүүлэх шаардлагагүй бөгөөд кэшлэлийг унтраах талбар байхгүй.
- Аль загварууд — Бүх hosted open-weight ID-ууд. GET /v1/models хүсэлт нь capabilities.prompt_caching: true болон pricing.cached_input_per_million_usd утгыг харуулна. Shannon загварууд нэгдсэн харьцаагаар тооцогдоно.
Хариултаас кэш hit харах
Ижил урт system prompt-оор эхэлсэн хоёр хүсэлт илгээж, тус бүрийн usage-ийг хэвлэнэ үү. Эхний тоо нь хүсэлтийн оролт, хоёр дахь нь түүнээс кэшээс уншсан хэсэг.
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 Үнийн тариф
Кэшлэгдсэн оролтын токенууд нь загварын оролтын тарифийн 25%-иар, 1M-д $0.001-ийг бүлбэртгэж тооцогдоно. Кэш рүү бичихэд нэмэлт төлбөргүй, гаралт нь ердийнхээр тооцогдоно. ID бүрийн кэш тариф 'Models & pricing' хүснэгтэд байна. Загвар ба үнэ
Дуудлагын оролтыг (оролт − кэшлэгдсэн) × оролтын үнэ + кэшлэгдсэн × кэшийн үнэ гэж тооцно. Кэшлэгдсэн тоо оролтын тооноос хэзээ ч их байхгүй.
| Загвар | Оролт / 1M | Кэшлэгдсэн оролт / 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 |
Usage лог нь дуудлага бүрийн кэшлэгдсэн оролтыг жагсаана. Тооцогдсон токен болон өртөг нь кэшийн үнийг аль хэдийн агуулсан. Түлхүүр ба хэрэглээ
Ашиглалтын талбарууд
| Endpoint | Кэшлэгдсэн оролт | Reasoning |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — prompt_tokens-ийн хэсэг | usage.completion_tokens_details.reasoning_tokens — completion_tokens-ийн хэсэг |
/v1/responses | usage.input_tokens_details.cached_tokens — input_tokens-ийн хэсэг | usage.output_tokens_details.reasoning_tokens — output_tokens-ийн хэсэг |
/v1/messages | usage.cache_read_input_tokens — тусдаа тайлагдсан: input_tokens нь кэшлэгдээгүй хэсэг; cache_creation_input_tokens нь үргэлж 0 байна | thinking-ийг output_tokens-д тооцно |
{
"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 хариулт эцсийн usage-даа ижил талбаруудыг агуулна. Үүнийг хүсэх шаардлагагүй:
| Endpoint | Usage хаана ирэх |
|---|---|
/v1/chat/completions | data: [DONE]-ийн өмнөх сүүлийн chunk дээрх usage. Stream бүр дээр илгээгдэнэ. |
/v1/responses | response.completed event-ийн response.usage. |
/v1/messages | message_delta event-ийн usage. message_start-ийн usage тэг агуулна. |
Кэш hit-ийг нэмэгдүүлэх
- Дуудлагуудын хооронд system prompt болон tool definitions-ийг байт-байтаар тогтвортой байлгаарай. Цаг хугацаа эсвэл request id зэрэг дуудлага бүрт өөрчлөгдөх утгуудыг system prompt-д биш, сүүлийн мессежийн төгсгөлд байршуулаарай.
- Түүхэнд зөвхөн нэмэлт (append) хийгээрэй. Өмнөх ээлжүүдийг засах, тайрах эсвэл хураанBackspace хийх нь prefix-ийг өөрчилж, эхний өөрчлөлтөөс хойшх бүх зүйл ердийн оролтын тарифаар тооцогдоно.
- Дуудлагуудын хооронд tools, мессеж эсвэл content block-уудын дарааллыг бүү өөрчилж, JSON (tool schemas, tool arguments болон results)-ийг удаа own ижилхэн хэлбэрээр сериалчлаарай.
- Нэг харилцан ярианд нэг загварын id-д үлдэж, дараагийн дуудлагыг өмнөхийнхөөс удалгүй илгээнэ үү.
API дараах тохиолдолд харилцан ярианы эхлэлийг тогтвортой байлгадаг:
- Харилцан ярианд хожим илгээсэн
systemэсвэлdeveloperмессеж байрандаа үлдэнэ. Энэ нь prompt-ийн эхлэлийг өөрчлөхгүй тул өмнөх ээлжүүд кэшлэгдсэн хэвээр байна. - Өмнөх assistant ээлж дэх tool дуудлагын аргументуудыг утгаар нь харьцуулна. Тэр JSON-ийн түлхүүрийн дараалал, хоосон зай нөлөөлөхгүй.
- Гурван endpoint харилцан яриаг ижил аргаар уншдаг. Өөр endpoint дээр үргэлжилсэн харилцан яриа агуулга нь ижил бол нийтлэг prefix-ээ хадгална.
Захиалтын талбарууд
prompt_cache_key (Chat Completions болон Responses) болон Messages-ийн агуулгын block-ууд дээрх cache_control-ыг хүлээн авдаг тул одоогийн клиент код өөрчлөлтгүй ажиллана. Эдгээр нь заавал шаардлагагүй: кэшлэх үйлдэл автоматаар явагдаж, тэдгээргүйгээр ч ижилхэн ажиллана.
| Талбар | Хаашаа илгээх | Энэ юу вэ |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API-ийн кэш чиглүүлэх түлхүүр. |
cache_control | /v1/messages | Anthropic API-ийн content блок, system блок эсвэл мессеж дээрх кэшийн таслах цэг. |
stream_options | /v1/chat/completions | include_usage нь OpenAI API-аас stream дээр usage хүсдэг. Энд stream бүр usage-ээр төгсдөг. |
Токен тоолох
Хоёр үнэгүй endpoint, POST /v1/tokenize ба POST /v1/messages/count_tokens нь hosted open-weight загваруудад текст эсвэл бүтэн хүсэлтийн токеныг илгээхээс өмнө тоолно. Тэдгээр өөрийн хуудастай: Токен тоолох