Sari la conținut
Caching de prompt

Caching de prompt

AUTOMAT

Modelele hosted open-weight cachează automat prefixele de prompt repetate. Când o cerere începe cu același prompt de sistem, instrumente și mesaje anterioare ca o cerere recentă pe același model, acel prefix partajat este citit din cache și facturat la 25% din prețul de intrare al modelului. Nu este necesară nicio activare, iar scrierea în cache este gratuită.

Cum funcționează

  • Prefix, în ordine — Promptul este citit în ordine: prompt de sistem, definiții de instrumente, apoi mesajele. Cache-ul se potrivește de la începutul acelei secvențe până la primul token care diferă.
  • Ce se consideră un „hit” — O cerere al cărei prompt începe cu același conținut ca o cerere recentă — în general, runda anterioară a aceleiași conversații cu mesaje noi adăugate. Prefixul corespunzător este intrare din cache; tot ce urmează este intrare regulată.
  • Granularitate — Cache-ul păstrează un prompt în blocuri de 1,568 token-uri, deci un prompt mai scurt de aproximativ 1,500 token-uri nu este pus în cache. Numărul din cache dintr-un răspuns este numărul tău de intrare înmulțit cu partea din prompt aflată în cache, rotunjit în jos. Nu este neapărat un multiplu al dimensiunii blocului.
  • Fără hit — O cerere al cărei început nu se află în cache este facturată la tariful obișnuit de intrare. Nu se publică nicio durată de viață pentru prompt-urile din cache și un hit nu este garantat: citește usage pentru a vedea ce a luat o cerere din cache.
  • Fără comutator — O cerere nu trebuie să se înscrie și niciun câmp nu dezactivează caching-ul.
  • Ce modele — Orice ID hosted open-weight. GET /v1/models raportează capabilities.prompt_caching: true și pricing.cached_input_per_million_usd pentru acestea. Modelele Shannon facturează un tarif fix.

Vezi un cache hit într-un răspuns

Trimite două cereri care încep cu același system prompt lung și afișează utilizarea fiecăreia. Primul număr este intrarea cererii, al doilea este partea din ea citită din cache.

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

Prețuri

Token-urile de intrare din cache sunt facturate la 25% din tariful de intrare al modelului, rotunjit la $0.001 per 1M. Scrierea în cache nu costă suplimentar, iar ieșirea este facturată ca ownțial. Tariful de cache pentru fiecare ID se află în tabelul Models & pricing. Modele și prețuri

Intrarea unui apel este taxată ca (intrare − din cache) × tarif de intrare + din cache × tarif cache. Numărul din cache nu este niciodată mai mare decât numărul de intrare.

Model Intrare / 1M Intrare din cache / 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

Jurnalul de utilizare listează intrarea din cache a fiecărui apel. Token-urile facturate și costul includ deja tariful cache. Chei și utilizare

Câmpuri de utilizare

Endpoint Intrare cache Raționament
/v1/chat/completions usage.prompt_tokens_details.cached_tokens — parte din prompt_tokens usage.completion_tokens_details.reasoning_tokens — parte din completion_tokens
/v1/responses usage.input_tokens_details.cached_tokens — parte din input_tokens usage.output_tokens_details.reasoning_tokens — parte din output_tokens
/v1/messages usage.cache_read_input_tokens — raportat separat: input_tokens este partea necache-uită; cache_creation_input_tokens este întotdeauna 0 gândirea este numărată în output_tokens
{
  "usage": {
    "prompt_tokens": 20000,
    "completion_tokens": 812,
    "total_tokens": 20812,
    "prompt_tokens_details": {
      "cached_tokens": 18000
    },
    "completion_tokens_details": {
      "reasoning_tokens": 604
    }
  }
}

Un răspuns în streaming poartă aceleași câmpuri în utilizarea finală. Nu trebuie să o ceri:

Endpoint Unde sosește utilizarea
/v1/chat/completions usage pe ultimul chunk dinaintea data: [DONE]. Este trimis pe fiecare stream.
/v1/responses response.usage al evenimentului response.completed.
/v1/messages usage al evenimentului message_delta. usage din message_start conține zerouri.

Cum să obțineți mai multe cache hits

  • Mențineți promptul de sistem și definițiile instrumentelor stabile byte-la-byte între apeluri. Plasați valorile specifice fiecărui apel, cum ar fi timestamp-urile sau ID-urile de cerere, la sfârșitul ultimului mesaj, nu în promptul de sistem.
  • Adăugați doar la finalul istoricului. Editarea, tăierea sau rezumarea rundelor anterioare modifică prefixul, iar tot ce urmează după prima modificare este facturat ca intrare regulată.
  • Nu reordonați instrumentele, mesajele sau blocurile de conținut între apeluri și serializați JSON (schemele instrumentelor, argumentele și rezultatele instrumentelor) la fel de own dată.
  • Rămâi la același id de model pe durata unei conversații și trimite apelul următor la scurt timp după cel dinainte.

API-ul menține stabil începutul unei conversații în aceste cazuri:

  • Un mesaj system sau developer trimis mai târziu într-o conversație rămâne la locul lui. Nu schimbă începutul prompt-ului, deci rundele de dinaintea lui rămân în cache.
  • Argumentele apelurilor de instrument din rundele anterioare ale asistentului sunt comparate după valoare. Ordinea cheilor și spațierea acelui JSON nu contează.
  • Cele trei endpoint-uri citesc o conversație în același mod. O conversație continuată pe alt endpoint își păstrează prefixul comun când conținutul este același.

Câmpuri de cerere

prompt_cache_key (pentru Chat Completions și Responses) și cache_control pe blocurile de conținut Messages sunt acceptate, astfel încât codul client existent funcționează fără modificări. Niciunul nu este obligatoriu: caching-ul este automat și funcționează la fel și fără ele.

Câmp Trimis către Ce reprezintă
prompt_cache_key /v1/chat/completions, /v1/responses O cheie de rutare cache a API-ului OpenAI.
cache_control /v1/messages Un punct de întrerupere cache pe un bloc de conținut, pe un bloc system sau pe un mesaj al API-ului Anthropic.
stream_options /v1/chat/completions include_usage cere API-ului OpenAI utilizarea pe un stream. Aici fiecare stream se încheie cu utilizarea.

Numărarea token-urilor

Două endpoint-uri gratuite, POST /v1/tokenize și POST /v1/messages/count_tokens, numără token-urile unui text sau ale unei cereri întregi pentru modelele open-weight găzduite înainte să o trimiți. Ele au propria pagină: Numărarea token-urilor