
LLM-promptien välimuisti: Leikkaa API-kustannuksia 90 % (kaikki 3 palveluntarjoajaa)
LLM-promptien välimuistointi mahdollistaa aiemmin käsiteltyjen tokenien uudelleenkäytön API-kutsujen välillä, mikä leikkaa syötekustannuksia jopa 90 % ja lyhentää ensimmäisen tokenin saapumisaikaa (TTFT) jopa 85 %. Jos lähetät saman järjestelmäpromptin, työkalumääritelmät tai few-shot-esimerkit jokaisessa pyynnössä, maksat täyden hinnan työstä, jonka GPU on jo tehnyt.
Tämä opas kattaa OpenAI:n, Anthropicin ja Geminin samalla chatbotilla toteutettuna kaikissa kolmessa SDK:ssa – jotain, mitä mikään muu opas ei tee. Käymme läpi myös Anthropicin helmikuun 2026 automaattisen välimuistipäivityksen, tuotantokustannusskenaariot todellisilla dollarimäärillä sekä anti-patternit, jotka hiljaa tuhoavat välimuistin osumaprosenttisi.
<!-- IMAGE: KV-välimuistin uudelleenkäyttövuokaavio, joka näyttää promptin etuliitteen sovituksen, välimuistiosuman polun (nopea, halpa) ja välimuistihukan polun (normaali käsittely) -->Pika-yhteenveto: Kaikki kolme palveluntarjoajaa vilaukselta
Ennen kuin sukellamme toteutusyksityiskohtiin, tässä on täydellinen vertailu. Jos tiedät jo, ketä palveluntarjoajaa käytät, hyppää suoraan heidän osioonsa. Jos arvioit vaihtoehtoja, tämä taulukko kertoo kaiken 10 sekunnissa.
| Ominaisuus | OpenAI | Anthropic | Gemini |
|---|---|---|---|
| Välimuistintyyppi | Automaattinen | Automaattinen + Eksplisiittinen | Implisiittinen + Eksplisiittinen |
| Minimimäärä tokeneita | 1 024 | 1 024 (useimmat mallit) | 1 024 (Flash) / 4 096 (Pro) |
| TTL (Time-To-Live) | 5–10 min (jopa 24 h laajennettuna) | 5 min tai 1 tunti | Konfiguroitava (oletus 1 tunti) |
| Välimuistin kirjoituskustannus | 1x (ei lisämaksua) | 1,25x (5 min) / 2x (1 tunti) | 1x (ei lisämaksua) |
| Alennus välimuistista luettaessa | 50 % alennus syötteestä | 90 % alennus syötteestä | ~90 % alennus syötteestä |
| Välimuistin eristys | Organisaatio | Työtila | Projekti |
| Streamaus-tuki | Kyllä | Kyllä | Kyllä |
| Välimuistiosuman vastauskenttä | cached_tokens | cache_read_input_tokens | cachedContentTokenCount |
| Eksplisiittinen ohjaus | Ei | Kyllä (cache_control) | Kyllä (nimetyt välimuistiobjektit) |
| Viimeisin merkittävä päivitys | Lokakuu 2024 | Helmikuu 2026 (auto caching) | 2026 (implisiittinen välimuisti) |
Keskeinen havainto: OpenAI on yksinkertaisin (ei konfiguraatiota, 50 % alennus). Anthropic tarjoaa suurimman alennuksen (90 %) ja eniten kontrollia. Gemini tarjoaa konfiguroitavan TTL:n ja implisiittisen välimuistoinnin 2.5+ malleissa verrattavissa olevilla alennuksilla Anthropiciin.
Miten LLM-promptien välimuistointi toimii?
Sinun ei tarvitse ymmärtää transformerien sisäisiä mekanismeja käyttääksesi promptien välimuistointia tehokkaasti. Sinun on kuitenkin ymmärrettävä yksi käsite: etuliitteen sovitus (prefix matching).
KV-välimuisti 60 sekunnissa
Kun LLM käsittelee promptiasi, se laskee attention-tilat (avain-arvoparit) jokaiselle tokenille. Nämä KV-välimuistin merkinnät ovat kallis osa; ne kuluttavat GPU-muistia ja laskenta-aikaa. Promptien välimuistointi tallentaa nämä lasketut tilat, jotta seuraava samaa etuliitettä käyttävä pyyntö ohittaa uudelleenlaskennan kokonaan.
Kriittinen sana on etuliite. Välimuisti sovittaa alkaen promptin alusta eteenpäin. Jos ensimmäiset 2 000 tokenia vastaavat välimuistimerkintää, mutta token 2 001 eroaa, nämä ensimmäiset 2 000 tokenia haetaan välimuistista. Kaikki poikkeamiskohdan jälkeen tuleva lasketaan uudestaan.
Tämän vuoksi promptien järjestys on tärkeää. Rakenna promptisi näin:
- Työkalumääritelmät (staattisin)
- Järjestelmäprompti
- Staattiset few-shot-esimerkit
- Haettu konteksti (puolidynaaminen)
- Keskusteluhistoria (kasvaa vuorokohtaisesti)
- Käyttäjän kysely (aina erilainen)
Staattinen sisältö ensin, dynaaminen sisältö viimeiseksi. Mitä enemmän tokeneita vastaa välimuistissa olevaa etuliitettä, sitä suuremmat säästöt.
Promptien välimuistointi vs. semanttinen välimuistointi vs. vastausvälimuistointi
Nämä kolme termiä sekoitetaan jatkuvasti. Promptien välimuistointi (josta tässä oppaassa on kyse) uudelleenkäyttää laskettuja KV-tiloja GPU-tasolla identtisille tokenietuliitteille, nolla tarkkuushäviö, sama tuloste kuin ilman välimuistia. Semanttinen välimuistointi käyttää embedding-samankaltaisuutta palauttaakseen aiemmin generoituja vastauksia "riittävän samankaltaisille" kyselyille, nopeampi mutta voi palauttaa vääriä vastauksia. Vastausvälimuistointi tallentaa tarkat syöte-tulosteparit ja palauttaa välimuistissa olevan vastauksen sellaisenaan, toimii vain täysin identtisille pyynnöille.
Promptien välimuistointi on ainoa "ilmainen optimointi"; se vähentää kustannuksia ja viivettä ilman mitään tarkkuuden kompromisseja. Syvällisestä transformer-matematiikasta KV-välimuistoinnin takana Hugging Facen tekninen selitys mittasi noin 5,21-kertaisen nopeuden parannuksen T4-GPU:illa.
Miten OpenAI hoitaa promptien välimuistoinnin?
OpenAI:n promptien välimuistointi on täysin automaattista. Lokakuusta 2024 lähtien jokainen API-kutsu, jossa on vähintään 1 024 syötetokenia, hyötyy automaattisesti välimuistista. Et tarvitse opt-inia, et lisää header-eja, et muuta koodiasi.
Miten OpenAI:n automaattinen välimuistointi toimii
Kun lähetät pyynnön, jossa on vähintään 1 024 tokenia, OpenAI tarkistaa, vastaako etuliite organisaatiosi viimeaikaista pyyntöä. Välimuistiosumat maksavat 50 % normaalista syötetokenin hinnasta. Alkuperäisen 1 024 tokenin kynnyksen jälkeen välimuisti sovittaa 128 tokenin erissä.
Välimuisti säilyy 5–10 minuuttia normaalin käytön aikana ja voi pysyä jopa 24 tuntia laajennetulla säilytyksellä ruuhkattomina aikoina. Se on rajattu organisaatiotasolle, joten eri projektit saman organisaation sisällä hyötyvät jaetuista välimuisteista.
Tuetut mallit sisältävät GPT-4o, GPT-4o-mini, GPT-4.1, o1, o3-mini ja kaikki uudemmat mallit.
OpenAI Python SDK -esimerkki
from openai import OpenAI
client = OpenAI()
# This system prompt is ~2,000 tokens -- well above the 1,024 minimum
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},
],
)
# Check if caching kicked in
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
# First call: cache miss (full price)
chat("Review this async function for race conditions...")
# Second call within 5-10 min: cache hit (50% off on cached tokens)
chat("Now optimize the same function for throughput...")Ensimmäinen kutsu käsittelee kaiken täydellä hinnalla ja täyttää välimuistin. Toinen kutsu käyttää uudelleen välimuistissa olevia järjestelmäpromptin tokeneita puolikkaalla hinnalla. Näet tulosteessa jotain kuten Cached: 1920/2048 tokens (94%).
Tuomio: OpenAI on helpoin aloittaa, ei konfiguraatiota, välimuistointi tapahtuu itsestään. 50 % alennus on pienin kolmesta palveluntarjoajasta, mutta yksinkertaisuutta ei voi voittaa.
Miten Anthropic/Claude hoitaa promptien välimuistoinnin?
Anthropic tarjoaa kaksi tilaa: automaattinen välimuistointi (oletuksena käytössä helmikuusta 2026 lähtien) ja eksplisiittinen välimuistointi cache_control-katkaisupisteillä. Headline-luku on vaikea jättää huomiotta: välimuistista luetut tokenit maksavat vain 10 % normaalista syötteen hinnasta, eli 90 % alennus.
Automaattinen vs. eksplisiittinen välimuistointi (2026 päivitys)
- helmikuuta 2026 alkaen Anthropic ottaa automaattisen välimuistoinnin käyttöön oletuksena kaikille kelvollisille prompteille. Et tarvitse enää vanhaa beta-headeria. Järjestelmä määrittää optimaaliset välimuistin katkaisupisteet automaattisesti.
Eksplisiittinen välimuistointi on edelleen saatavilla, kun haluat hienojakoista kontrollia. Sijoitat cache_control: {"type": "ephemeral"} tiettyihin sisältölohkoihin merkitsemään tarkalleen, missä välimuistin raja tulee olla. Tämä on hyödyllistä, kun promptissasi on tietty rakenne ja haluat taata tiettyjen osien välimuistoinnin.
Kaksi TTL-vaihtoehtoa on olemassa:
- 5 minuutin välimuisti (oletus): kirjoituskustannus 1,25x perussyötteen hinta, lukukustannus 0,1x. Maksaa itsensä takaisin yhden välimuistiosuman jälkeen.
- 1 tunnin välimuisti: kirjoituskustannus 2x perussyötteen hinta, lukukustannus 0,1x. Maksaa itsensä takaisin kahden välimuistiosuman jälkeen. Saatavilla Claude 4.5+ -malleissa.
Välimuistin eristys muuttui organisaatiotasolta työtilatasolle 5. helmikuuta 2026. Tämä tarkoittaa, että eri työtilat saman organisaation sisällä ylläpitävät erillisiä välimuisteja.
Kun työskentelet Anthropicin välimuistoinnin kanssa, on hyödyllistä rakentaa promptisi optimaalista välimuistointia varten, staattisen sisällön sijoittaminen dynaamisen sisällön edelle on vieläkin tärkeämpää täällä, koska maksat kirjoituspreemiota.
Anthropic Python SDK -esimerkki
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"}, # Explicit breakpoint
}
],
messages=[
{"role": "user", "content": user_message},
],
)
# Read cache metrics from the response
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
# First call: cache_creation_input_tokens = ~1920 (write at 1.25x)
chat("Review this async function for race conditions...")
# Second call: cache_read_input_tokens = ~1920 (read at 0.1x -- 90% off!)
chat("Now optimize the same function for throughput...")Välimuistin kirjoitus- vs. lukuhintojen ymmärtäminen
Tässä kohtaa Anthropicin hinnoittelu muuttuu mielenkiintoiseksi. Käytetään esimerkkinä Claude Sonnet 4.5:tä ($3/MTok perussyöte):
- Normaali syöte: $3,00 per miljoona tokenia
- Välimuistin kirjoitus (5 min): $3,75 per miljoona tokenia (1,25x), maksat enemmän ensimmäisellä kerralla
- Välimuistin luku: $0,30 per miljoona tokenia (0,1x) -- 90 % halvempaa jokaisella seuraavalla osumalla
5 minuutin välimuisti maksaa itsensä takaisin jo yhden luvun jälkeen. 1 tunnin välimuisti ($6,00/MTok kirjoitus) maksaa itsensä takaisin kahden luvun jälkeen. Jos teet enemmän kuin pari pyyntöä minuutissa samalla etuliitteellä, matematiikka on ylivoimaisesti puolellasi.
Tuomio: Anthropic tarjoaa suurimman alennuksen (90 %) ja eniten kontrollia. Paras korkean volyymin, kustannusherkkien työkuormien jaoks.
Miten Google Gemini hoitaa promptien välimuistoinnin?
Gemini käyttää erilaista lähestymistapaa kahdella erillisellä välimuistimekanismilla: eksplisiittinen kontekstivälimuisti (nimetyt välimuistiobjektit, jotka luot ja viittaat niihin) ja implisiittinen välimuisti (automaattinen, ei konfiguraatiota, lisätty vuonna 2026 Gemini 2.5+ -malleihin).
Eksplisiittinen kontekstivälimuisti (nimetyt välimuistit)
Toisin kuin OpenAI:ssa ja Anthropicissa, joissa välimuistointi on läpinäkyvää, Geminin eksplisiittinen välimuistointi vaatii sinua luomaan ensin nimetyn välimuistiobjektin ja viittaamaan siihen myöhemmissä pyynnöissä. Minimimäärä tokeneita on 1 024 tokenia Gemini Flash -malleille ja 4 096 tokenia Pro-malleille. TTL on konfiguroitava, oletus on 1 tunti, mutta voit asettaa sen tarpeidesi mukaan.
Välimuistissa olevat tokenit Gemini 2.5 Pro:ssa hinnoitellaan $0,125/MTok verrattuna normaaliin $1,25/MTok syötehintaan, eli 90 % alennus. Lisäksi on olemassa säilytyskustannus $4,50 per miljoona tokenia tunnissa Pro:lle ja $1,00 Flashille.
Implisiittinen välimuistointi Gemini 2.5:ssä (2026)
Alkaen Gemini 2.5 Pro:sta ja Flashista, Google lisäsi implisiittisen välimuistoinnin, automaattisen välimuistoinnin, joka toimii kuten OpenAI:n lähestymistapa. Ei konfiguraatiota tarvita. Sijoita suuri, yhteinen sisältö promptisi alkuun ja lähetä pyyntöjä, joissa on samankaltaisia etuliitteitä, nopeasti peräkkäin. Järjestelmä havaitsee automaattisesti välimuistiin kelvollisen sisällön ja välittää säästöt.
Gemini Python SDK -esimerkki
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 ...]"""
# Step 1: Create a named cache object
cache = client.caches.create(
model="gemini-2.5-flash",
config=types.CreateCachedContentConfig(
display_name="python-review-guidelines",
system_instruction=SYSTEM_PROMPT,
ttl="3600s", # 1 hour
),
)
print(f"Cache created: {cache.name}, expires: {cache.expire_time}")
# Step 2: Use the cache in requests
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,
),
)
# Check cache usage in the response
metadata = response.usage_metadata
print(f"Cached tokens: {metadata.cached_content_token_count}")
print(f"Total input tokens: {metadata.prompt_token_count}")Eksplisiittisellä lähestymistavalla on yksi suuri etu: kontrolloit TTL:ää tarkasti. Jos tiedät batch-ajosi kestävän 4 tuntia, aseta 4 tunnin TTL ja vältä välimuistin vanhenemista käsittelyn keskellä.
Tuomio: Geminin konfiguroitava TTL ja kaksoisvälimuistitilat (eksplisiittinen + implisiittinen) tekevät siitä monipuolisen. Minimikynnys on nyt verrattavissa muihin palveluntarjoajiin, ja 90 % alennus välimuistista luettaessa vastaa Anthropicin tasoa.
Rinnakkainen koodivertailu, sama käyttötarkoitus, kaikki 3 palveluntarjoajaa
Tässä on sama chatbot välimuistiin tallennetulla järjestelmäpromptilla, toteutettuna kaikissa kolmessa SDK:ssa. Vertaa kehittäjäkokemusta suoraan.
# --- OpenAI: Zero config, just call the API ---
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT}, # Cached automatically
{"role": "user", "content": user_message},
],
)
cached = response.usage.prompt_tokens_details.cached_tokens# --- Anthropic: Explicit cache_control breakpoint ---
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"}, # Mark cache boundary
}],
messages=[{"role": "user", "content": user_message}],
)
cached = response.usage.cache_read_input_tokens# --- Gemini: Named cache object ---
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| Näkökulma | OpenAI | Anthropic | Gemini |
|---|---|---|---|
| Asennuksen monimutkaisuus | Ei mitään | Lisää cache_control-lohko | Luo välimuistiobjekti ensin |
| Välimuistin hallinta | Vain automaattinen | Automaattinen tai eksplisiittinen | Implisiittinen tai eksplisiittinen |
| Alennus välimuistista luettaessa | 50 % | 90 % | ~90 % |
| Min. tokenit | 1 024 | 1 024 | 1 024 (Flash) / 4 096 (Pro) |
| DX-tuomio | Yksinkertaisin | Eniten kontrollia | Joustavin TTL |
Jos haluat vaivattomat säästöt, valitse OpenAI. Jos haluat suurimman alennuksen ja hienojakoisen kontrollin, valitse Anthropic. Jos tarvitset konfiguroitavia välimuistin elinaikoja tai olet jo Google Cloudissa, valitse Gemini.
Tuotantokustannuslaskuri, todelliset säästöt skaalautuvina
Abstraktit prosentit eivät aja päätöksentekoa. Dollarimäärät ajavat. Tässä on kolme tuotantoskenaariota todellisilla kustannusarvioilla käyttäen Claude Sonnet 4.5:tä ($3/MTok syöte), GPT-4o:ta ($2,50/MTok syöte) ja Gemini 2.5 Pro:ta ($1,25/MTok syöte).
Hinnoittelu vahvistettu maaliskuussa 2026. Tarkista Anthropicin hinnoittelu, OpenAI:n hinnoittelu ja Geminin hinnoittelu ajantasaisia hintoja varten.
Oletukset: 80 % välimuistin osumaprosentti (realistinen hyvin rakennetuille prompteille), tulostetokenit pois lukien, koska välimuistointi vaikuttaa vain syötekustannuksiin.
| Skenaario | Ilman välimuistia (Kuukausittain) | OpenAI-välimuistilla | Anthropic-välimuistilla | Gemini-välimuistilla |
|---|---|---|---|---|
| Hobi-chatbot: 100 pyyntöä/pv, 2k järjestelmäprompti | OpenAI: $15 / Anthropic: $18 / Gemini: $7,50 | $12 (säästö $3) | $5,40 (säästö $12,60) | $2,25 (säästö $5,25) |
| Kasvava API: 10k pyyntöä/pv, 8k välimuistoitu etuliite | OpenAI: $600 / Anthropic: $720 / Gemini: $300 | $360 (säästö $240) | $144 (säästö $576) | $60 (säästö $240) |
| Enterprise-pipeline: 100k pyyntöä/pv, 10k välimuistoitu etuliite | OpenAI: $7 500 / Anthropic: $9 000 / Gemini: $3 750 | $4 500 (säästö $3 000) | $1 800 (säästö $7 200) | $750 (säästö $3 000) |
Kasvutasolla Anthropicin välimuistointi säästää $576/kk huolimatta korkeammasta perushinnasta kuin OpenAI:lla. Enterprise-mittakaavassa puhutaan $7 200/kk säästöistä Anthropicilla, eli $86 400 vuodessa. Se on senioritason insinöörin palkan verran säästöjä pelkästä konfiguraatiomuutoksesta.
Kuvio on selvä: mitä suurempi pyyntömääräsi ja mitä pidempi staattinen etuliitteesi, sitä enemmän välimuistointi säästää. Anthropicin 90 % alennus dominoi skaalautuessa, mutta Geminin alhaisempi perushinta tekee siitä kilpailukykyisen, kun otetaan huomioon kokonaiskustannus.
Promptien välimuistoinnin anti-patternit, milloin EI kannata käyttää välimuistia
Välimuistointi vaikuttaa yksinkertaiselta, kunnes osumaprosenttisi mysteerisesti pysyy nollassa. Tässä ovat virheet, jotka hiljaa rikkovat promptien välimuistoinnin, ja miten ne korjataan.
Välimuistin rikkovat virheet (korjauksineen)
Aikaleimat järjestelmäprompteissa, yleisin virhe. Jos järjestelmäpromptisi sisältää datetime.now(), välimuistinen avain muuttuu joka sekunti.
# BAD: Cache misses every single request
system_prompt = f"""You are a helpful assistant.
Current time: {datetime.now().isoformat()}
Always be helpful and accurate."""
# GOOD: Move the timestamp to the user message
system_prompt = """You are a helpful assistant.
Always be helpful and accurate."""
user_message = f"[Current time: {datetime.now().isoformat()}]\n{user_query}"Käyttäjäkohtainen sisältö ennen staattista sisältöä, jos sijoitat session_id:n tai käyttäjäasetukset alkuun, jokainen käyttäjä saa ainutlaatuisen etuliitteen.
# BAD: Unique prefix per user = zero cache reuse
messages = [
{"role": "system", "content": f"User ID: {user_id}\nPreferences: {prefs}\n{GUIDELINES}"},
{"role": "user", "content": query},
]
# GOOD: Static content first, user context at the end
messages = [
{"role": "system", "content": GUIDELINES}, # Same for all users -> cached
{"role": "user", "content": f"Context: User {user_id}, prefs: {prefs}\n{query}"},
]| Anti-pattern | Miksi se rikkoo välimuistin | Korjaus |
|---|---|---|
| Aikaleimat järjestelmäpromptissa | Etuliite muuttuu joka sekunti | Siirrä aikaleima käyttäjän viestiin |
| Session/käyttäjä-ID:t etuliitteessä | Ainutlaatuinen etuliite per käyttäjä | Siirrä käyttäjäkonteksti staattisen sisällön jälkeen |
| Pyörivät few-shot-esimerkit | Eri esimerkit = eri etuliite | Käytä kiinteää joukkoa esimerkkejä |
| Dynaamiset työkalumääritelmät | Muuttuvat työkalut = etuliiteristiriita | Pidä työkaluskeemat staattisina |
| Lyhyet promptit (alle minimin) | Välimuisti ei aktivoidu | Konsolidoi konteksti ylittämään 1 024 tokenia |
| Kohtainen personointi järjestelmäpromptissa | Järjestelmäprompti muuttuu jokaisessa kutsussa | Käytä jaettua järjestelmäpromptia + käyttäjäkohtaisia käyttäjän viestejä |
Milloin promptien välimuistointi ei aidosti auta
Jotkin skenaariot eivät hyödy välimuistoinnista, vaikka rakentaisit promptisi täydellisesti:
- Kertakäyttöiset promptit: Jos jokaisella pyynnöllä on täysin ainutlaatuinen konteksti eikä jaettua etuliitettä, ei ole mitään välimuistoitavaa.
- Erittäin lyhyet promptit: Alle 1 024 tokenia (OpenAI/Anthropic) tai 4 096 tokenia (Gemini Pro), välimuistointi ei aktivoidu.
- Harvinaiset pyynnöt: Jos pyynnöt ovat tuntien välein, välimuisti vanhenee ennen kuin toinen pyyntö saapuu. OpenAI:n 5–10 minuutin ikkuna ja Anthropicin 5 minuutin oletus-TTL tarkoittavat, että tarvitset tasaista liikennettä.
Toimiiuko promptien välimuistointi streamauksen kanssa?
Kyllä. Promptien välimuistointi ja streamaus ovat riippumattomia, välimuistointi toimii syötetokeneille, streamaus vaikuttaa tulosteen toimitukseen. Ne ratkaisevat eri ongelmia pyynnön elinkaaren eri vaiheissa.
Välimuisti hoitaa esitäyttövaiheen (syötepromptisi käsittelyn). Streamaus hoitaa dekoodausvaiheen (tulostetokenien generoinnin ja lähettämisen inkrementaalisesti). Saat molempien hyödyt samanaikaisesti: nopeamman esitäytön välimuistiosumasta ja progressiivisen tulosteen toimituksen streamauksesta.
Tässä on streamausesimerkki välimuistointi käytössä:
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)
# After streaming completes, check cache metrics
usage = stream.get_final_message().usage
print(f"\nCache read: {usage.cache_read_input_tokens} tokens")TTFT-parannus välimuistoinnista on itse asiassa huomattavin streamauksen kanssa. Ilman välimuistia odotat koko esitäyttöä ennen kuin ensimmäinen token streamataan takaisin. Välimuistilla esitäyttö on lähes välitön, joten tokenit alkavat virrata melkein heti.
Kuinka seurata välimuistin osumaprosenttia tuotannossa
Välimuistoinnin asettaminen on puoli taistelua. Tietäminen, toimiiiko se todella, on toinen puolisko. Jos välimuistin osumaprosenttisi laskee alle 50 %, jotain on muuttunut promptirakenteessasi ja jätät rahaa pöytään.
Palveluntarjoajakohtaiset välimuistimetriikat
| Palveluntarjoaja | Välimuistin luku -kenttä | Välimuistin kirjoitus -kenttä | Kokonaissyöte-kenttä |
|---|---|---|---|
| OpenAI | usage.prompt_tokens_details.cached_tokens | Ei sovelleta (automaattinen) | usage.prompt_tokens |
| Anthropic | usage.cache_read_input_tokens | usage.cache_creation_input_tokens | usage.input_tokens |
| Gemini | usageMetadata.cachedContentTokenCount | Ei sovelleta (eksplisiittinen välimuistiobjekti) | usageMetadata.promptTokenCount |
Yksinkertainen välimuistin osumaprosentin loggeri
Tässä on utiliteettifunktio, jonka voit pudottaa mihin tahansa projektiin seurataksesi välimuistin osumaprosentteja API-vastauskenttien kautta:
import logging
logger = logging.getLogger("cache_monitor")
def log_cache_metrics(provider: str, usage: dict) -> float:
"""Extract and log cache metrics from any provider's response. Returns hit rate."""
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_rateTerveen tuotantojärjestelmän tulisi ylläpitää 70–90 % välimuistin osumaprosenttia. Jos olet alle 50 %, käy läpi anti-pattern-osio. Voit myös integroida tämän automatisoituihin arviointimetriikoihin havaitaksesi regressiot promptiputkessasi.
Promptien välimuistointi todellisissa käyttötarkoituksissa
Yllä olevat chatbot-esimerkit havainnollistavat mekanismia, mutta promptien välimuistointi loistaa todella tietyissä arkkitehtuurimalleissa.
RAG-pipelinat
RAG-asetelmassa järjestelmäpromptisi ja few-shot-esimerkit ovat staattisia kaikissa kyselyissä. Haetut dokumentit muuttuvat joka kerta. Rakenna promptisi maksimoimaan välimuistoitu etuliite:
- Järjestelmäprompti (välimuistoitu)
- Few-shot-esimerkit (välimuistoitu)
- Haetut dokumentit (dynaamiset, menevät viimeiseksi)
- Käyttäjän kysely (aina ainutlaatuinen)
5 000 tokenin järjestelmäpromptilla ja 3 000 tokenilla few-shot-esimerkkejä, se on 8 000 tokenia välimuistissa jokaisessa pyynnössä. 1 000 pyynnöllä/pv Anthropicilla säästäisit noin $6,50/pv pelkästään välimuistoidusta etuliitteestä. Kun haet ja välimuistoit kontekstilohkoja, varmista, että haun tuloste tulee staattisen etuliitteen jälkeen.
Monivuoroiset chatbotit
Monivuoroiset keskustelut ovat makea piste promptien välimuistoinnille. Jokainen vuoro lisää keskusteluhistoriaan, mutta koko aiempi keskustelu on jo välimuistissa edellisiltä vuoroilta. Välimuistin hyöty kasvaa kumulatiivisesti; vuoroon 10 mennessä sinulla saattaa olla 15 000 tokenia välimuistoitua historiaa ja vain 200 tuoretta tokenia viimeisimmästä käyttäjän viestistä.
Agenttijärjestelmät ja MCP-työkalumääritelmät
Jos rakennat agentteja työkalujen käytöllä, työkalumääritelmäsi ovat staattisia JSON-skeemoja, jotka toistuvat jokaisessa API-kutsussa. Tyypillisessä agentissa voi olla 20+ työkalua, yhteensä 3 000–5 000 tokenia määritelmiä. Se on ensiluokkaista välimuistimateriaalia.
Tämä on erityisen relevanttia MCP-pohjaisille arkkitehtuureille, joissa palvelimen työkalumääritelmät lähetetään jokaisessa kutsussa. Anthropicin eksplisiittisellä cache_control:lla voit merkitä tools-taulukon välimuistointia varten ja taata, että nämä tokenit käytetään uudelleen.
Kumpi palveluntarjoaja kannattaa valita?
| Jos tarvitset... | Paras valinta | Miksi |
|---|---|---|
| Ei konfiguraatiota, haluan vain säästöjä | OpenAI | Automaattinen välimuistointi, ei koodimuutoksia tarvita |
| Maksimaalinen kustannusten vähennys (90 %) | Anthropic | 0,1x välimuistista luetun hinnan, syvin alennus |
| Hienojakoinen välimuistin hallinta | Anthropic | Eksplisiittiset katkaisupisteet + konfiguroitava TTL (5 min tai 1 tunti) |
| Pitkien dokumenttien analyysi | Gemini | Konfiguroitava TTL eksplisiittisillä nimetyillä välimuisteilla |
| Monivuoroisen chatin yksinkertaisuus | OpenAI | Automaattinen etuliitteen sovitus kasvavaan keskusteluhistoriaan |
| Agenttijärjestelmät työkalumääritelmillä | Anthropic | Välimuistoi työkalumääritelmät eksplisiittisesti cache_control:lla |
| Monen palveluntarjoajan joustavuus | LiteLLM | Yhdenmukaistettu välimuistisyntaksi kaikkien palveluntarjoajien välillä |
Jos käytät jo yhtä palveluntarjoajaa, aloita sieltä, promptien välimuistointi ei vaadi vaihtamista. LiteLLM toimii proxy-kerroksena, joka normalisoi välimuistiparametrit palveluntarjoajien välillä, mikä on hyödyllistä, jos reitität pyyntöjä useisiin malleihin.
FAQ, LLM-promptien välimuistointi
Mikä on promptien välimuistointi LLM:issä?
Promptien välimuistointi tallentaa lasketut attention-tilat (KV-välimuisti) aiemmin käsitellyistä promptietuliitteistä. Kun myöhempi pyyntö alkaa samalla tokenisekvenssillä, palveluntarjoaja käyttää uudelleen näitä tallennettuja tiloja niiden uudelleenlaskemisen sijaan, mikä vähentää sekä kustannuksia että viivettä ilman vaikutusta tulosteen laatuun.
Kuinka paljon promptien välimuistointi säästää API-kustannuksissa?
Säästöt vaihtelevat 50–90 % palveluntarjoajasta riippuen. OpenAI tarjoaa 50 % alennuksen välimuistoiduista syötetokeneista. Anthropic tarjoaa jopa 90 % alennuksen (välimuistista luetut 0,1x perushinnasta). Gemini tarjoaa noin 90 % alennuksen välimuistista luetuista tokeneista. Todelliset säästöt riippuvat välimuistin osumaprosentista, promptin pituudesta ja pyyntöjen taajuudesta.
Tapahtuuko OpenAI:n promptien välimuistointi automaattisesti?
Kyllä, lokakuusta 2024 lähtien. Mikä tahansa API-kutsu, jossa on vähintään 1 024 syötetokenia, hyötyy automaattisesti välimuistista. Ei opt-inia, ei header-eja, ei koodimuutoksia tarvita. Välimuisti sovittaa tokenietuliitteet promptin alusta alkaen.
Mikä on ero promptien välimuistoinnin ja semanttisen välimuistoinnin välillä?
Promptien välimuistointi sovittaa tarkat tokenietuliitteet GPU-tasolla, ei tarkkuushäviötä, ja tulosteet ovat identtisiä välimuistimattomien pyyntöjen kanssa. Semanttinen välimuistointi käyttää embedding-samankaltaisuutta löytääkseen "riittävän lähellä" olevia aiempia kyselyjä ja palauttaa välimuistissa olevia vastauksia, se on nopeampi mutta voi palauttaa virheellisiä tai vanhentuneita vastauksia. Ne ratkaisevat pohjimmiltaan eri ongelmia.
Kuinka kauan promptien välimuisti kestää?
Se vaihtelee palveluntarjoajan mukaan. OpenAI: 5–10 minuuttia (jopa 24 tuntia laajennetulla säilytyksellä). Anthropic: 5 minuuttia (oletus) tai 1 tunti (saatavilla Claude 4.5+ -malleissa, maksaa 2x kirjoituksen). Gemini: konfiguroitava, oletuksena 1 tunti eksplisiittisille välimuisteille. Implisiittisen välimuistoinnin TTL:ää hallinnoi Google automaattisesti.
Mikä on minimimäärä tokeneita promptien välimuistointia varten?
OpenAI: 1 024 tokenia. Anthropic: 1 024 tokenia useimmille nykyisille malleille. Gemini: 1 024 tokenia Flash-malleille, 4 096 Pro-malleille. Promptit näiden kynnysten alapuolella eivät aktivoi välimuistointia, tämä on yleisin "ei toimi" -ongelma.
Toimiiuko promptien välimuistointi streamattujen vastausten kanssa?
Kyllä. Välimuistointi ja streamaus toimivat pyynnön eri vaiheissa. Välimuistointi nopeuttaa syötteen esitäyttövaihetta; streamaus toimittaa tulostetokeneita inkrementaalisesti. Molemmat toimivat samanaikaisesti, ja huomaat TTFT-parannuksen itse asiassa enemmän streamauksen ollessa käytössä.
Milloin minun EI kannata käyttää promptien välimuistointia?
Vältä luottamista välimuistointiin, kun promptisi ovat alle minimimäärän tokeneita, kun sisällytät aikaleimoja tai session ID:itä järjestelmäpromptiin, kun kierrätät few-shot-esimerkkejä kutsujen välillä tai kun pyynnöt ovat liian harvinaisia osuakseen välimuistiin ennen sen vanhenemista (5–10 minuutin ikkuna OpenAI/Anthropic).
Voinko käyttää promptien välimuistointia LangChainin tai LiteLLM:n kanssa?
Kyllä. LangChain välittää palveluntarjoajakohtaiset välimuistiparametrit API-kääreidensä kautta. LiteLLM tarjoaa yhdenmukaistetun välimuistisyntaksin, joka normalisoi cache_control:n Anthropicin, OpenAI:n, Geminin, Vertex AI:n ja Bedrockin välillä, erityisen hyödyllinen monen palveluntarjoajan asennuksissa.
Mikä on välimuistiosuma vs. välimuistihukka?
Välimuistiosuma tarkoittaa, että palveluntarjoaja löysi muistista vastaavan etuliitteen ja käytti uudelleen tallennettuja KV-tiloja, maksat alennetun välimuistitoken-hinnan ja saat nopeamman TTFT:n. Välimuistihukka tarkoittaa, että vastaavuutta ei löytynyt, joten koko prompti käsitellään alusta alkaen normaalilla hinnoittelulla. Tarkista cached_tokens (OpenAI), cache_read_input_tokens (Anthropic) tai cachedContentTokenCount (Gemini) -kentät API-vastauksesta nähdäksesi, mikä tapahtui.
Lopullinen tuomio
| Kategoria | Voittaja | Keskeinen syy |
|---|---|---|
| Helpoin asennus | OpenAI | Automaattinen, ei konfiguraatiota |
| Syvin alennus | Anthropic | 90 % alennus välimuistista luetuista (0,1x perus) |
| Eniten kontrollia | Anthropic | Eksplisiittiset katkaisupisteet + 5 min tai 1 tunnin TTL |
| Paras pitkille dokumenteille | Gemini | Konfiguroitava TTL nimetyillä välimuistiobjekteilla |
| Paras monivuoroiseen chattiin | OpenAI | Automaattinen etuliitteen sovitus keskusteluhistoriaan |
| Paras Agentic/MCP:lle | Anthropic | Välimuistoi työkalumääritelmät eksplisiittisesti |
Promptien välimuistointi on vähiten vaivaa tuottava, suurimman tuoton optimointi LLM-API-pinossa. Et muuta malliasi, et uhraa laatua, ja toteutus vaihtelee "tee ei mitään" (OpenAI) "lisää yksi kenttä" (Anthropic) "luo välimuistiobjekti" (Gemini).
Aloita nykyisen palveluntarjoajasi automaattisella välimuistoinnilla. Mittaa välimuistin osumaprosenttisi yllä olevalla loggausutiliteetilla. Jos olet alle 70 %, rakenna promptisi uudelleen (staattinen ensin, dynaaminen viimeiseksi) ja poista anti-patternit. Useimmat tiimit näkevät 50–80 % kustannusten vähennyksen päivän kuluessa näiden muutosten toteuttamisesta.