1. Hashing prefiksu: silnik inferencji haszuje sekwencję tokenów prefiksu (np. SHA-256 lub szybszy xxHash). Hash służy jako klucz do tablicy cache w pamięci akceleratora.
2. Lookup: przed prefillem silnik sprawdza, czy KV-cache dla danego prefiksu (lub jego najdłuższego pasującego początku) jest już w pamięci. Trafienie = pominięcie obliczania attention dla tych tokenów.
3. Częściowe trafienie (prefix match): jeśli nowy prompt dzieli z cache'owanym pierwsze N tokenów, silnik reuse'uje KV dla tych N i prefilluje tylko ogon. Stąd wymóg statyczna-na-początku, dynamiczna-na-końcu layout.
4. Eviction policy: cache ma ograniczoną pojemność (LRU, LFU, lub explicit TTL). Anthropic używa 5-min/1-godz TTL z explicit `cache_control`. OpenAI automatycznie zachowuje cache przez minuty po ostatnim użyciu. vLLM/SGLang używają LRU na poziomie bloków pamięciowych (PagedAttention).
5. Rozliczenie kosztu: tokeny prefiksu zapłacone raz przy „cache write" (Anthropic: 1.25× normalnej ceny), kolejne odczyty znacznie tańsze (Anthropic 0.1×, OpenAI 0.5×, Google ~0.25×). Tokeny generowane (output) zawsze pełna cena.
6. Layout cache-friendly: aby zmaksymalizować trafienia, prompt projektuje się jako [system + tools + dokumenty + RAG] (statyczne, cached) || [pytanie użytkownika + history] (dynamiczne, prefill każdorazowo).
Prefill jest dominującym kosztem inferencji dla aplikacji z długim, powtarzającym się kontekstem: chatboty z dużym system promptem, agenci z definicjami narzędzi, RAG z masywnymi chunkami, IDE AI z całym monorepo w kontekście. Bez prompt cachingu każde zapytanie odpłaca ten sam rachunek za prefill, mimo że 95% kontekstu się nie zmienia. Prompt caching rozwiązuje ten problem przez „zapamiętanie" pracy włożonej w przetworzenie wspólnego prefiksu. Efekt: 50–90% redukcja kosztu i 5–10× szybsze TTFT dla zapytań trafiających w cache. Przy ścisłej kontroli layoutu promptu (static-then-dynamic) cache hit rate w produkcji rutynowo przekracza 80%.
Cache działa tylko na ścisłym dopasowaniu prefiksu. Zmiana daty, znacznika czasowego lub user ID w środku system prompta unieważnia cały cache od tej pozycji. Mitigacja: zmienne dynamiczne zawsze przesuwać na koniec promptu.
Pierwszy zapis do cache kosztuje więcej niż normalny prefill (Anthropic: 1.25×). Caching ma sens dopiero, gdy ten sam prefiks zostanie odczytany ≥2 razy w TTL.
KV-cache 100k tokenów dla modelu 70B = dziesiątki GB HBM per cached prefix. Self-hosted vLLM/SGLang szybko wyczerpują pamięć przy wielu długich cache'ach jednocześnie.
Cache wygasa po TTL (Anthropic 5min/1h, OpenAI „minuty"). Aplikacje z nierównomiernym ruchem (sporadyczne zapytania) tracą cache i płacą za odbudowę. Mitigacja: keep-alive ping lub explicit `cache_control` 1h.
Współdzielenie cache między tenantami (jeśli dostawca chmury naive'owo dzieli prefix cache między klientami) może wycieknąć timing-side-channel istnienia prefiksu w cache. Wszyscy major providers izolują cache per organization / API key.