
LLM Prompt-buffer: Senk API-kostnadene med 90% (Alle 3 Leverandører)
LLM prompt-bufring lar deg gjenbruke tidligere behandlede tokens på tvers av API-kall -- noe som senker inndatakostnadene med opptil 90% og reduserer tid til første token med opptil 85%. Hvis du sender samme systemmelding, verktøydefinisjoner eller few-shot-eksempler i hver forespørsel, betaler du full pris for arbeid som GPU-en allerede har gjort.
Denne guiden dekker OpenAI, Anthropic og Gemini med samme chatbot implementert i alle tre SDK-er -- noe ingen annen guide gjør. Vi dekker også Anthropics automatiske bufring-oppdatering fra februar 2026, produksjonskostnadsscenarier med virkelige dollarbeløp, og anti-mønstrene som stille ødelegger cache-treffprosenten din.
<!-- IMAGE: KV cache reuse flow diagram showing prompt prefix matching, cache hit path (fast, cheap), and cache miss path (standard processing) -->Hurtigsammendrag -- Alle Tre Leverandører i Ett Blikk
Før vi dykker inn i implementeringsdetaljer, her er den fullstendige sammenligningen. Hvis du allerede vet hvilken leverandør du bruker, hopp direkte til den seksjonen. Hvis du evaluerer, forteller denne tabellen deg alt på 10 sekunder.
| Funksjon | OpenAI | Anthropic | Gemini |
|---|---|---|---|
| Bufringstype | Automatisk | Automatisk + Eksplisitt | Implisitt + Eksplisitt |
| Minste tokens | 1 024 | 1 024 (de fleste modeller) | 1 024 (Flash) / 4 096 (Pro) |
| TTL | 5-10 min (opptil 24t utvidet) | 5 min eller 1 time | Konfigurerbar (standard 1 time) |
| Kostnad for buffer-skriving | 1x (ingen ekstra kostnad) | 1,25x (5 min) / 2x (1 time) | 1x (ingen ekstra kostnad) |
| Rabatt på buffer-lesing | 50% på inndata | 90% på inndata | ~90% på inndata |
| Buffer-isolasjon | Organisasjon | Arbeidsområde | Prosjekt |
| Strømmingstøtte | Ja | Ja | Ja |
| Svarfelt for buffer-treff | cached_tokens | cache_read_input_tokens | cachedContentTokenCount |
| Eksplisitt kontroll | Nei | Ja (cache_control) | Ja (navngitte buffer-objekter) |
| Siste store oppdatering | Okt. 2024 | Feb. 2026 (automatisk bufring) | 2026 (implisitt bufring) |
Nøkkelkonklusjon: OpenAI er enklest (null konfigurasjon, 50% rabatt). Anthropic gir den dypeste rabatten (90%) med mest kontroll. Gemini tilbyr konfigurerbar TTL og implisitt bufring på 2.5+-modeller med sammenlignbare rabatter som Anthropic.
Hvordan Fungerer LLM Prompt-bufring?
Du trenger ikke forstå interne transformer-mekanismer for å bruke prompt-bufring effektivt. Men du trenger å forstå ett konsept: prefiksmatching.
KV-bufferen på 60 Sekunder
Når et LLM behandler prompten din, beregner det oppmerksomhetstilstander (nøkkel-verdipar) for hvert token. Disse KV-buffer-oppføringene er den dyre delen -- de forbruker GPU-minne og beregningstid. Prompt-bufring lagrer disse beregnede tilstandene slik at neste forespørsel med samme prefiks hopper over omberegning helt.
Det kritiske ordet er prefiks. Bufferen matcher fra starten av prompten din. Hvis de første 2 000 tokenene matcher en bufret oppføring, men token 2 001 er annerledes, serveres disse første 2 000 tokenene fra bufferen. Alt etter divergenspunktet beregnes på nytt.
Det er derfor rekkefølgen i prompten er viktig. Strukturer promptene dine slik:
- Verktøydefinisjoner (mest statiske)
- Systemmelding
- Statiske few-shot-eksempler
- Hentet kontekst (semi-dynamisk)
- Samtalehistorikk (vokser per tur)
- Brukerforespørsel (alltid forskjellig)
Statisk innhold først, dynamisk innhold sist. Jo flere tokens som matcher det bufrede prefikset, jo større er besparingene.
Prompt-bufring vs Semantisk Bufring vs Svarbufring
Disse tre begrepene blandes stadig vekk. Prompt-bufring (hva denne guiden handler om) gjenbruker beregnede KV-tilstander på GPU-nivå for identiske tokenprefiks -- null nøyaktighetstap, samme utdata som uten buffer. Semantisk bufring bruker innbyggingslikhet for å returnere tidligere genererte svar for "tilstrekkelig like" spørringer -- raskere men kan returnere feil svar. Svarbufring lagrer eksakte inndata-utdata-par og returnerer det bufrede svaret ord for ord -- fungerer bare for virkelig identiske forespørsler.
Prompt-bufring er den eneste "gratis optimaliseringen" -- den reduserer kostnad og latens uten nøyaktighetskompromisser. For den dype transformer-matematikken bak KV-bufring målte Hugging Faces tekniske artikkel en ~5,21x hastighetsøkning på T4-GPU-er.
Hvordan Håndterer OpenAI Prompt-bufring?
OpenAIs prompt-bufring er fullstendig automatisk. Siden oktober 2024 drar hvert API-kall med 1 024+ inndatatokens automatisk nytte av bufring. Ingen opt-in, ingen headere, ingen kodeendringer.
Hvordan OpenAIs Automatiske Bufring Fungerer
Når du sender en forespørsel med minst 1 024 tokens, sjekker OpenAI om prefikset matcher en nylig forespørsel fra organisasjonen din. Buffer-treff koster 50% av standardprisen for inndatatoken. Etter den innledende terskelen på 1 024 tokens matcher bufferen i 128-token-trinn.
Bufferen lever i 5-10 minutter under normal bruk og kan vedvare i opptil 24 timer i lavinnsatsperioder. Den er avgrenset per organisasjon, slik at ulike prosjekter innen samme organisasjon drar nytte av delte buffere.
Støttede modeller inkluderer GPT-4o, GPT-4o-mini, GPT-4.1, o1, o3-mini og alle nyere modeller.
OpenAI Python SDK Eksempel
from openai import OpenAI
client = OpenAI()
# Denne systemmeldingen er ~2 000 tokens -- godt over minimumet på 1 024
SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""
def chat(user_message: str) -> str:
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_message},
],
)
# Kontroller om bufring ble aktivert
usage = response.usage
cached = usage.prompt_tokens_details.cached_tokens
total_input = usage.prompt_tokens
print(f"Cached: {cached}/{total_input} tokens ({cached/total_input*100:.0f}%)")
return response.choices[0].message.content
# Første kall: buffer-miss (full pris)
chat("Review this async function for race conditions...")
# Andre kall innen 5-10 min: buffer-treff (50% rabatt på bufrede tokens)
chat("Now optimize the same function for throughput...")Det første kallet behandler alt til full pris og fyller bufferen. Det andre kallet gjenbruker de bufrede systemmeldingstokenene til halvpris. Du ser noe som Cached: 1920/2048 tokens (94%) i utdataen.
Konklusjon: OpenAI er lettest å begynne med -- null konfigurasjon, bufring skjer bare. 50%-rabatten er den laveste av de tre leverandørene, men ingenting slår enkelheten.
Hvordan Håndterer Anthropic/Claude Prompt-bufring?
Anthropic tilbyr to moduser: automatisk bufring (aktivert som standard siden februar 2026) og eksplisitt bufring med cache_control-bryteropunkter. Topptallet er vanskelig å ignorere -- bufrede lesinger koster bare 10% av standard inndatapris, en 90% rabatt.
Automatisk vs Eksplisitt Bufring (Oppdatering 2026)
Fra 5. februar 2026 aktiverer Anthropic automatisk bufring som standard for alle kvalifiserte prompter. Du trenger ikke lenger den gamle beta-headeren. Systemet bestemmer automatisk optimale buffer-bryteropunkter.
Eksplisitt bufring er fortsatt tilgjengelig når du vil ha detaljert kontroll. Du plasserer cache_control: {"type": "ephemeral"} på spesifikke innholdsblokker for å markere nøyaktig hvor buffer-grensen skal være. Dette er nyttig når prompten din har en bestemt struktur og du vil garantere at visse seksjoner bufres.
Det finnes to TTL-alternativer:
- 5-minutters buffer (standard): skrivekostnader 1,25x basisinndatapris, lesekostnader 0,1x. Lønner seg etter 1 buffer-treff.
- 1-times buffer: skrivekostnader 2x basisinndatapris, lesekostnader 0,1x. Lønner seg etter 2 buffer-treff. Tilgjengelig på Claude 4.5+-modeller.
Buffer-isolasjon endret seg fra organisasjonsnivå til arbeidsområdenivå 5. februar 2026. Det betyr at ulike arbeidsområder innen samme organisasjon har separate buffere.
Når du arbeider med Anthropics bufring, hjelper det å strukturere prompten din for optimal bufring -- å plassere statisk innhold før dynamisk er enda viktigere her siden du betaler en skriveomkostning.
Anthropic Python SDK Eksempel
import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""
def chat(user_message: str) -> str:
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[
{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"}, # Eksplisitt bryteropunkt
}
],
messages=[
{"role": "user", "content": user_message},
],
)
# Les buffer-statistikk fra svaret
usage = response.usage
created = usage.cache_creation_input_tokens
read = usage.cache_read_input_tokens
standard = usage.input_tokens
print(f"Cache write: {created}, Cache read: {read}, Standard: {standard}")
return response.content[0].text
# Første kall: cache_creation_input_tokens = ~1920 (skriving ved 1,25x)
chat("Review this async function for race conditions...")
# Andre kall: cache_read_input_tokens = ~1920 (lesing ved 0,1x -- 90% rabatt!)
chat("Now optimize the same function for throughput...")Forstå Buffer-skriving vs Buffer-lesing Prising
Her blir Anthropics prising interessant. Med Claude Sonnet 4.5 ($3/MTok basisinndata) som eksempel:
- Standardinndata: $3,00 per million tokens
- Buffer-skriving (5 min): $3,75 per million tokens (1,25x) -- du betaler mer første gang
- Buffer-lesing: $0,30 per million tokens (0,1x) -- 90% billigere ved hvert påfølgende treff
5-minuttersbufferen lønner seg etter bare 1 lesing. 1-timesbufferen ($6,00/MTok skriving) lønner seg etter 2 lesinger. Hvis du gjør mer enn et par forespørsler per minutt med samme prefiks, er matematikken overveldende i din favør.
Konklusjon: Anthropic gir den dypeste rabatten (90%) og mest kontroll. Beste valg for høyvolumsbelastninger som er kostnadssensitive.
Hvordan Håndterer Google Gemini Prompt-bufring?
Gemini tar en annen tilnærming med to distinkte bufringsmekanismer: eksplisitt kontekstbufring (navngitte buffer-objekter du oppretter og refererer til) og implisitt bufring (automatisk, null konfigurasjon, lagt til i 2026 for Gemini 2.5+-modeller).
Eksplisitt Kontekstbufring (Navngitte Buffere)
I motsetning til OpenAI og Anthropic der bufring er transparent, krever Geminis eksplisitte bufring at du først oppretter et navngitt buffer-objekt og deretter refererer til det i påfølgende forespørsler. Minimums token-terskelen er 1 024 tokens for Gemini Flash-modeller og 4 096 tokens for Pro-modeller. TTL er konfigurerbar -- standard er 1 time, men du kan sette den til hva du trenger.
Bufrede tokens på Gemini 2.5 Pro er priset til $0,125/MTok mot standard inndatapris på $1,25/MTok -- en 90% rabatt. Det er også en lagringskostnad på $4,50 per million tokens per time for Pro og $1,00 for Flash.
Implisitt Bufring i Gemini 2.5 (2026)
Fra og med Gemini 2.5 Pro og Flash la Google til implisitt bufring -- automatisk bufring som fungerer som OpenAIs tilnærming. Ingen konfigurasjon nødvendig. Plasser stort, felles innhold i starten av prompten din og send forespørsler med lignende prefiks i rask rekkefølge. Systemet oppdager automatisk bufringskvalifisert innhold og sender besparingene videre.
Gemini Python SDK Eksempel
from google import genai
from google.genai import types
client = genai.Client()
SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""
# Trinn 1: Opprett et navngitt buffer-objekt
cache = client.caches.create(
model="gemini-2.5-flash",
config=types.CreateCachedContentConfig(
display_name="python-review-guidelines",
system_instruction=SYSTEM_PROMPT,
ttl="3600s", # 1 time
),
)
print(f"Cache created: {cache.name}, expires: {cache.expire_time}")
# Trinn 2: Bruk bufferen i forespørsler
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="Review this async function for race conditions...",
config=types.GenerateContentConfig(
cached_content=cache.name,
),
)
# Kontroller buffer-bruk i svaret
metadata = response.usage_metadata
print(f"Cached tokens: {metadata.cached_content_token_count}")
print(f"Total input tokens: {metadata.prompt_token_count}")Den eksplisitte tilnærmingen har en stor fordel: du kontrollerer TTL nøyaktig. Hvis du vet at batchjobben din kjører i 4 timer, sett en TTL på 4 timer og unngå at bufferen utløper midt i behandlingen.
Konklusjon: Geminis konfigurerbare TTL og to bufringsmoduser (eksplisitt + implisitt) gjør det allsidig. Minimumsterskelen er nå sammenlignbar med andre leverandører, og 90%-rabatten på bufrede lesinger tilsvarer Anthropic.
Kode-sammenligning Side om Side -- Samme Brukstilfelle, Alle 3 Leverandører
Her er samme chatbot med en bufret systemmelding, implementert i alle tre SDK-er. Sammenlign utviklingsopplevelsen direkte.
# --- OpenAI: Null konfigurasjon, bare kall API-et ---
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT}, # Bufret automatisk
{"role": "user", "content": user_message},
],
)
cached = response.usage.prompt_tokens_details.cached_tokens# --- Anthropic: Eksplisitt cache_control-bryteropunkt ---
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"}, # Marker buffer-grense
}],
messages=[{"role": "user", "content": user_message}],
)
cached = response.usage.cache_read_input_tokens# --- Gemini: Navngitt buffer-objekt ---
from google import genai
from google.genai import types
client = genai.Client()
cache = client.caches.create(
model="gemini-2.5-flash",
config=types.CreateCachedContentConfig(
system_instruction=SYSTEM_PROMPT,
ttl="3600s",
),
)
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=user_message,
config=types.GenerateContentConfig(cached_content=cache.name),
)
cached = response.usage_metadata.cached_content_token_count| Aspekt | OpenAI | Anthropic | Gemini |
|---|---|---|---|
| Konfigurasjonskompleksitet | Ingen | Legg til cache_control-blokk | Opprett buffer-objekt først |
| Buffer-kontroll | Kun automatisk | Automatisk eller eksplisitt | Implisitt eller eksplisitt |
| Rabatt på bufret lesing | 50% | 90% | ~90% |
| Minste tokens | 1 024 | 1 024 | 1 024 (Flash) / 4 096 (Pro) |
| DX-konklusjon | Enklest | Mest kontroll | Mest fleksibel TTL |
Hvis du vil ha besparelser uten anstrengelse, velg OpenAI. Hvis du vil ha den dypeste rabatten og detaljert kontroll, velg Anthropic. Hvis du trenger konfigurerbare buffer-levetider eller allerede er på Google Cloud, velg Gemini.
Produksjonskostnadskalkulator -- Virkelige Besparelser i Stor Skala
Abstrakte prosenter styrer ikke beslutninger. Dollarbeløp gjør det. Her er tre produksjonsscenarier med virkelige kostnadsestimater ved bruk av Claude Sonnet 4.5 ($3/MTok inndata), GPT-4o ($2,50/MTok inndata) og Gemini 2.5 Pro ($1,25/MTok inndata).
Priser verifisert mars 2026. Sjekk Anthropic, OpenAI og Gemini for gjeldende satser.
Forutsetninger: 80% buffer-treffprosent (realistisk for velstrukturerte prompter), utdatatokens ekskludert siden bufring bare påvirker inndatakostnader.
| Scenario | Uten Bufring (månedlig) | Med OpenAI Bufring | Med Anthropic Bufring | Med Gemini Bufring |
|---|---|---|---|---|
| Hobby-chatbot: 100 forespørsler/dag, 2K systemmelding | OpenAI: $15 / Anthropic: $18 / Gemini: $7,50 | $12 (sparer $3) | $5,40 (sparer $12,60) | $2,25 (sparer $5,25) |
| Growth-API: 10K forespørsler/dag, 8K bufret prefiks | OpenAI: $600 / Anthropic: $720 / Gemini: $300 | $360 (sparer $240) | $144 (sparer $576) | $60 (sparer $240) |
| Enterprise-pipeline: 100K forespørsler/dag, 10K bufret prefiks | OpenAI: $7 500 / Anthropic: $9 000 / Gemini: $3 750 | $4 500 (sparer $3 000) | $1 800 (sparer $7 200) | $750 (sparer $3 000) |
På Growth-nivå sparer Anthropic-bufring $576/måned til tross for en høyere basispriss enn OpenAI. På Enterprise-skala ser vi på $7 200/måned i besparelser med Anthropic -- eller $86 400 per år. Det tilsvarer en senioringeniørs lønn spart fra en konfigurasjonsendring.
Mønsteret er klart: jo høyere forespørselsvolum og jo lenger det statiske prefikset, jo mer sparer bufring. Anthropics 90%-rabatt dominerer i stor skala, men Geminis lavere basispriss gjør det konkurransedyktig når man tar totalkostnaden i betraktning.
Prompt-bufring Anti-mønstre -- Når Man IKKE skal Bufre
Bufring virker enkelt til cache-treffprosenten din mystisk sitter på 0%. Her er feilene som stille ødelegger prompt-bufring -- og hvordan fikse dem.
Buffer-ødeleggende Feil (Med Løsninger)
Tidsstempler i systemmeldinger -- Den vanligste feilen. Hvis systemmeldingen din inneholder datetime.now(), endres buffer-nøkkelen hvert sekund.
# DÅRLIG: Buffer-miss ved hver enkelt forespørsel
system_prompt = f"""You are a helpful assistant.
Current time: {datetime.now().isoformat()}
Always be helpful and accurate."""
# BRA: Flytt tidsstempelet til brukermeldingen
system_prompt = """You are a helpful assistant.
Always be helpful and accurate."""
user_message = f"[Current time: {datetime.now().isoformat()}]\n{user_query}"Brukerspesifikt innhold før statisk innhold -- Hvis du legger session_id eller brukerpreferanser i starten, får hver bruker et unikt prefiks.
# DÅRLIG: Unikt prefiks per bruker = null buffer-gjenbruk
messages = [
{"role": "system", "content": f"User ID: {user_id}\nPreferences: {prefs}\n{GUIDELINES}"},
{"role": "user", "content": query},
]
# BRA: Statisk innhold først, brukerkontekst til slutt
messages = [
{"role": "system", "content": GUIDELINES}, # Samme for alle brukere -> bufret
{"role": "user", "content": f"Context: User {user_id}, prefs: {prefs}\n{query}"},
]| Anti-mønster | Hvorfor Det Ødelegger Bufferen | Løsning |
|---|---|---|
| Tidsstempler i systemmelding | Prefiks endres hvert sekund | Flytt tidsstempel til brukermelding |
| Økt-/bruker-ID-er i prefiks | Unikt prefiks per bruker | Flytt brukerkontekst etter statisk innhold |
| Roterende few-shot-eksempler | Forskjellige eksempler = annet prefiks | Bruk et fast sett med eksempler |
| Dynamiske verktøydefinisjoner | Skiftende verktøy = prefiksmismatch | Hold verktøyskjemaer statiske |
| Korte prompter (under minimum) | Bufferen aktiveres rett og slett ikke | Konsolider kontekst for å overskride 1 024 tokens |
| Personalisering per forespørsel i systemmelding | Systemmeldingen endres ved hvert kall | Bruk en delt systemmelding + brukerspesifikke meldinger |
Når Prompt-bufring Virkelig Ikke Hjelper
Noen scenarier vil ikke dra nytte av bufring selv om du strukturerer promptene dine perfekt:
- Engangsprompter: Hvis hver forespørsel har en helt unik kontekst uten delt prefiks, er det ingenting å bufre.
- Svært korte prompter: Under 1 024 tokens (OpenAI/Anthropic) eller 4 096 tokens (Gemini Pro) aktiveres ikke bufring.
- Sjeldne forespørsler: Hvis forespørsler er timer fra hverandre, utløper bufferen før en andre forespørsel ankommer. OpenAIs 5-10-minuttersvindu og Anthropics standard-TTL på 5 minutter betyr at du trenger jevn trafikk.
Fungerer Prompt-bufring med Strømming?
Ja. Prompt-bufring og strømming er uavhengige -- bufring opererer på inndatatokens, strømming påvirker utdataleveransen. De løser ulike problemer i ulike stadier av forespørselslivssyklusen.
Bufferen håndterer prefill-fasen (behandling av inndataprompten din). Strømming håndterer dekodingsfasen (inkrementell generering og sending av utdatatokens). Du drar nytte av begge fordelene samtidig: raskere prefill fra buffer-treffet, pluss progressiv utdataleveranse fra strømming.
Her er et strømmingseksempel med bufring aktivert:
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
system=[{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"},
}],
messages=[{"role": "user", "content": "Explain Python's GIL..."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
# Etter strømming fullføres, kontroller buffer-statistikk
usage = stream.get_final_message().usage
print(f"\nCache read: {usage.cache_read_input_tokens} tokens")TTFT-forbedringen fra bufring er faktisk mest merkbar med strømming. Uten bufring venter du på full prefill-fase før det første tokenet strømmes tilbake. Med bufring er prefill-fasen nesten umiddelbar, så tokens begynner å flyte nesten umiddelbart.
Hvordan Overvåke Buffer-treffprosenter i Produksjon
Å sette opp bufring er halve jobben. Å vite om det faktisk fungerer er den andre halvdelen. Hvis buffer-treffprosenten din faller under 50%, har noe endret seg i promptstrukturen din og du lar penger ligge på bordet.
Leverandørspesifikk Buffer-statistikk
| Leverandør | Buffer-lesefelt | Buffer-skrivefelt | Totalt inndatafelt |
|---|---|---|---|
| OpenAI | usage.prompt_tokens_details.cached_tokens | N/A (automatisk) | usage.prompt_tokens |
| Anthropic | usage.cache_read_input_tokens | usage.cache_creation_input_tokens | usage.input_tokens |
| Gemini | usageMetadata.cachedContentTokenCount | N/A (eksplisitt buffer-objekt) | usageMetadata.promptTokenCount |
En Enkel Buffer-treffprosent Logg
Her er en hjelpefunksjon du kan legge inn i ethvert prosjekt for å spore buffer-treffprosenter via API-svarfelt:
import logging
logger = logging.getLogger("cache_monitor")
def log_cache_metrics(provider: str, usage: dict) -> float:
"""Ekstraherer og logger buffer-statistikk fra hvilken som helst leverandørs svar. Returnerer treffprosent."""
if provider == "openai":
cached = getattr(usage.prompt_tokens_details, "cached_tokens", 0)
total = usage.prompt_tokens
elif provider == "anthropic":
cached = usage.cache_read_input_tokens
created = usage.cache_creation_input_tokens
total = cached + created + usage.input_tokens
elif provider == "gemini":
cached = getattr(usage, "cached_content_token_count", 0)
total = usage.prompt_token_count
else:
raise ValueError(f"Unknown provider: {provider}")
hit_rate = (cached / total * 100) if total > 0 else 0
logger.info(f"[{provider}] Cache hit rate: {hit_rate:.1f}% ({cached}/{total} tokens)")
if hit_rate < 50:
logger.warning(f"[{provider}] Low cache hit rate! Check prompt structure.")
return hit_rateEt sunt produksjonssystem bør opprettholde 70-90% buffer-treffprosenter. Hvis du er under 50%, gå gjennom anti-mønsterseksjonen på nytt. Du kan også integrere dette med automatiserte evalueringsmålinger for å fange opp regresjoner i promptpipelinen din.
Prompt-bufring i Virkelige Brukstilfeller
Chatbot-eksemplene ovenfor illustrerer mekanismene, men prompt-bufring virkelig skinner i spesifikke arkitekturmønstre.
RAG-pipelines
I et RAG-oppsett er systemmeldingen din og few-shot-eksemplene statiske for alle spørringer. De hentede dokumentene endrer seg hver gang. Strukturer prompten din for å maksimere det bufrede prefikset:
- Systemmelding (bufret)
- Few-shot-eksempler (bufret)
- Hentede dokumenter (dynamisk -- kommer sist)
- Brukerforespørsel (alltid unik)
Med en systemmelding på 5 000 tokens og 3 000 tokens few-shot-eksempler er det 8 000 bufrede tokens ved hver forespørsel. Med 1 000 forespørsler/dag på Anthropic ville du spare omtrent $6,50/dag bare på det bufrede prefikset. Når du henter og bufrer kontekstblokker, sørg for at hentingsutdataen kommer etter det statiske prefikset.
Flerturs Chatbots
Flerturssamtaler er et sterkt punkt for prompt-bufring. Hver tur legges til samtalehistorikken, men hele den forrige samtalen er allerede bufret fra tidligere turer. Buffer-fordelen akkumuleres -- ved tur 10 kan du ha 15 000 bufrede historikktokens med bare 200 ferske tokens fra siste brukermelding.
Agentiske Systemer og MCP Verktøydefinisjoner
Hvis du bygger agenter med verktøybruk, er verktøydefinisjonene dine statiske JSON-skjemaer som gjentas ved hvert enkelt API-kall. En typisk agent kan ha 20+ verktøy som totalt utgjør 3 000-5 000 tokens med definisjoner. Det er utmerket bufringsmateriale.
Dette er spesielt relevant for MCP-baserte arkitekturer der serververktøydefinisjoner sendes ved hvert kall. Med Anthropics eksplisitte cache_control kan du markere tools-arrayen for bufring og garantere at disse tokenene gjenbrukes.
Hvilken Leverandør Bør Du Velge?
| Hvis Du Trenger... | Beste Valg | Hvorfor |
|---|---|---|
| Null konfigurasjon, bare besparelser | OpenAI | Automatisk bufring, ingen kodeendringer nødvendig |
| Maksimal kostnadsreduksjon (90%) | Anthropic | 0,1x bufret lesepris, dypeste rabatt |
| Detaljert buffer-kontroll | Anthropic | Eksplisitte bryteropunkter + konfigurerbar TTL (5 min eller 1 time) |
| Analyse av lange dokumenter | Gemini | Konfigurerbar TTL med eksplisitte navngitte buffere |
| Enkelhet for flerturs-chat | OpenAI | Automatisk prefiksmatching på voksende samtalehistorikk |
| Agentiske systemer med verktøydefinisjoner | Anthropic | Bufre verktøydefinisjoner eksplisitt med cache_control |
| Flerleverandør fleksibilitet | LiteLLM | Enhetlig bufringssyntaks for alle leverandører |
Hvis du allerede bruker en leverandør, begynn der -- prompt-bufring krever ikke bytte. LiteLLM fungerer som et proxylager som normaliserer bufringsparametere på tvers av leverandører, noe som er nyttig hvis du ruter forespørsler til flere modeller.
FAQ -- LLM Prompt-bufring
Hva er prompt-bufring i LLM-er?
Prompt-bufring lagrer de beregnede oppmerksomhetstilstandene (KV-buffer) fra tidligere behandlede promptprefiks. Når en påfølgende forespørsel begynner med samme tokensekvens, gjenbruker leverandøren disse lagrede tilstandene i stedet for å omberegne dem -- noe som reduserer både kostnad og latens uten påvirkning på utdatakvaliteten.
Hvor mye sparer prompt-bufring på API-kostnader?
Besparelser spenner fra 50% til 90% avhengig av leverandør. OpenAI tilbyr 50% rabatt på bufrede inndatatokens. Anthropic tilbyr opptil 90% rabatt (bufrede lesinger til 0,1x basisprisen). Gemini tilbyr omtrent 90% rabatt på bufrede lesinger. Faktiske besparelser avhenger av buffer-treffprosenten din, promptlengde og forespørselsfrekvens.
Skjer OpenAI prompt-bufring automatisk?
Ja, siden oktober 2024. Ethvert API-kall med 1 024+ inndatatokens drar automatisk nytte av bufring. Ingen opt-in, ingen headere, ingen kodeendringer nødvendig. Bufferen matcher tokenprefiks fra starten av prompten.
Hva er forskjellen mellom prompt-bufring og semantisk bufring?
Prompt-bufring matcher eksakte tokenprefiks på GPU-nivå -- det er ingen nøyaktighetstap og utdata er identisk med ikke-bufrede forespørsler. Semantisk bufring bruker innbyggingslikhet for å finne "nær nok" tidligere spørringer og returnere bufrede svar -- det er raskere men kan returnere feilaktige eller utdaterte svar. De løser fundamentalt forskjellige problemer.
Hvor lenge varer prompt-bufferen?
Det varierer per leverandør. OpenAI: 5-10 minutter (opptil 24 timer med utvidet lagring). Anthropic: 5 minutter (standard) eller 1 time (tilgjengelig på Claude 4.5+-modeller, koster 2x skriving). Gemini: konfigurerbar, standard er 1 time for eksplisitte buffere. Implisitt bufring-TTL administreres automatisk av Google.
Hva er minimum token-lengde for prompt-bufring?
OpenAI: 1 024 tokens. Anthropic: 1 024 tokens for de fleste nåværende modeller. Gemini: 1 024 tokens for Flash-modeller, 4 096 for Pro-modeller. Prompter under disse tersklene vil ikke aktivere bufring -- dette er det vanligste "det fungerer ikke"-problemet.
Fungerer prompt-bufring med strømmesvar?
Ja. Bufring og strømming opererer på ulike faser av forespørselen. Bufring fremskynder inndataprefill-fasen; strømming leverer utdatatokens inkrementelt. Begge fungerer simultant, og du merker faktisk TTFT-forbedringen mer med strømming aktivert.
Når bør jeg IKKE bruke prompt-bufring?
Unngå å stole på bufring når promptene dine er under minimum token-terskelen, når du inkluderer tidsstempler eller økt-ID-er i systemmeldingen, når du roterer few-shot-eksempler mellom kall, eller når forespørsler er for sjeldne til å nå bufferen før den utløper (5-10-minuttersvindu for OpenAI/Anthropic).
Kan jeg bruke prompt-bufring med LangChain eller LiteLLM?
Ja. LangChain sender leverandørspesifikke bufringsparametere gjennom API-wrapperne sine. LiteLLM gir en enhetlig bufringssyntaks som normaliserer cache_control for Anthropic, OpenAI, Gemini, Vertex AI og Bedrock -- særlig nyttig for flerleverandøroppsett.
Hva er et buffer-treff versus et buffer-miss?
Et buffer-treff betyr at leverandøren fant et matchende prefiks i minnet og gjenbrukte de lagrede KV-tilstandene -- du betaler den rabatterte bufrede tokensatsen og får raskere TTFT. Et buffer-miss betyr at ingen match ble funnet, så hele prompten behandles fra bunnen av til standardpris. Sjekk feltene cached_tokens (OpenAI), cache_read_input_tokens (Anthropic) eller cachedContentTokenCount (Gemini) i API-svaret for å se hva som inntraff.
Endelig Vurdering
| Kategori | Vinner | Hovedngrunn |
|---|---|---|
| Enklest Oppsett | OpenAI | Automatisk, null konfigurasjon |
| Dypeste Rabatt | Anthropic | 90% på bufrede lesinger (0,1x basis) |
| Mest Kontroll | Anthropic | Eksplisitte bryteropunkter + 5-min eller 1-times TTL |
| Best for Lange Dokumenter | Gemini | Konfigurerbar TTL med navngitte buffer-objekter |
| Best for Flerturs-chat | OpenAI | Automatisk prefiksmatching på samtalehistorikk |
| Best for Agenter/MCP | Anthropic | Bufre verktøydefinisjoner eksplisitt |
Prompt-bufring er den laveste-innsats, høyeste-avkastnings-optimaliseringen i LLM API-stakken. Du endrer ikke modellen din, du ofrer ikke kvalitet, og implementeringen spenner fra "ikke gjøre noe" (OpenAI) til "legge til ett felt" (Anthropic) til "opprette et buffer-objekt" (Gemini).
Begynn med din nåværende leverandørs automatiske bufring. Mål buffer-treffprosenten din med loggingshjelpemiddelet ovenfor. Hvis du er under 70%, omstrukturerer du promptene dine (statisk først, dynamisk sist) og eliminerer anti-mønstrene. De fleste team ser 50-80% kostnadsreduksjon innen en dag etter å ha implementert disse endringene.