Blog JSystems - uwalniamy wiedzę!

Szukaj

Claude Code

Cache się nie trafia (cache miss) - dlaczego i jak naprawić

W skrócie

  • Koszty pracy z Claude Code rosną szybciej, niż się spodziewasz, bo pamięć podręczna promptu rzadko się trafia - masz dużo trafień chybionych (cache miss).
  • Prompt caching działa tylko wtedy, gdy początek kontekstu jest identyczny jak poprzednio - każda zmiana na jego początku unieważnia całą pamięć podręczną poniżej.
  • Rozwiązanie: trzymaj stały, niezmienny materiał na początku kontekstu, nie wtrącaj do niego zmiennych treści i nie czyść kontekstu bez potrzeby.

Prompt caching, czyli pamięć podręczna promptu, to mechanizm, dzięki któremu Claude Code - narzędzie CLI od Anthropic do programowania z AI - nie płaci pełnej stawki za wielokrotne przetwarzanie tego samego, niezmiennego początku kontekstu. Gdy kolejne zapytanie zaczyna się dokładnie tak samo jak poprzednie, ta wspólna część jest tańsza. Kiedy jednak trafienie chybione (cache miss) zdarza się nagminnie, oszczędność znika i rachunek za tokeny rośnie. Warto zrozumieć, co unieważnia tę pamięć - bo zwykle to my sami, nieświadomie, ją psujemy.

Jak to wygląda w praktyce

Prowadzisz dłuższą sesję i zauważasz, że koszt rośnie mniej więcej liniowo z każdą wiadomością, zamiast się spłaszczać - tak jakby cały kontekst był za każdym razem liczony od nowa. W rozliczeniu widać dużo tokenów zapisanych do pamięci podręcznej, a mało z niej odczytanych, co jest wprost obrazem trafień chybionych. Praktycznie odczuwasz to jako droższą i wolniejszą pracę przy zadaniach, które powinny korzystać z tego samego, powtarzalnego kontekstu (na przykład tych samych wielkich plików czy tej samej instrukcji projektu wczytywanej raz za razem).

Dlaczego Claude Code tak działa

Pamięć podręczna promptu działa od początku kontekstu i jest wrażliwa na kolejność. Tania jest tylko ta część na początku, która jest bajt w bajt taka sama jak poprzednio. Gdy cokolwiek zmieni się na początku - albo wcześniej, niż sięga wspólny fragment - cała pamięć podręczna poniżej tego miejsca się unieważnia i musi zostać zbudowana od nowa. Dlatego zabójcze dla trafień jest wstawianie zmiennych, ruchomych treści na początek: bieżącej daty, znaczników czasu, losowych identyfikatorów czy stale przestawianej kolejności instrukcji. Każda taka zmiana przesuwa albo psuje wspólny prefiks i wymusza chybienie. Osobny, oczywisty powód to wyczyszczenie kontekstu poleceniem /clear - zaczynasz wtedy rozmowę od zera, więc nie ma czego trafić. Ogólna zasada jest prosta: to, co niezmienne, na górze; to, co zmienne, jak najniżej.

Jak to rozwiązać krok po kroku

  1. Ustaw stały materiał na początku kontekstu. Duże, niezmienne rzeczy - instrukcje projektu, dokumentację, obszerne pliki, które i tak wracają - powinny być na górze, żeby tworzyły trwały wspólny prefiks.
  2. Zmienne treści przesuń na dół. Bieżące pytanie, aktualny fragment do zmiany, dane wejściowe konkretnego kroku dawaj po stałym bloku, a nie przed nim.
  3. Wytnij z początku kontekstu wszystko, co zmienia się z wywołania na wywołanie: daty, znaczniki czasu, losowe identyfikatory, dynamicznie sortowane listy. To one najczęściej cicho unieważniają pamięć podręczną.
  4. Nie przestawiaj kolejności instrukcji między zapytaniami. Nawet ta sama treść w innej kolejności to inny prefiks, więc trafienie przepada. Ustal układ raz i się go trzymaj.
  5. Nie czyść kontekstu bez potrzeby. Po /clear pamięć podręczna zaczyna się budować od nowa, więc rób to tylko wtedy, gdy faktycznie zaczynasz zupełnie nowe zadanie.
  6. Gdy kontekst i tak trzeba skrócić, wybierz /compact zamiast /clear, jeśli chcesz kontynuować ten sam wątek - zachowasz część pracy zamiast wywalać wszystko.
  7. Jeśli często korzystasz z tych samych dużych materiałów, dawaj je w stałym miejscu i w stałej postaci, żeby narzędzie mogło je raz za razem odczytać z pamięci podręcznej zamiast liczyć od zera.

Jak sprawdzić, że zadziałało

Zajrzyj do rozliczenia użycia tokenów swojej sesji i porównaj liczbę tokenów odczytanych z pamięci podręcznej z liczbą tokenów przetworzonych na nowo - po poprawkach udział odczytów powinien wyraźnie wzrosnąć. Prostym sygnałem jest też przebieg kosztu w dłuższej rozmowie: jeśli po ustabilizowaniu początku kontekstu koszt kolejnych wiadomości przestaje rosnąć liniowo i się spłaszcza, znaczy to, że trafienia zaczęły działać. Przeciwnie, jeśli mimo zmian nadal widzisz same trafienia chybione, sprawdź, czy przypadkiem nie wstrzykujesz na początek kontekstu czegoś zmiennego - to najczęstsza przyczyna, którą łatwo przeoczyć.

Wróć do listy: 100 najczęstszych problemów z Claude Code

Szkolenie Claude Code - od zera do zespołu agentów AI, prowadzi Łukasz Matuszewski (JSystems)

Szkolenie Claude Code - od zera do zespołu agentów AI -->

Szkolenie Claude Code - od zera do zespołu agentów AI

Tryb planowania, tryby uprawnień, komendy, MCP, hooki i systemy multi-agent - wszystko na żywym kodzie podczas trzydniowego szkolenia. Prowadzi Łukasz Matuszewski. Szkolenie ma terminy gwarantowane - odbędzie się niezależnie od liczby zgłoszeń.

Sprawdź szkolenie Claude Code

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Dlaczego koszt pracy z Claude Code rośnie liniowo, jakby cały kontekst liczył się od nowa?
Tak wygląda nagminne trafienie chybione pamięci podręcznej promptu: tania jest tylko ta część na początku kontekstu, która jest bajt w bajt taka sama jak poprzednio. Gdy początek się zmienia z wywołania na wywołanie, cała pamięć podręczna poniżej unieważnia się i musi być budowana od nowa, więc koszt nie spada.
Czemu wstawianie daty albo znacznika czasu na początek kontekstu psuje trafienia w cache?
Pamięć podręczna działa od początku kontekstu i jest wrażliwa na kolejność, więc każda zmienna treść na górze przesuwa albo psuje wspólny prefiks i wymusza chybienie. Data, znacznik czasu, losowy identyfikator czy stale przestawiana kolejność instrukcji to najczęstsze ciche zabójcy trafień.
Jak poprawić trafialność pamięci podręcznej promptu w Claude Code?
Ustaw stały, niezmienny materiał na początku kontekstu, a zmienne treści, czyli bieżące pytanie i dane kroku, przesuń na dół. Wytnij z początku daty i losowe identyfikatory, nie przestawiaj kolejności instrukcji między zapytaniami i nie czyść kontekstu bez potrzeby, bo /clear buduje pamięć od nowa.
Jak sprawdzić, że poprawki zmniejszyły liczbę trafień chybionych?
Zajrzyj do rozliczenia użycia tokenów sesji i porównaj tokeny odczytane z pamięci podręcznej z przetworzonymi na nowo: po poprawkach udział odczytów powinien wyraźnie wzrosnąć. Sygnałem jest też spłaszczenie kosztu w dłuższej rozmowie, a jeśli nadal widzisz same chybienia, sprawdź, czy nie wstrzykujesz na początek kontekstu czegoś zmiennego.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...