Saltar ao contido
Caché de prompts

Caché de prompts

AUTOMÁTICO

Os modelos hosted open-weight almacenan de forma automática os prefixos de prompt repetidos. Cando unha requisição comeza co mesmo prompt de sistema, ferramentas e mensaxes que unha requisição Recente no mesmo modelo, ese prefixo compartido léase da caché e factúrase ao 25% do prezo de entrada do modelo. Non hai nada que activar, e a escritura na caché é gratuíta.

Como funciona

  • Prefixo, por orde — O prompt léase por orde: prompt de sistema, definicións de ferramentas e, despois, as mensaxes. A caché coincide desde o inicio desa secuencia ata o primeiro token que difire.
  • Que debeda considerarse un acerto (hit) — Unha requisição cuxo prompt comeza co mesmo contido que unha requisição Recente —normalmente o turno anterior da mesma conversación con novas mensaxes engadidas. O prefixo coincidente é entrada almacenada; todo o que vén despois é entrada regular.
  • Granularidade — A caché garda un prompt en bloques de 1,568 tokens, así que un prompt máis curto que uns 1,500 tokens non se almacena na caché. O reconto de caché dunha resposta é o teu reconto de entrada multiplicado pola parte do prompt que está en caché, redondeado cara abaixo. Non é necesariamente un múltiplo do tamaño do bloque.
  • Sen acerto — Unha solicitude cuxo comezo non está na caché factúrase á tarifa de entrada normal. Non se publica ningunha duración para os prompts en caché e un acerto non está garantido: le usage para ver o que tomou da caché unha solicitude.
  • Sen interruptor — Unha solicitude non se acolle a ela, e ningún campo desactiva a caché.
  • Que modelos — Cada id de open-weight hosted. GET /v1/models informa de capabilities.prompt_caching: true e pricing.cached_input_per_million_usd para eles. Os modelos Shannon facturan unha tarifa plana.

Ver un acerto de caché nunha resposta

Envía dúas solicitudes que comecen co mesmo system prompt longo e imprime o uso de cada unha. O primeiro número é a entrada da solicitude; o segundo é a parte dela que se leu da caché.

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

Prezos

Os tokens de entrada almacenada factúranse ao 25% da tarifa de entrada do modelo, arredondado a $0.001 por 1M. Escribir na caché non custa extra, e a saída factúrase como de costume. A tarifa de caché de cada id está na táboa de Modelos e prezos. Modelos e prezos

A entrada dunha chamada cóbrase como (entrada − caché) × tarifa de entrada + caché × tarifa de caché. O reconto de caché nunca é maior que o reconto de entrada.

Modelo Entrada / 1M Entrada en caché / 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

O rexistro de uso lista a entrada en caché de cada chamada. Os seus tokens facturados e o custo xa inclúen a tarifa de caché. Claves e uso

Campos de uso

Endpoint Entrada almacenada Raciocinio
/v1/chat/completions usage.prompt_tokens_details.cached_tokens — parte de prompt_tokens usage.completion_tokens_details.reasoning_tokens — parte de completion_tokens
/v1/responses usage.input_tokens_details.cached_tokens — parte de input_tokens usage.output_tokens_details.reasoning_tokens — parte de output_tokens
/v1/messages usage.cache_read_input_tokens — informado aparte: input_tokens é a parte non almacenada; cache_creation_input_tokens é sempre 0 o pensamento (thinking) cúntase en output_tokens
{
  "usage": {
    "prompt_tokens": 20000,
    "completion_tokens": 812,
    "total_tokens": 20812,
    "prompt_tokens_details": {
      "cached_tokens": 18000
    },
    "completion_tokens_details": {
      "reasoning_tokens": 604
    }
  }
}

Unha resposta en stream leva os mesmos campos no seu uso final. Non fai falta pedilo:

Endpoint Onde chega o uso
/v1/chat/completions usage no último chunk antes de data: [DONE]. Envíase en todos os streams.
/v1/responses response.usage do evento response.completed.
/v1/messages usage do evento message_delta. O usage de message_start contén ceros.

Como conseguir máis acertos de caché

  • Mantén o prompt de sistema e as definicións de ferramentas estables byte por byte entre chamadas. Coloca valores de cada chamada, como marcas temporais ou ids de requisição, ao final da última mensaxe, non no prompt de sistema.
  • Só engade ao historial. Editar, recortar ou resumir turnos anteriores cambia o prefixo, e todo o que ven despois do primeiro cambio factúrase como entrada regular.
  • Non reordenes ferramentas, mensaxes ou bloques de contido entre chamadas, e serializa JSON (esquemas de ferramentas, argumentos e resultados) da mesma maneira cada vez.
  • Mantente nun só id de modelo durante unha conversa e envía a seguinte chamada pouco despois da anterior.

A API mantén estable o comezo dunha conversa nestes casos:

  • Unha mensaxe system ou developer enviada máis tarde nunha conversa queda no seu lugar. Non cambia o comezo do prompt, así que os turnos anteriores seguen na caché.
  • Os argumentos das chamadas a ferramentas en turnos anteriores do asistente compáranse por valor. A orde das claves e o espazado dese JSON non importan.
  • Os tres endpoints len unha conversa da mesma maneira. Unha conversa continuada noutro endpoint mantén o seu prefixo compartido cando o contido é o mesmo.

Campos da solicitude

Aceptanse prompt_cache_key (Chat Completions e Responses) e cache_control nos bloques de contido de Messages, polo que o código do cliente existente execútase sen cambios. Ningún dos dous é obrigatorio: o caching é automático e funciona igual sen eles.

Campo Enviado a Que é
prompt_cache_key /v1/chat/completions, /v1/responses Unha clave de enrutamento de caché da API de OpenAI.
cache_control /v1/messages Un punto de corte de caché nun bloque de contido, nun bloque system ou nunha mensaxe da API de Anthropic.
stream_options /v1/chat/completions include_usage pídelle á API de OpenAI o uso nun stream. Aquí todos os streams rematan co uso.

Contaxe de tokens

Dous endpoints gratuítos, POST /v1/tokenize e POST /v1/messages/count_tokens, contan os tokens dun texto ou dunha solicitude completa para os modelos open-weight alojados antes de que a envíes. Teñen a súa propia páxina: Reconto de tokens