Gå til indhold
Prompt-caching

Prompt-caching

AUTOMATISK

De hosted open-weight modeller cacher gentagne prompt-præfikser automatisk. Når en anmodning starter med samme system prompt, værktøjer og tidligere beskeder som en nylig anmodning på samme model, læses dette fælles præfiks fra cache og afregnes til 25% af modellens input-pris. Der er intet at aktivere, og cache-skrivninger er gratis.

Hvordan det fungerer

  • Præfiks, i rækkefølge — Prompten læses i rækkefølge: system prompt, værktøjsdefinitioner og derefter beskederne. Cachen matcher fra starten af denne sekvens op til den første token, der afviger.
  • Hvad tæller som et hit — En anmodning hvis prompt starter med samme indhold som en nylig anmodning — typisk den forrige tur i den samme samtale med nye beskeder tilføjet. Det matchende præfiks er cached input; alt efter dette er regulært input.
  • Granularitet — Cachen rummer en prompt i blokke på 1,568 tokens, så en prompt på under ca. 1,500 tokens caches ikke. Det cachede antal i et svar er dit inputantal ganget med den cachede andel af prompten, rundet ned. Det er ikke nødvendigvis et multiplum af blokstørrelsen.
  • Uden hit — En anmodning, hvis begyndelse ikke findes i cachen, afregnes til den almindelige inputtakst. Der offentliggøres ingen levetid for cachede prompts, og et hit er ikke garanteret: læs usage for at se, hvad en anmodning tog fra cachen.
  • Ingen kontakt — En anmodning tilmelder sig ikke, og intet felt slår caching fra.
  • Hvilke modeller — Hvert hosted open-weight id. GET /v1/models rapporterer capabilities.prompt_caching: true og pricing.cached_input_per_million_usd for dem. Shannon-modeller afregnes med én flad takst.

Se et cache-hit i et svar

Send to anmodninger, der begynder med den samme lange system prompt, og udskriv forbruget for hver. Det første tal er anmodningens input, det andet er den del af det, der blev læst fra cachen.

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

Prissætning

Cached input tokens afregnes til 25% af modellens input-takst, afrundet til $0,001 per 1M. Skrivning til cachen koster ikke ekstra, og output afregnes som sædvanlig. Hvert ids cached-takst findes i tabellen Models & pricing. Modeller og priser

Et kalds input afregnes som (input − cachet) × inputtakst + cachet × cache-takst. Det cachede antal er aldrig større end inputantallet.

Model Input / 1M Cachet input / 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

Forbrugsloggen viser det cachede input for hvert kald. Dens afregnede tokens og omkostninger indeholder allerede cache-taksten. Nøgler og forbrug

Felter for brug

Endpoint Cachset input Reasoning
/v1/chat/completions usage.prompt_tokens_details.cached_tokens — del af prompt_tokens usage.completion_tokens_details.reasoning_tokens — del af completion_tokens
/v1/responses usage.input_tokens_details.cached_tokens — del af input_tokens usage.output_tokens_details.reasoning_tokens — del af output_tokens
/v1/messages usage.cache_read_input_tokens — rapporteret separat: input_tokens er den ikke-cached del; cache_creation_input_tokens er altid 0 thinking tælles i output_tokens
{
  "usage": {
    "prompt_tokens": 20000,
    "completion_tokens": 812,
    "total_tokens": 20812,
    "prompt_tokens_details": {
      "cached_tokens": 18000
    },
    "completion_tokens_details": {
      "reasoning_tokens": 604
    }
  }
}

Et streamet svar har de samme felter i sit sidste forbrug. Du behøver ikke bede om det:

Endpoint Hvor forbruget kommer
/v1/chat/completions usage i den sidste chunk før data: [DONE]. Det sendes på hver stream.
/v1/responses response.usage i hændelsen response.completed.
/v1/messages usage i hændelsen message_delta. usage i message_start indeholder nuller.

Få flere cache-hits

  • Hold system prompt og værktøjsdefinitioner byte-for-byte stabile på tværs af kald. Placer værdier per kald, såsom tidsstempler eller request-id'er, i slutningen af den seneste besked, ikke i system prompten.
  • Tilføj kun til historikken. Redigering, beskæring eller opsummering af tidligere ture ændrer præfikset, og alt efter den første ændring afregnes som regulært input.
  • Omorganiser ikke værktøjer, beskeder eller indholdsbokse mellem kald, og serialiser JSON (værktøjsskemaer, værktøjsargumenter og resultater) på samme måde hver gang.
  • Hold dig til ét model-id gennem en samtale, og send opfølgningskaldet kort efter det forrige.

API'et holder begyndelsen af en samtale stabil i disse tilfælde:

  • En system- eller developer-besked, der sendes senere i en samtale, bliver på sin plads. Den ændrer ikke begyndelsen af prompten, så turene før den forbliver cachet.
  • Argumenterne til værktøjskald i tidligere assistent-ture sammenlignes på værdi. Rækkefølgen af nøgler og mellemrum i den JSON er ligegyldig.
  • De tre endpoints læser en samtale på samme måde. En samtale, der fortsættes på et andet endpoint, beholder sit fælles præfiks, når indholdet er det samme.

Anmodningsfelter

prompt_cache_key (Chat Completions og Responses) og cache_control på Messages content blocks accepteres, så eksisterende klientkode kører uændret. Ingen af dem er påkrævet: caching er automatisk og fungerer på samme måde uden dem.

Felt Sendt til Hvad det er
prompt_cache_key /v1/chat/completions, /v1/responses En cache-routingnøgle fra OpenAI API'et.
cache_control /v1/messages Et cache-breakpoint på en indholdsblok, en system-blok eller en besked i Anthropic API'et.
stream_options /v1/chat/completions include_usage beder OpenAI API'et om forbrug på en stream. Her slutter hver stream med forbrug.

Tælling af tokens

To gratis endpoints, POST /v1/tokenize og POST /v1/messages/count_tokens, tæller tokens i en tekst eller i en hel anmodning for de hostede open-weight-modeller, før du sender den. De har deres egen side: Tælling af tokens