Preskoči na sadržaj
Keširanje promptova

Keširanje promptova

AUTOMATSKI

Hostirani open-weight modeli automatski cacheiraju ponovljene prefikse promptova. Kada zahtjev počinje istim sistemskim promptom, alatima i prethodnim porukama kao nedavni zahtjev na istom modelu, taj zajednički prefiks se čita iz cache-a i naplaćuje po 25% cijene ulaza modela. Ne zahtijeva aktivaciju, a pisanje u cache je besplatno.

Kako to radi

  • Prefiks, po redu — Prompt se čita po redu: sistemski prompt, definicije alata, zatim poruke. Cache se podudara od početka te sekvence do prvog tokena koji se razlikuje.
  • Što se smatra pogodkom (hit) — Zahtjev čiji prompt počinje istim sadržajem kao nedavni zahtjev — obično prethodni okret istog razgovora s dodanim novim porukama. Podudarajući se prefiks je cacheirani ulaz; sve nakon toga je običan ulaz.
  • Granularnost — Cache drži prompt u blokovima od 1,568 tokena, pa se prompt kraći od otprilike 1,500 tokena ne cacheira. Broj cacheiranih tokena u odgovoru je vaš broj ulaznih tokena pomnožen cacheiranim udjelom prompta, zaokružen prema dolje. Nije nužno višekratnik veličine bloka.
  • Bez pogotka — Zahtjev čiji početak nije u cacheu naplaćuje se po redovnoj cijeni ulaza. Za cacheirane promptove ne objavljuje se vijek trajanja i pogodak nije zajamčen: pročitajte usage da vidite što je zahtjev preuzeo iz cachea.
  • Bez prekidača — Zahtjev se ne uključuje izričito i nijedno polje ne isključuje keširanje.
  • Koji modeli — Svaki hostirani open-weight ID. GET /v1/models izvještava capabilities.prompt_caching: true i pricing.cached_input_per_million_usd za njih. Shannon modeli naplaćuju jednu fiksnu stopu.

Pogledajte cache pogodak u odgovoru

Pošaljite dva zahtjeva koji počinju istim dugim system promptom i ispišite upotrebu svakog. Prvi broj je ulaz zahtjeva, drugi je dio ulaza pročitan iz cachea.

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

Cjenovnik

Cacheirani ulazni tokeni naplaćuju se po 25% tarife ulaza modela, zaokruženo na $0.001 per 1M. Pisanje u cache ne košta ništa dodatno, a izlaz se naplaćuje uobičajeno. Cache tarifa za svaki ID nalazi se u tablici Models & pricing. Modeli i cijene

Ulaz poziva naplaćuje se kao (ulaz − cacheirano) × cijena ulaza + cacheirano × cijena cacheiranog. Broj cacheiranih tokena nikad nije veći od broja ulaznih.

Model Ulaz / 1M Cacheirani ulaz / 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

Zapisnik upotrebe navodi cacheirani ulaz svakog poziva. Njegovi naplaćeni tokeni i trošak već uključuju cijenu cacheiranog. Ključevi i upotreba

Polja upotrebe

Endpoint Cacheirani ulaz Rezoniranje
/v1/chat/completions usage.prompt_tokens_details.cached_tokens — dio prompt_tokens usage.completion_tokens_details.reasoning_tokens — dio completion_tokens
/v1/responses usage.input_tokens_details.cached_tokens — dio input_tokens usage.output_tokens_details.reasoning_tokens — dio output_tokens
/v1/messages usage.cache_read_input_tokens — prijavljeno odvojeno: input_tokens je necacheirani dio; cache_creation_input_tokens je uvijek 0 razmišljanje (thinking) se broji u output_tokens
{
  "usage": {
    "prompt_tokens": 20000,
    "completion_tokens": 812,
    "total_tokens": 20812,
    "prompt_tokens_details": {
      "cached_tokens": 18000
    },
    "completion_tokens_details": {
      "reasoning_tokens": 604
    }
  }
}

Streamani odgovor nosi ista polja u svojoj završnoj upotrebi. Ne morate je tražiti:

Endpoint Gdje stiže upotreba
/v1/chat/completions usage na zadnjem chunku prije data: [DONE]. Šalje se na svakom streamu.
/v1/responses response.usage događaja response.completed.
/v1/messages usage događaja message_delta. usage događaja message_start sadrži nule.

Kako postići više cache pogodaka

  • Održavajte sistemski prompt i definicije alata bajt-po-bajt stabilnima između poziva. Vrijednosti specifične za poziv, kao što su vremenski oznake ili ID-ovi zahtjeva, stavite na kraj posljednje poruke, a ne u sistemski prompt.
  • Samo dodajte na povijest. Uređivanje, skraćivanje ili sažimanje ranijih okreta mijenja prefiks, te se sve nakon prve promjene naplaćuje kao običan ulaz.
  • Nemojte mijenjati redoslijed alata, poruka ili blokova sadržaja između poziva, te svaki put na isti način serijalizirajte JSON (sheme alata, argumenti alata i rezultati).
  • U razgovoru ostanite na jednom id-u modela i pošaljite sljedeći poziv ubrzo nakon prethodnog.

API drži početak razgovora stabilnim u ovim slučajevima:

  • Poruka system ili developer poslana kasnije u razgovoru ostaje na svom mjestu. Ne mijenja početak prompta, pa okreti prije nje ostaju cacheirani.
  • Argumenti poziva alata u ranijim okretima asistenta uspoređuju se po vrijednosti. Redoslijed ključeva i razmaci tog JSON-a nisu važni.
  • Tri endpointa čitaju razgovor na isti način. Razgovor nastavljen na drugom endpointu zadržava zajednički prefiks kada je sadržaj isti.

Polja zahtjeva

Prihvaćeni su prompt_cache_key (Chat Completions i Responses) i cache_control na blokovima sadržaja Messages, tako da postojeći klijentski kod radi nepromijenjeno. Nijedan nije obavezan: keširanje je automatsko i radi isto i bez njih.

Polje Šalje se na Što je to
prompt_cache_key /v1/chat/completions, /v1/responses Cache routing ključ OpenAI API-ja.
cache_control /v1/messages Cache breakpoint na bloku sadržaja, bloku system ili poruci Anthropic API-ja.
stream_options /v1/chat/completions include_usage traži od OpenAI API-ja upotrebu na streamu. Ovdje svaki stream završava upotrebom.

Brojanje tokena

Dva besplatna endpointa, POST /v1/tokenize i POST /v1/messages/count_tokens, broje tokene teksta ili cijelog zahtjeva za hostirane open-weight modele prije nego ga pošaljete. Imaju vlastitu stranicu: Brojanje tokena