Zum Inhalt springen
Prompt-Caching

Prompt-Caching

AUTOMATISCH

Die hosted open-weight Modelle cachen wiederholte Prompt-Präfixe automatisch. Wenn eine Anfrage mit demselben System-Prompt, denselben Tools und denselben vorangegangenen Nachrichten beginnt wie eine kürzlich erfolgte Anfrage desselben Modells, wird dieses gemeinsame Präfix aus dem Cache gelesen und mit 25 % des Input-Preises des Modells berechnet. Es muss nichts aktiviert werden, und das Schreiben in den Cache ist kostenlos.

Funktionsweise

  • Präfix, in dieser Reihenfolge — Der Prompt wird sequenziell gelesen: System-Prompt, Tool-Definitionen und dann die Nachrichten. Der Cache matcht vom Beginn dieser Sequenz bis zum ersten Token, das abweicht.
  • Was gilt als Hit — Eine Anfrage, deren Prompt mit demselben Inhalt beginnt wie eine kürzliche Anfrage — typischerweise der vorherige Turn derselben Konversation mit angehängten neuen Nachrichten. Das passende Präfix ist Cached Input; alles danach ist regulärer Input.
  • Granularität — Der Cache hält einen Prompt in Blöcken von 1,568 Tokens, daher wird ein Prompt, der kürzer als etwa 1,500 Tokens ist, nicht gecacht. Die Cached-Anzahl in einer Antwort ist Ihre Input-Anzahl multipliziert mit dem gecachten Anteil des Prompts, abgerundet. Sie ist nicht unbedingt ein Vielfaches der Blockgröße.
  • Ohne Hit — Eine Anfrage, deren Anfang nicht im Cache liegt, wird zum regulären Input-Preis berechnet. Für gecachte Prompts wird keine Lebensdauer veröffentlicht, und ein Hit ist nicht garantiert: Lesen Sie usage, um zu sehen, was eine Anfrage aus dem Cache bezogen hat.
  • Kein Schalter — Eine Anfrage muss nicht zustimmen, und kein Feld schaltet das Caching ab.
  • Welche Modelle — Jede hosted open-weight ID. GET /v1/models meldet capabilities.prompt_caching: true sowie pricing.cached_input_per_million_usd für diese. Shannon-Modelle berechnen einen Pauschaltarif.

Einen Cache-Hit in einer Antwort sehen

Senden Sie zwei Anfragen, die mit demselben langen System-Prompt beginnen, und geben Sie die Nutzungsdaten jeder aus. Die erste Zahl ist der Input der Anfrage, die zweite der Teil davon, der aus dem Cache gelesen wurde.

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

Preise

Cached Input Token werden mit 25 % des Input-Preises des Modells berechnet, gerundet auf $0,001 pro 1M. Das Schreiben in den Cache kostet nichts extra, und der Output wird wie gewohnt berechnet. Der Cached-Tarif jeder ID steht in der Tabelle Models & pricing. Modelle & Preise

Der Input eines Aufrufs wird berechnet als (Input − Cached) × Input-Preis + Cached × Cached-Preis. Die Cached-Anzahl ist nie größer als die Input-Anzahl.

Modell Input / 1M Cached 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

Das Nutzungsprotokoll listet den Cached Input jedes Aufrufs auf. Die abgerechneten Tokens und Kosten enthalten den Cached-Preis bereits. Keys & Nutzung

Usage-Felder

Endpunkt Cached Input Reasoning
/v1/chat/completions usage.prompt_tokens_details.cached_tokens — Teil von prompt_tokens usage.completion_tokens_details.reasoning_tokens — Teil von completion_tokens
/v1/responses usage.input_tokens_details.cached_tokens — Teil von input_tokens usage.output_tokens_details.reasoning_tokens — Teil von output_tokens
/v1/messages usage.cache_read_input_tokens — separat gemeldet: input_tokens ist der nicht gecachte Teil; cache_creation_input_tokens ist immer 0 Thinking wird in output_tokens gezählt
{
  "usage": {
    "prompt_tokens": 20000,
    "completion_tokens": 812,
    "total_tokens": 20812,
    "prompt_tokens_details": {
      "cached_tokens": 18000
    },
    "completion_tokens_details": {
      "reasoning_tokens": 604
    }
  }
}

Eine gestreamte Antwort trägt dieselben Felder in ihren abschließenden Nutzungsdaten. Sie müssen sie nicht anfordern:

Endpunkt Wo die Nutzungsdaten ankommen
/v1/chat/completions usage im letzten Chunk vor data: [DONE]. Es wird bei jedem Stream gesendet.
/v1/responses response.usage des Events response.completed.
/v1/messages usage des Events message_delta. Die usage von message_start enthält Nullen.

Mehr Cache-Hits erzielen

  • Halten Sie den System-Prompt und die Tool-Definitionen über Calls hinweg byte-identisch. Platzieren Sie variable Werte wie Zeitstempel oder Request-IDs am Ende der letzten Nachricht, nicht im System-Prompt.
  • Fügen Sie de Informationen nur an den Verlauf an. Das Editieren, Kürzen oder Zusammenfassen früherer Turns ändert das Präfix, und alles nach der ersten Änderung wird als regulärer Input berechnet.
  • Ändern Sie die Reihenfolge von Tools, Nachrichten oder Content-Blöcken zwischen Calls nicht und serialisieren Sie JSON (Tool-Schemas, Argumente und Ergebnisse) jedes Mal auf die gleiche Weise.
  • Bleiben Sie für eine Konversation bei einer Modell-ID und senden Sie den Folgeaufruf bald nach dem vorherigen.

Die API hält den Anfang einer Konversation in diesen Fällen stabil:

  • Eine system- oder developer-Nachricht, die später in einer Konversation gesendet wird, bleibt an ihrer Stelle. Sie ändert den Anfang des Prompts nicht, sodass die Turns davor gecacht bleiben.
  • Die Argumente von Tool-Aufrufen in früheren Assistant-Turns werden nach Wert verglichen. Schlüsselreihenfolge und Abstände dieses JSON spielen keine Rolle.
  • Die drei Endpunkte lesen eine Konversation auf dieselbe Weise. Eine Konversation, die an einem anderen Endpunkt fortgesetzt wird, behält ihr gemeinsames Präfix, wenn der Inhalt gleich ist.

Anfragefelder

prompt_cache_key (Chat Completions und Responses) sowie cache_control in Messages-Content-Blöcken werden akzeptiert, sodass bestehender Client-Code unverändert bleibt. Beides ist nicht erforderlich: Caching erfolgt automatisch und funktioniert auch ohne sie identisch.

Feld Gesendet an Was es ist
prompt_cache_key /v1/chat/completions, /v1/responses Ein Cache-Routing-Key der OpenAI API.
cache_control /v1/messages Ein Cache-Breakpoint an einem Content-Block, einem system-Block oder einer Nachricht der Anthropic API.
stream_options /v1/chat/completions include_usage fordert bei der OpenAI API die Nutzungsdaten eines Streams an. Hier endet jeder Stream mit Nutzungsdaten.

Token zählen

Zwei kostenlose Endpunkte, POST /v1/tokenize und POST /v1/messages/count_tokens, zählen für die gehosteten Open-Weight-Modelle die Tokens eines Textes oder einer ganzen Anfrage, bevor Sie sie senden. Sie haben eine eigene Seite: Token zählen