# Prompt Caching w LLM: optymalizacja bufora KV w celu zmniejszenia kosztów i opóźnień
Prompt Caching pozwala zmniejszyć koszt tokenów wejściowych LLM nawet 10-krotnie i skrócić opóźnienie do 85% dla długich promptów. OpenAI i Anthropic buforują nie odpowiedzi, lecz pośrednie obliczenia w mechanizmie attention transformerów — konkretnie bufor KV. Dzięki temu zachowuje wyniki par key-value dla powtarzających się prefiksów promptów, przyspieszając inference bez utraty jakości generacji.
Technologia ta jest szczególnie przydatna w zadaniach z powtarzalnym kontekstem: RAG, chatboty z historią, wieloetapowe potoki. W testach na API dostawców pełne wykorzystanie bufora daje zauważalny wzrost prędkości do pierwszego tokena.
Architektura LLM i rola attention
LLM to sekwencja bloków transformatorów, gdzie każdy przyjmuje embeddings i generuje zaktualizowane reprezentacje. Inference działa w pętli: prompt jest tokenizowany, embeddings są przekazywane przez warstwy attention i feed-forward, generowany jest następny token, który jest dodawany do kontekstu.
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));
Buforowanie odbywa się w attention. Self-attention oblicza dla każdego tokena ważoną sumę poprzednich na podstawie podobieństwa między query (bieżący token) a keys (poprzednie). Dla query_i: attention(Q_i, K, V) = softmax(Q_i K^T / sqrt(d)) V.
Podczas generowania każdego nowego tokena bufor KV wszystkich poprzednich jest rozszerzany, co prowadzi do kwadratowej złożoności O(n^2) względem długości sekwencji.
Tokenizacja i embeddings
Tokenizator dzieli tekst na podjednostki podsłowne z przypisanymi ID. Przykład dla GPT: "Check out ngrok.ai" → [4383, 842, 1657, 17690, 75584]. Jest deterministyczny, wrażliwy na wielkość liter, wykorzystuje algorytmy podobne do BPE.
Embeddings przekształcają tokeny w n-wymiarowe wektory (n > 10k w dużych modelach). Macierz embeddings jest stała po treningu:
function embed(tokens) {
return tokens.map((token, i) => {
const embeddings = EMBEDDINGS[token];
return encodePosition(embeddings, i);
});
}
Pozycyjne kodowanie dodaje informacje o kolejności. Więcej wymiarów — lepsze uchwycenie semantyki: tonu, stylu, podobieństwa.
Mechanizm attention i bufor KV
W multi-head attention:
- Projekcje: Q = X W_Q, K = X W_K, V = X * W_V (X — macierz embeddings).
- Scores: attention_scores = Q * K^T / sqrt(d_k).
- Softmax i ważona suma: attention_output = softmax(scores) * V.
Dla sekwencji długości n bufor KV to tensory K i V o rozmiarze [n, d_model]. Podczas generowania t-tego tokena attention wykorzystuje cały poprzedni bufor + bieżący.
Prompt Caching zachowuje bufor KV prefiksu promptu między wywołaniami API. Jeśli nowy prompt zaczyna się od zbufferingowanego prefiksu (hit), obliczenia attention dla tych tokenów są pomijane — używany jest gotowy KV. Koszt maleje, ponieważ pomijane jest ~90% compute dla długich kontekstów.
- Cache hit: prefiks > 1024 tokenów (Anthropic), koszt /10.
- Cache miss: pełne przeliczenie.
- TTL: bufor żyje ~5-10 min, zależy od dostawcy.
Zalety i ograniczenia
Korzyści w opóźnieniu: dla promptów 10k+ tokenów TTFB spada o 50-85%.
Oszczędności: tokeny wejściowe w buforze — $0.0001/1k vs $0.001/1k (przybliżenie).
Ograniczenia:
- Tylko dopasowanie prefiksowe (nie dowolne pod ciągi).
- Nie buforuje embeddings wyjściowych ani logitów.
- Zależy od tokenizatora dostawcy.
W produkcji: używaj do sesyjnych czatów, gdzie historia się powtarza.
Co ważne
- Prompt Caching buforuje pary KV attention dla prefiksów, zmniejszając compute o 90%+ dla długich kontekstów.
- Opóźnienie do pierwszego tokena maleje do 85%, koszt wejścia /10.
- Wymaga dokładnego dopasowania prefiksu i zgodnego tokenizatora.
- Idealne dla RAG, historii czatów, wieloiteracyjnych zadań.
- Nie wpływa na jakość: generacja jest stochastyczna.
— Editorial Team
Brak komentarzy.