Промпт-кэштөө
АВТОМАТТЫКХостингдик ачык-салмактуу моделдер кайраланган промпт-префикстерди автоматтык түрдө кэштешет. Эгерде суроо-талап бир моделдеги акыркы суроо-талап сыяктуу эле системалык промпт, куралдар жана мурунку билдирүүлөр менен башталса, ал жалпы префикс кэштен окулат жана моделдин кириш баасынын 25% акысында эсептелет. Эч нерсени активдештирүү керек эмес, ал эми кэшке жазуу акысыз.
Кантип иштейт
- Префикс, ирети менен — Промпт төмөнкү иретте окулат: системалык промпт, куралдардын аныктамалары, андан кийин билдирүүлөр. Кэш ушул ырааттуулуктун башынан баштап, биринчи айırma токенге чейин дал келет.
- Эмне «hit» деп эсептелет — Промпту акыркы суроо-талап менен бирдей мазмундан башталган суроо-талап — адатта, жаңы билдирүүлөр кошулган бир эле конверсациянын мурунку кадамы. Дал келген префикс кэштелген кириш болуп саналат; андан кийинки бардыгы кадимки кириш болуп эсептелет.
- Гранулярдуулук — Кэш промптту 1,568 токендик блоктор менен сактайт, ошондуктан болжол менен 1,500 токенден кыска промпт кэштелбейт. Жоопто кэштелген сан — кириш санынызды промптун кэштелген үлүшүнө көбөйтүп, төмөн тегеректеген маани. Ал блок өлчөмүнө көптүк болушу шарт эмес.
- Тийүүсүз — Башталышы кэште жок сурам кадимки кириш баасы боюнча эсептелет. Кэштелген промпттордун жашоо мөөнөтү жарыяланбайт жана тийүү кепилденбейт: сурам кэштен эмне алганын көрүү үчүн
usage'ти окуңуз. - Өчүргүч жок — Сурам кошулбайт жана кэштөөнү өчүргөн талаа жок.
- Кайсы моделдер — Ар бир хостингдик ачык-салмактуу ID. GET /v1/models алар үчүн capabilities.prompt_caching: true жана pricing.cached_input_per_million_usd бааларын берет. Shannon моделдери бирдиктүү тарифти колдонот.
Жоопто кэшке тийүүнү көрүү
Бир эле узун система промпту менен башталган эки сурам жөнөтүп, ар биринин 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% акысында, 1М үчүн $0.001 чейин тегеректелген баада эсептелет. Кэшке жазуу кошумча каражатты талап кылбайт, ал эми чыгыш адаттагыдай эсептелет. Ар бир ID-нин кэштелген тарифи «Моделдер жана баалар» таблицасында көрсөтүлгөн. Моделдер жана баалар
Чалуунун кириши (кириш − кэштелген) × кириш баасы + кэштелген × кэштелген баа боюнча эсептелет. Кэштелген сан кириш санынан эч качан чоң болбойт.
| Модель | Кириш / 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 журналы ар бир чалуунун кэштелген киришин көрсөтөт. Андагы эсептелген токендер жана баа кэштелген баа менен эсептелген. Ачкычтар жана колдонуу
Колдонуу талаалары
| Эндпоинт | Кэштелген кириш | Шыйрактоо (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
}
} Стрим жооп акыркы usage'инде ошол эле талааларды алып жүрөт. Аны суроонун кереги жок:
| Эндпоинт | Usage кайда келет |
|---|---|
/v1/chat/completions | data: [DONE]'дан мурунку акыркы чанктагы usage. Ал ар бир стримде жөнөтүлөт. |
/v1/responses | response.completed окуясынын response.usage'и. |
/v1/messages | message_delta окуясынын usage'и. message_start usage'инде нөлдөр бар. |
Кэш hit-терин көбөйтүү
- Системалык промпт жана куралдардын аныктамаларын чалуулар аралында байт-байт туруктуу сактаңыз. Убакыт белгилери же суроо-талап ID-лери сыяктуу ар бир чалууга тиешелүү маалыматтарды системалык промптко эмес, акыркы билдирүүнүн аягына жайгаштырыңыз.
- Тарыхка маалыматты-гана кошуңуз. Мурунку кадамдарды түзөтүү, кыскартуу же жалпылоо префиксти өзгөртөт, натыйжада биринчи өзгөртүүдөн кийинки бардык нерсе кадимки кириш катары эсептелет.
- Чалуулар аралында куралдардын, билдирүүлөрдүн же мазмун блокторунун иретин өзгөртпөңүз жана JSON (курал схемалары, курал аргументтери жана жыйна-токтору) маалыматтарын ар дайым бирдей форматта сериялдаңыз.
- Сүйлөшүү үчүн бир модель id'синде калыңыз жана улантуу чалуусун мурункудан кийин көп өтпөй жөнөтүңүз.
API сүйлөшүүнүн башталышын төмөнкү учурларда туруктуу кармайт:
- Сүйлөшүүдө кийинчерээк жөнөтүлгөн
systemжеdeveloperбилдирүүсү өз ордунда калат. Ал промптун башталышын өзгөртпөйт, ошондуктан андан мурунку кезектер кэштелип калат. - Мурунку assistant кезектериндеги курал чалууларынын аргументтери мааниси боюнча салыштырылат. Ал JSON'дун ачкыч тартиби жана боштуктары мааниге ээ эмес.
- Үч endpoint сүйлөшүүнү бирдей окуйт. Башка endpoint'те уланган сүйлөшүү, мазмуну бирдей болсо, жалпы префиксин сактайт.
Сурам талаалары
prompt_cache_key (Chat Completions жана Responses) жана Messages контент блокторундагы cache_control кабыл алынат, ошондуктан учурдагы клиенттик код өзгөртүүсүз иштейт. Э негизги эмес: кэшлөө автоматтык түрдө жүргүзүлөт жана аларсыз да бирдей иштейт.
| Талаа | Кайда жөнөтүлөт | Бул эмне |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API'нин кэш багыттоо ачкычы. |
cache_control | /v1/messages | Anthropic API'нин мазмун блогундагы, system блогундагы же билдирүүсүндөгү кэш бөлүштүрүү чекити. |
stream_options | /v1/chat/completions | include_usage OpenAI API'ден стримде usage суроо үчүн. Бул жерде ар бир стрим usage менен аяктайт. |
Токендерди эсептөө
Эки акысыз endpoint, POST /v1/tokenize жана POST /v1/messages/count_tokens, хостингдеги ачык салмактуу моделдер үчүн тексттин же бүтүн сурамдын токендерин аны жөнөтпөстөн мурун санайт. Алардын өз бети бар: Токен саноо