Prompt Caching - Używaj świadomie

2026-05-18

Prompt caching. Dużo kto słyszał o nim, ale jak dużo osób rzeczywiście świadomie go używa?

Zacznijmy od początku. Prompt caching to tak naprawdę jedyna optymalizacja kosztowa LLMów w której nie musisz zastanawiać się czy twój system nagle przestanie działać tak jak oczekujesz. Problem polega na tym co napisałem dosłownie kilka zdań wyżej — żeby działał musisz używać świadomie. Cache łatwo można zepsuć, wystarczy jedynie najmniejsza zmiana. Cache jest dopasowywany po prefiksie. API hashuje dokładne bajty prompta i sprawdza, czy widziało już dokładnie tę sekwencję w ostatnich t minutach.

Zobaczmy jak to działa na przykładach.

Stabilność

Najbardziej prosty case który można sobie wyobrazić to stabilny system prompt, te same narzędzia i przy single-turn chacie.

STRUMIEŃ ŻĄDAŃ — N = 6
#1
12.2k tok
#2
12.2k tok
#3
12.2k tok
#4
12.2k tok
#5
12.2k tok
#6
12.2k tok
KOSZT — relatywne jednostki
bez cache0.00
z cache0.00
cache write×1.25
cache read×0.1
new tokens×1

Przy pierwszym zapytaniu robi się cache write, a następnie odczytujemy przy każdej nowej wiadomości. Oszczędność dość duża — ok. 70% w naszym przykładzie.

Multi-turn

Raczej jeśli budujemy chatbot to chcemy jednak mieć krótkoterminową pamięć i pamiętać o co użytkownik pytał w tym samym wątku. Zobaczmy jak działa cache w tym przykładzie.

STRUMIEŃ ŻĄDAŃ — N = 6
#1
6.4k tok
#2
7.2k tok
#3
8.1k tok
#4
8.9k tok
#5
9.9k tok
#6
10.7k tok
KOSZT — relatywne jednostki
bez cache0.00
z cache0.00
Cache rośnie przy każdym zapytaniu.
cache write×1.25
cache read×0.1
new tokens×1

W tym przypadku widzimy, że przy każdym zapytaniu nie tylko odczytujemy cache, ale również piszemy do cache'a. Ponieważ przez cały czas piszemy to płacimy troszkę więcej, ale to dość szybko się zwraca — oszczędność, chociaż jest mniejsza niż w stabilnym case'ie, wciąż jest dość duża — ok. 63% w naszym przypadku.

⚠️ Żeby zrozumieć ten przykład musisz wiedzieć jak działa krótkoterminowa pamięć LLMów (i czy rzeczywiście to jest “pamięć”).

Nie działa…

Przypomnijmy — cache trzeba używać świadomie. Dość często chcemy dać znać LLMowi jaki dziś jest dzień. Wydaje się, że datetime.now() to jest akurat to co chcemy.

STRUMIEŃ ŻĄDAŃ — N = 6
#1
12.2k tok
#2
12.2k tok
#3
12.2k tok
#4
12.2k tok
#5
12.2k tok
#6
12.2k tok
KOSZT — relatywne jednostki
bez cache0.00
z cache0.00
Każda prośba droższa o 25%. Usuń datę z system prompta — wstrzykuj ją jako message.
cache write×1.25
cache read×0.1
new tokens×1

No i widzimy, że cache nie działa! Dlaczego? Ponieważ, tak jak było wspominano, API hashuje dokładne bajty prompta, a używając datetime.now() właśnie zepsuliśmy cache. Mało tego — że zepsuliśmy, to jeszcze możemy za to zapłacić dodatkowo (+25% w naszym przypadku).

To właśnie mam na myśli mówiąc o świadomości…

Jak używać?

W przypadku OpenAI wszystko bardzo proste. OpenAI cache'uje automatycznie — bez żadnych dodatkowych parametrów. Wystarczy wysłać zapytanie normalnie, a cache aktywuje się gdy prefiks przekracza 1024 tokeny.

zapis - 0x - brak dodatkowego kosztu

odczyt z cache - 0.25x-0.5x ceny bazowej (zależnie od modelu)

minimum - 1024 tokeny

TTL - 5-10 minut, automatyczny

Z kolei w przypadku Anthropic trzeba dodać pole "cache_control": {"type": "ephemeral"}do ostatniego bloku który chcemy cache'ować.

response = client.messages.create(
  model="claude-opus-4-7",
  system=[{
    "type": "text",
    "text": LONG_SYSTEM_PROMPT,
    "cache_control": {"type": "ephemeral"}
  }],
  messages=[...]
)

# weryfikacja cache hit
cached = response.usage.cache_read_input_tokens

Podsumowanie

Cacheowanie promptów jest bardzo potężnym narzędziem o którym jednak rzadko wspominają. Koncepcja jest bardzo prosta i intuicyjna, jednak trzeba trzymać z tyłu głowy jak ona działa (zwłaszcza w przypadku manualnego sterowania).

autor

Władek Grywaczewski

AI & Data Consultant · Gdańsk