Zyski:
- Wyjaśnij logikę dopasowywania prefiksów w buforowaniu podpowiedzi
- Zwiększa trafienie w pamięć podręczną, umieszczając na pierwszym miejscu stały kontekst, a następnie zmienny kontekst
- Potrafi obliczyć ekonomikę zapisu/odczytu pamięci podręcznej i próg rentowności
Produkt LLM wygląda tanio w prototypie; Kiedy podejdziesz do skali, rachunek zaskakuje. W przypadku większości obciążeń większość rachunków pochodzi z tego samego stałego kontekstu, który jest wysyłany wielokrotnie przy każdym żądaniu: długi monit systemowy, zbiór zasad, dokumentacja referencyjna. Natychmiastowe buforowanie eliminuje dokładnie te marnotrawstwo. W tej części dowiesz się, jak działa pamięć podręczna, jak ustawić zachętę do trafienia i jak obliczyć próg rentowności gospodarki pamięci podręcznej. Prawidłowo zainstalowany może sam obniżyć rachunki o połowę lub nawet mniej.
Jak działa pamięć podręczna? Jedna niezmienna zasada
Buforowanie podpowiedzi to dopasowanie prefiksu. Dostawca tymczasowo przechowuje tokeny, które przetworzył od początku monitu. Jeśli przy następnym żądaniu zachęta zaczyna się od tego samego przedrostka, ta część wspólna nie jest przeliczana; Czytanie jest znacznie tańsze niż pamięć podręczna.
Wynika z tego jedna niezmienna zasada: jeśli pojedynczy bajt zmieni się w dowolnym miejscu przedrostka, od tego momentu cała pamięć podręczna staje się nieważna. Oznacza to, że stała treść powinna znajdować się na początku, a zmienna treść powinna znajdować się na końcu. Jeśli na początku monitu systemowego umieścisz linię, która zmienia się przy każdym żądaniu, np. „Dzisiejsza data: 18.07.2026”, wszystko za nią nie będzie mogło wejść do pamięci podręcznej.
Kolejność przetwarzania jest zazwyczaj następująca: narzędzia → monit systemowy → komunikaty. Umieszczasz punkt pamięci podręcznej (punkt przerwania) na końcu stałej sekcji.
Ekonomia pamięci podręcznej
Pamięć podręczna ma trzy poziomy cenowe:
- Zapis w pamięci podręcznej: Zapisywanie po raz pierwszy. ~1,25x normalna cena wejściowa (za 5 minut przechowywania).
- Odczyt pamięci podręcznej: Czytanie przy kolejnych żądaniach. ~0,1-krotność normalnej ceny wejściowej, czyli jedna dziesiąta.
- Normalne wejście: Część, która nie trafia do pamięci podręcznej i jest za każdym razem przetwarzana przy pełnym koszcie.
Próg rentowności: pierwsze żądanie płaci premię za zapis (1,25×). Od drugiego żądania w grę wchodzi odczyt (0,1×). Mniej więcej, będziecie łeb w łeb w przypadku dwóch próśb; Potem już są oszczędności netto. Im większy ustalony kontekst i im więcej żądań jest ponownie wykorzystywanych, tym większy jest zysk.
Scenariusz
Czy pamięć podręczna działa?
Duży, stały monit systemowy, tysiące żądań
Tak – najwyższe zarobki
Wiele pytań dotyczących tych samych dokumentów referencyjnych
Tak
Zupełnie inny krótki tekst dla każdego żądania
Nie — premia za zapis jest marnowana
Jednorazowa prośba
Nie – w ogóle nie czytam
Zmiana daty/identyfikatora przy każdym żądaniu w wierszu poleceń systemu
Nie — prefiks jest uszkodzony, trafienie wynosi zero
Krok po kroku: jak skonfigurować monit o trafienie?
- Oddziel stałą i zmienną. Jaka treść nigdy się nie zmienia (podpowiedź systemowa, instrukcja, dokumentacja)? Jakie zmiany przy każdym żądaniu (pytanie użytkownika, data, identyfikator)?
- Umieść stałą na początku. Podczas obróbki część, która jest najważniejsza (narzędzia, system) musi być stabilna.
- Umieść zmienną na końcu. Aktualne pytanie użytkownika, ostatnie.
- Umieść znak na końcu granicy. Umieść punkt pamięci podręcznej w ostatnim bloku części stałej.
- Sprawdź trafienie. Sprawdź, czy w polu użycia w odpowiedzi wartość cache_read_input_tokens jest większa od zera. Jeśli zero, w przedrostku znajduje się ukryty element zakłócający.
{ "system": [ { "type": "text", "text": "{{large_constant_system_promptu_and_rules}}", "cache_control": { "type": "efemeryczny" } } ], "messages": [ { "role": "user", "content": "{{user_current_question}}" } ]}
Wskazówka: nie zgaduj trafień w pamięci podręcznej, mierz je. Jeśli use.cache_read_input_tokens w kolejnych żądaniach nadal wynosi zero, uruchamiany jest cichy wyłącznik (datetime.now() w wierszu poleceń systemu, nieuporządkowany JSON, lista narzędzi zmienia się przy każdym żądaniu). Porównaj surowy monit dwóch żądań bajt po bajcie i znajdź różnicę.
Ciche zakłócacze
Typowe wzorce, które nieświadomie uszkadzają pamięć podręczną:
# breaker: osadzanie w wierszu systemowym informacji, która zmienia się przy każdym żądaniu "Dzisiejsza data: {{now}}. Jesteś asystentem..." ← prefiks zmienia się przy każdym żądaniu, trafienie wynosi zero# PRAWDA: przenieś zmienną do systemu wiadomości: "Jesteś asystentem..." ← stała wchodzi do pamięci podręcznej wiadomości: [{role: user, content: "Dzisiaj jest {{teraz}}. Pytanie: ..."}] ← zmienna na końcu
Inne wyłączniki: JSON sortowany inaczej w każdym żądaniu (utrzymuj klucze w ustalonej kolejności), lista narzędzi różniąca się w zależności od użytkownika (narzędzia są przetwarzane w pierwszej kolejności; nic nie trafia do pamięci podręcznej, jeśli ulegną zmianie), zmiana modelu w trakcie rozmowy (pamięć podręczna zależy od modelu).
Słaby monit/silny monit (struktura przyjazna pamięci podręcznej)
# SŁABY (kompilacja kasowania pamięci podręcznej): "Data: 18.07.2026 14:32. Użytkownik: Ahmet (id 8842). Jesteś botem wsparcia. Zasady: ...(2000 tokenów)..."
# STRONG (struktura przyjazna pamięci podręcznej) system: "Jesteś botem wsparcia. Zasady: ...(2000 tokenów, nigdy się nie zmienia)..." [znak pamięci podręcznej]messages: [ { rola: użytkownik, treść: "Data: 18.07.2026 14:32. Identyfikator użytkownika: 8842. Pytanie: jak zainicjować zwrot pieniędzy?" }]
W wersji słabej przy każdym żądaniu przetwarzany jest blok reguł składający się z 2000 tokenów. W wersji mocnej ten sam blok jest zapisywany raz i odczytywany przy wszystkich kolejnych żądaniach za jedną dziesiątą ceny.
Trzy mini etui
Przypadek 1 — Buforowanie zbioru reguł. Automatyzacja księgowości polegała na dodawaniu do każdej faktury 12 000 tokenów; 5000 żądań dziennie. Dane wejściowe bez pamięci podręcznej kosztują ~180 USD dziennie. Utrzymywali stały zbiór reguł i buforowali go: pierwsze żądania płaciły premię za zapis, kolejne odczyty 0,1 ×. Koszt nakładów spadł o ~90% do ~18 dolarów dziennie.
Przypadek 2 – Koszt ukrytej linii daty. Jeden zespół założył skrytkę, ale nie uzyskał żadnych trafień; cache_read_input_tokens zawsze wynosił zero. Powód: w pierwszym wierszu zachęty systemowej znajdowała się funkcja datetime.now(), a prefiks zmieniał się przy każdym żądaniu. Kiedy przenieśliśmy datę do wiadomości użytkownika, współczynnik trafień nagle wzrósł z 0% do 94%.
Przypadek 3 — Źle umieszczona pamięć podręczna. Przy każdym żądaniu aplikacja wyszukująca wysyłała zupełnie inne krótkie zapytania; Chętnie dodali znak skrytki. Bez wspólnego przedrostka każde żądanie płaciło tylko opłatę za zapis, bez odczytów, co zwiększało koszty. Usunęli znak. Lekcja: pamięć podręczna opłaca się tylko wtedy, gdy istnieje duży i stały prefiks, który jest ponownie używany.
Typowe błędy
- Mieszanie stałej i zmiennej: Gdy zawartość zmiennej znajduje się w przedrostku, trafienie jest resetowane.
- Umieszczanie daty/identyfikatora w wierszu systemowym: najczęstszy cichy element zakłócający.
- Brak pomiaru trafienia: jeśli opcja cache_read_input_tokens nie zostanie zaznaczona, marnotrawstwo nie zostanie zauważone.
- Dodawanie pamięci podręcznej, gdy nie ma publicznego prefiksu: płacisz tylko opłatę za zapis, koszt wzrasta.
- Zmiana listy pojazdów lub modelu: Przedrostek jest zepsuty od początku; wszystko jest napisane od nowa.
- Zapominanie o minimalnym rozmiarze pamięci podręcznej: Bardzo krótkie pamięci podręczne (poniżej ~ 1–4 tys. tokenów w zależności od modelu) nie będą wprowadzane do pamięci podręcznej po cichu.
Deeper: Projektowanie pamięci podręcznej według typu obciążenia
Rzeczywista opłacalność buforowania różni się w zależności od charakteru obciążenia; więc najpierw poznaj swój ruch. Trzy typowe wzory i prawidłowy montaż:
Wspólny monit systemowy, różne pytania. Najpopularniejszy wzorzec korporacyjny: duży monit systemowy (rola, reguły, może dokument referencyjny) z setkami różnych pytań użytkowników. Tutaj stała część (system) jest początkowo buforowana; każde nowe pytanie płaci pełną cenę tylko za swoją małą część. Zysk jest bardzo duży, ponieważ duża część jest wielokrotnie recytowana za jedną dziesiątą ceny.
Wielorundowy monolog. W miarę jak rozmowa się przeciąga, każda nowa runda opiera się na całej poprzedniej historii. Jeśli umieścisz flagę pamięci podręcznej na końcu ostatniej rundy, każde żądanie ponownie użyje poprzedniego prefiksu konwersacji; trafienia kumulują się w miarę rozwoju rozmowy. To radykalnie ogranicza koszty długich sesji asystenta.
Ostatnim bitem do zmiany jest wspólny prefiks. Wiele żądań ma wspólny duży zestaw stałych priorytetów (zestaw próbek, instrukcje), ale na końcu są oddzielone pojedynczym pytaniem. Umieszczasz wskaźnik pamięci podręcznej na końcu części współdzielonej; W przeciwnym razie każde żądanie zapisałoby własną oddzielną pamięć podręczną i żadna z nich nie zostałaby odczytana.
Jedno zastrzeżenie: pamięć podręczna zależy od modelu i określonego minimalnego rozmiaru. Bardzo małe prefiksy (poniżej kilku tysięcy tokenów, w zależności od modelu) nie będą dyskretnie wprowadzane do pamięci podręcznej, nawet jeśli je oznaczysz — cache_creation_input_tokens pozostaje zerem. Ponadto zmiana modelu w trakcie rozmowy unieważnia całą pamięć podręczną; Jeśli inne zadanie wymaga taniego modelu, zachowaj główny przepływ w jednym modelu, a zadanie poboczne umieść w osobnym zaproszeniu.
Podsumowując
Buforowanie podpowiedzi to dopasowanie prefiksu: stała treść powinna znajdować się na początku, zmienna treść powinna znajdować się na końcu. W przypadku dużego, ponownie wykorzystywanego kontekstu koszt odczytu wynosi jedną dziesiątą pełnej ceny, co z grubsza równa się rentowności w dwóch żądaniach. Najczęstszym błędem jest uszkodzenie prefiksu poprzez osadzenie zmiennych danych w wierszu poleceń; Weryfikujesz trafienie, mierząc je w polu użycia.
Zadanie aplikacji
Wybierz obciążenie. (1) Podziel treść na dwie kolumny: „nigdy się nie zmienia” i „zmienia się przy każdym żądaniu”. (2) Narysuj ponownie strukturę podpowiedzi, umieszczając część stałą na początku i część zmienną na końcu. (3) Oszacuj rozmiar żetonu części stałej i porównaj miesięczny koszt z/bez pamięci podręcznej. (4) Zanotuj, z którego pola (cache_read_input_tokens) będziesz weryfikować trafienie.
lista kontrolna
- [ ] Mogę wyjaśnić, że pamięć podręczna to dopasowywanie prefiksów i jedyna niezmienna reguła.
- [ ] Mogę zwiększyć dokładność, umieszczając stałą treść na początku i zmienną na końcu.
- [ ] Znam ekonomię zapisu/odczytu i próg rentowności przy dwóch żądaniach.
- [ ] Potrafię rozpoznać ciche zakłócacze (data, nieuporządkowany JSON, zmieniająca się lista pojazdów).
- [ ] Mogę zweryfikować trafienie za pomocą use.cache_read_input_tokens.