Prompt gyorsítványozás
AUTOMATIKUSA hosted open-weight modellek automatikusan gyorsítvonalazzák a megismételt prompt-prefixeket. Ha egy kérés ugyanazzal a rendszerprompttal, eszközökkel és korábbi üzenetekkel kezdődik, mint egy korábbi kérés ugyanazon a modellön, az közös prefixet a gyorsítványból olvassuk és a modell bemeneti árának 25%-áért számlázzuk. Nincs szükség külön aktiválásra, a gyorsítványba írás ingyenes.
Hogyan működik
- Prefix, sorrendben — A prompt sorrendben kerül feldolgozásra: rendszerprompt, eszközdefiníciók, majd az üzenetek. A gyorsítvány a sorozat elejétől kezdve az első eltérő tokenig egyezik.
- Mi számít találatnak (hit) — Egy olyan kérés, amelynek a promptja ugyanazzal a tartalommal kezdődik, mint egy korábbi kérésé — jellemzően egy beszélgetés következő fordulója, amelyhez új üzeneteket fűztek. Az egyező prefix gyorsítványos bemenet; minden, ami utána követ, szokványos bemenet.
- Granularitás — A gyorsítótár a promptot 1,568 tokenes blokkokban tárolja, ezért a körülbelül 1,500 tokennél rövidebb promptot nem gyorsítótárazza. A válaszban a gyorsítótárazott szám a bemeneti számod szorozva a prompt gyorsítótárazott hányadával, lefelé kerekítve. Nem feltétlenül a blokkméret többszöröse.
- Találat nélkül — Az a kérés, amelynek eleje nincs a gyorsítótárban, a szokásos bemeneti áron számlázódik. A gyorsítótárazott promptok élettartamát nem tesszük közzé, és a találat nem garantált: a
usagealapján látod, mennyit vett ki egy kérés a gyorsítótárból. - Nincs kapcsoló — A kérés nem kér külön engedélyt, és egyetlen mező sem kapcsolja ki a gyorsítótárazást.
- Mely modellek — Minden hosted open-weight ID. A GET /v1/models a capabilities.prompt_caching: true és a pricing.cached_input_per_million_usd értékeket jelzi számukra. A Shannon modellek egyetlen fix tarifát számlázzák.
Gyorsítótár-találat megtekintése egy válaszban
Küldj két kérést, amely ugyanazzal a hosszú rendszerprompttal kezdődik, és írasd ki mindkettő használati adatát. Az első szám a kérés bemenete, a második ennek a gyorsítótárból olvasott része.
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 Árazás
A gyorsítványos bemeneti tokenek a modell bemeneti árának 25%-áért kerülnek számlázásra, 1M-re kerekítve $0.001-re. A gyorsítványba írás nem kerül külön költségre, a kimenet pedig szokványosan számlázott. Minden ID gyorsítványos tarifa értéke a 'Modellek és árazás' táblázatban található. Modellek és árak
A hívás bemenetét így számlázza a rendszer: (bemenet − gyorsítótárazott) × bemeneti ár + gyorsítótárazott × gyorsítótárazott ár. A gyorsítótárazott szám sosem nagyobb a bemeneti számnál.
| Modell | Bemenet / 1M | Gyorsítótárazott bemenet / 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 |
A használati napló hívásonként felsorolja a gyorsítótárazott bemenetet. A számlázott tokenek és a költség már a gyorsítótárazott árat tartalmazzák. Keys & usage
Használati mezők
| Végpont | Gyorsítványos bemenet | Gondolkodás (Reasoning) |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — a prompt_tokens része | usage.completion_tokens_details.reasoning_tokens — a completion_tokens része |
/v1/responses | usage.input_tokens_details.cached_tokens — az input_tokens része | usage.output_tokens_details.reasoning_tokens — az output_tokens része |
/v1/messages | usage.cache_read_input_tokens — külön jelentve: az input_tokens a nem gyorsítványos rész; a cache_creation_input_tokens mindig 0 | a gondolkodás az output_tokensben számolva |
{
"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
}
} A streamelt válasz ugyanezeket a mezőket viszi a záró használati adatában. Nem kell kérned:
| Végpont | Hol érkezik a használat |
|---|---|
/v1/chat/completions | A usage az utolsó chunkon, a data: [DONE] előtt. Minden streamen elküldi a rendszer. |
/v1/responses | A response.completed esemény response.usage adata. |
/v1/messages | A message_delta esemény usage adata. A message_start usage adata nullákat tartalmaz. |
Több gyorsítványtalálat elérése
- Tartsuk a rendszerpromptot és az eszközdefiníciókat byte-al pontosan stabilnak a hívások között. A hívásonként változó értékeket (pl. időbélyeg de azonosítók) az utolsó üzenet végére tegyük, ne a rendszerpromptba.
- Csak fűzzünk hozzá a történethez. A korábbi fordulók szerkesztése, rövidítése vagy összefoglalása megváltoztatja a prefixet, így az első módosítás utáni minden rész szokványos bemenetként számlázott.
- Ne rendezük át az eszközöket, üzeneteket vagy tartalmi blokkokat a hívások között, és a JSON adatokat (eszköz-schemák, argumentumok és eredmények) minden alkalommal azonos módon szérializáljuk.
- Egy beszélgetésben maradj egy modellazonosítónál, és a következő hívást röviddel az előző után küldd.
Az API ezekben az esetekben tartja stabilan a beszélgetés elejét:
- Egy beszélgetés későbbi részében küldött
systemvagydeveloperüzenet a helyén marad. Nem változtatja meg a prompt elejét, így az előtte lévő fordulók gyorsítótárban maradnak. - A korábbi assistant fordulókban lévő eszközhívások argumentumait érték szerint hasonlítja össze a rendszer. A JSON kulcssorrendje és szóközei nem számítanak.
- A három végpont ugyanúgy olvas egy beszélgetést. Az egy másik végponton folytatott beszélgetés megtartja a közös előtagját, ha a tartalom ugyanaz.
Kérelmi mezők
A prompt_cache_key (Chat Completions és Responses) és a cache_control a Messages tartalomblokkokon elfogadottak, így a meglévő kliens kód változatlanul fut. Egyik sem kötelező: a gyorsítőképezés automatikus és nélküle is ugyanúgy működik.
| Mező | Ide küldve | Mi ez |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | Az OpenAI API gyorsítótár-útválasztó kulcsa. |
cache_control | /v1/messages | Gyorsítótár-töréspont egy tartalomblokkon, egy system blokkon vagy az Anthropic API egy üzenetén. |
stream_options | /v1/chat/completions | Az include_usage az OpenAI API-tól kér használati adatot streamnél. Itt minden stream használati adattal végződik. |
Tokenszámítás
Két ingyenes végpont, a POST /v1/tokenize és a POST /v1/messages/count_tokens, a küldés előtt megszámolja egy szöveg vagy egy teljes kérés tokenjeit a hosztolt nyílt súlyú modelleknél. Ennek saját oldala van: Tokenszámlálás