# Prompt Caching v LLM: optimalizace KV-meše pro snížení nákladů a latence
Prompt Caching umožňuje snížit cenu vstupních tokenů LLM 10krát a snížit latenci až o 85 % pro dlouhé prompty. OpenAI a Anthropic cachují ne odpovědi, ale intermediární výpočty v mechanismu attention transformerů — konkrétně KV-meš. To zachovává výsledky key-value párů pro opakující se prefixy promptů, zrychluje inference bez ztráty kvality generování.
Technologie je aktuální pro úlohy s opakovaným kontextem: RAG, chatboti s historií, vícekrokové pipeline. V testech na API poskytovatelů plné využití meše přináší výrazné zrychlení rychlosti do prvního tokenu.
Architektura LLM a role attention
LLM je posloupnost transformerových bloků, kde každý přijímá embeddings a vydává aktualizovaná reprezentace. Inference funguje v cyklu: prompt se tokenizuje, embeddings procházejí vrstvami attention a feed-forward, generuje se další token, který se přidává do kontextu.
prompt = "What is the meaning of life?";
tokens = tokenizer(prompt);
while (true) {
embeddings = embed(tokens);
for ([attention, feedforward] of transformers) {
embeddings = attention(embeddings);
embeddings = feedforward(embeddings);
}
output_token = output(embeddings);
if (output_token === END_TOKEN) {
break;
}
tokens.push(output_token);
}
print(decode(tokens));
Cachování probíhá v attention. Self-attention pro každý token spočítává váženou součet předchozích na základě podobnosti mezi query (aktuální token) a keys (předchozí). Pro query_i: attention(Q_i, K, V) = softmax(Q_i K^T / sqrt(d)) V.
Při generování každého nového tokenu se KV-meš všech předchozích rozšiřuje, což vede k kvadratické složitosti O(n^2) podle délky posloupnosti.
Tokenizace a embeddings
Tokenizátor rozděluje text na subsložkové jednotky s přiřazením ID. Příklad pro GPT: "Check out ngrok.ai" → [4383, 842, 1657, 17690, 75584]. Je deterministický, citlivý na velikost písmen, používá BPE-podobné algoritmy.
Embeddings převádějí tokeny na n-rozměrné vektory (n > 10k ve velkých modelech). Matice embeddings je fixní po tréninku:
function embed(tokens) {
return tokens.map((token, i) => {
const embeddings = EMBEDDINGS[token];
return encodePosition(embeddings, i);
});
}
Pozicové kódování přidává informace o pořadí. Více dimenzí — lepší zachycení sémantiky: tón, styl, podobnost.
Mechanismus attention a KV-meš
V multi-head attention:
- Projekce: Q = X W_Q, K = X W_K, V = X * W_V (X — matice embeddings).
- Skóre: attention_scores = Q * K^T / sqrt(d_k).
- Softmax a vážený součet: attention_output = softmax(scores) * V.
Pro posloupnost délky n je KV-meš tenzory K a V velikosti [n, d_model]. Při generování t-ho tokenu attention používá celý předchozí meš + aktuální.
Prompt Caching zachovává KV-meš prefixu promptu mezi voláními API. Pokud nový prompt začíná zakacheovaným prefixem (hit), výpočty attention pro tyto tokeny se přeskakují — bere se hotový KV. Náklady klesají, protože se přeskakuje ~90 % compute pro dlouhé kontexty.
- Cache hit: prefix > 1024 tokenů (Anthropic), cena /10.
- Cache miss: plný recompute.
- TTL: meš žije ~5-10 min, závisí na poskytovateli.
Výhody a omezení
Zlepšení latence: pro prompty 10k+ tokenů TTFB klesne o 50-85 %.
Úspora: vstupní tokeny v meši — $0.0001/1k vs $0.001/1k (přibližně).
Omezení:
- Pouze prefixový shoda (ne libovolné podřetězce).
- Necašuje output embeddings nebo logits.
- Závisí na tokenizátoru poskytovatele.
V produkci: používejte pro sessionové chaty, kde se historie opakuje.
Co je důležité
- Prompt Caching cašuje KV-páry attention pro prefixy, snižuje compute o 90 %+ pro dlouhé kontexty.
- Latence do prvního tokenu klesne o 85 %, cena vstupu /10.
- Vyžaduje přesnou shodu prefixu a kompatibilní tokenizátor.
- Ideální pro RAG, chat-historií, víciiteračních úloh.
- Neovlivňuje kvalitu: generace je stochastická.
— Editorial Team
Zatím žádné komentáře.