Agent obsługuje zgłoszenia, a rachunek rośnie co miesiąc

Ten sam agent, ten sam wolumen zgłoszeń, a rachunek za API wyższy o siedemdziesiąt procent niż w pierwszym pełnym miesiącu. Nikt nie podmienił modelu, dostawca nie podniósł cennika. Zmieniło się to, ile tekstu agent czyta przy każdym pojedynczym kroku – a to jest pozycja, która w obsłudze zgłoszeń dominuje nad wszystkimi pozostałymi.

Poniżej rozbicie rachunku na części, miejsca, w których rośnie po cichu, i kalkulacja dla dwóch tysięcy zgłoszeń miesięcznie z założeniami do podmiany na własne.

Agent obsługuje jedno zgłoszenie i płacisz za cztery pozycje

Faktura od dostawcy modelu wygląda na jedną liczbę, ale powstaje z czterech niezależnych strumieni. Trzeba je rozdzielić, bo każdy rośnie z innego powodu i każdy tnie się inną techniką.

  • Tokeny wejścia – wszystko, co model czyta: prompt systemowy, definicje narzędzi, treść zgłoszenia, wyniki wywołanych narzędzi i cała dotychczasowa historia rozmowy. To zwykle 80-95% objętości.
  • Tokeny wyjścia – to, co model pisze: odpowiedź, wywołania narzędzi, bloki rozumowania. Objętościowo niewiele, ale w cenniku Anthropic dla Claude Sonnet 5 wyjście kosztuje pięciokrotnie więcej niż wejście (15 USD wobec 3 USD za milion tokenów, stan na sierpień 2026; do 31 sierpnia 2026 obowiązuje niższa cena wprowadzająca 2 i 10 USD).
  • Zapis do cache wejścia – płatny narzut za odłożenie stałego początku promptu. Przy pięciominutowym TTL to 1,25-krotność ceny wejścia, przy godzinnym 2-krotność.
  • Odczyt z cache – 0,1 ceny wejścia. To ta pozycja, dla której cały mechanizm istnieje.

Mnożniki cache pochodzą z dokumentacji Anthropic dotyczącej prompt caching. U innych dostawców proporcje bywają inne, ale sama struktura rachunku jest ta sama, więc rozbicie warto zrobić niezależnie od tego, czyj model stoi pod spodem.

Historia rozmowy puchnie z każdym krokiem pętli

Tu leży najczęstsza pomyłka w szacowaniu kosztu agenta. API jest bezstanowe. Model nie pamięta poprzedniego kroku – przy każdym wywołaniu wysyłasz mu całą dotychczasową rozmowę od nowa.

Prześledźmy jedno zgłoszenie w typowym przepływie: agent czyta skrzynkę, klasyfikuje sprawę, odpytuje bazę wiedzy i system ticketowy, po czym pisze odpowiedź.

  • Krok 1. Prompt systemowy, definicje narzędzi, treść maila. Wejście: około 5 500 tokenów. Model odpowiada wywołaniem narzędzia.
  • Krok 2. To samo co wyżej plus wywołanie z kroku 1 plus wynik z bazy wiedzy – trzy fragmenty dokumentacji. Wejście: 7 500 tokenów.
  • Krok 3. To samo plus historia klienta z systemu ticketowego. Wejście: 10 000 tokenów.

Trzy kroki, ale 23 000 tokenów wejścia zamiast 10 000, które widać w ostatnim wywołaniu. Wynik narzędzia z kroku 2 przepłacasz dwa razy, bo jedzie w kontekście do końca zgłoszenia. Przy pięciu krokach zamiast trzech koszt wejścia rośnie nie o dwie trzecie, tylko ponad dwukrotnie – wzrost jest kwadratowy względem liczby kroków, nie liniowy.

Praktyczny wniosek: pozycja „wyniki narzędzi” jest w rachunku ukryta w tokenach wejścia i nikt jej osobno nie mierzy. Narzędzie, które zwraca 4 000 tokenów zamiast 400, podnosi koszt każdego kolejnego kroku w tej rozmowie.

Cache wejścia tnie rachunek, dopóki początek promptu jest bajt w bajt ten sam

Cache wejścia działa na dopasowaniu prefiksu. Dostawca liczy skrót z dokładnych bajtów promptu do wyznaczonego punktu odcięcia i przy kolejnym wywołaniu porównuje go z zapisanym. Zgadza się – płacisz dziesiątą część. Nie zgadza się o jeden bajt – płacisz pełną stawkę za wszystko od miejsca różnicy w dół.

Kolejność renderowania promptu jest stała: najpierw definicje narzędzi, potem prompt systemowy, na końcu wiadomości. Co z tego wynika w praktyce:

  • Data w prompcie systemowym unieważnia wszystko. Wstawka w stylu „dzisiaj jest 2026-08-09, godzina 14:22” na początku promptu sprawia, że nic poniżej nie trafia w cache. Ta sama data w treści wiadomości użytkownika nie psuje niczego.
  • Zmiana zestawu narzędzi resetuje cache w całości. Narzędzia renderują się na pozycji zerowej. Dodanie jednego narzędzia w połowie rozmowy, przełączenie „trybu” przez podmianę listy narzędzi albo niedeterministyczna serializacja JSON-a (nieposortowane klucze, iteracja po zbiorze) unieważniają wszystko.
  • Personalizacja promptu systemowego per klient zabija współdzielenie. Wstrzyknięcie nazwy firmy i ID konta do nagłówka daje tyle osobnych prefiksów, ilu masz klientów. Ta sama treść wstawiona po punkcie odcięcia nie kosztuje nic.
  • Zbyt krótki prefiks nie cache’uje się w ogóle i nie dostajesz o tym żadnego błędu. Progi zależą od modelu: 512 tokenów dla Claude Opus 5, 1024 dla Claude Sonnet 5, 4096 dla Claude Haiku 4.5.
  • Zmiana modelu unieważnia cache. Cache jest przypisany do modelu, więc „przełączmy tanie zgłoszenia na mniejszy model” to decyzja, którą trzeba policzyć razem z utratą trafień.

Jest jeszcze pułapka wolumenowa, którą łatwo przeoczyć. Domyślny TTL to pięć minut. Przy 2 000 zgłoszeń miesięcznie i trzech wywołaniach na zgłoszenie wychodzi około 6 000 wywołań, czyli w godzinach pracy jedno co siedem minut. Cache wygasa między zgłoszeniami i zamiast tanich odczytów płacisz drogie zapisy. Progi break-even są proste: przy TTL pięciominutowym zapis zwraca się po dwóch odczytach, przy godzinnym – po trzech. Jeśli ruch jest rzadszy niż TTL, cache w domyślnej konfiguracji potrafi być droższy niż jego brak.

Weryfikacja jest jednoznaczna. W odpowiedzi z API są trzy pola: cache_read_input_tokens, cache_creation_input_tokens i input_tokens. Jeśli pierwsze z nich uparcie pokazuje zero mimo identycznych promptów, coś unieważnia prefiks. Zrzuć wyrenderowany prompt z dwóch kolejnych wywołań i zrób diff bajtowy – przyczyna zawsze jest widoczna.

Ponowienia i przerwane wywołania dopisują się bez śladu w metrykach biznesowych

Dashboard biznesowy pokazuje 2 000 obsłużonych zgłoszeń. Dostawca policzył 6 400 wywołań. Różnica siedzi w miejscach, których nikt nie ogląda.

Ponowienia po błędach. Klienty API domyślnie powtarzają żądania po 429 i po błędach 5xx, zwykle dwa razy. Każde powtórzenie to pełny koszt wejścia od zera. Przy limitach przepustowości ustawionych zbyt ciasno agent generuje kaskadę 429 i płacisz za tokeny, których nigdy nie zobaczyłeś.

Odcięcie na limicie wyjścia. Wywołanie, które kończy się z powodem zatrzymania „max_tokens”, jest w pełni płatne, a odpowiedź jest bezużyteczna. Retry z wyższym limitem oznacza, że za to samo zgłoszenie zapłaciłeś dwa razy, za drugim razem drożej.

Pętle narzędziowe bez limitu kroków. Agent, który nie potrafi zamknąć sprawy, potrafi krążyć: odpytuje bazę, nie znajduje, odpytuje inaczej, znowu nie znajduje. Każdy obrót dokłada wynik narzędzia do kontekstu i podnosi cenę następnego. Bez twardego limitu iteracji jedno patologiczne zgłoszenie kosztuje tyle, co pięćdziesiąt zwykłych.

Rozumowanie modelu. W modelach z adaptacyjnym myśleniem bloki rozumowania są liczone jako tokeny wyjścia, czyli po najdroższej stawce – także wtedy, gdy nie wyświetlasz ich użytkownikowi. Parametr poziomu wysiłku jest tu realnym regulatorem kosztu, a nie kosmetyką.

Dlaczego drugi miesiąc kosztuje więcej niż pierwszy tydzień

W pierwszym tygodniu prompt systemowy jest chudy, baza wiedzy mała, a agent obsługuje tylko trzy typy spraw. Potem dzieje się to, co zawsze.

Prompt systemowy rośnie o łatki. Każde źle obsłużone zgłoszenie kończy się dopisaniem akapitu z wyjątkiem. Po dwóch miesiącach z 4 000 tokenów robi się 7 000, a te 3 000 tokenów jedzie w każdym z sześciu tysięcy wywołań miesięcznie.

Fragmenty z bazy wiedzy się wydłużają, bo dopisano do niej nowe procedury i wyszukiwanie zwraca więcej trafień. Doszły dwa narzędzia. Zakres spraw poszerzono, więc zgłoszenia wymagają czterech kroków zamiast trzech. Odpowiedzi są dłuższe, bo zespół uznał je za zbyt zdawkowe.

Żadna z tych zmian nie wygląda na kosztową. Każda dokłada do wejścia mnożonego przez liczbę wywołań.

Dochodzi do tego zmiana składu spraw. W pierwszym tygodniu agent dostaje ruch pilotażowy – zwykle najprostsze kategorie, wybrane właśnie dlatego, że są proste. Po otwarciu na pełen strumień rośnie udział zgłoszeń wieloetapowych, z załącznikami i z historią korespondencji. Średnia liczba kroków na zgłoszenie idzie w górę, a razem z nią kwadratowy człon z poprzedniej sekcji. Dlatego ekstrapolacja kosztu z pilotażu na produkcję prawie zawsze zaniża wynik, i to nie o kilka procent.

Liczymy rachunek dla 2 000 zgłoszeń miesięcznie

Stawki: 3 USD za milion tokenów wejścia, 15 USD za milion wyjścia, odczyt z cache 0,3 USD, zapis do cache przy pięciominutowym TTL 3,75 USD. To cennik Anthropic dla Claude Sonnet 5 na sierpień 2026. Wszystkie pozostałe liczby to założenia – podstaw swoje z logów.

Miesiąc pierwszy: prefiks 4 000 tokenów, trzy kroki na zgłoszenie, zmienna część wejścia 1 500 / 3 500 / 6 000 tokenów, wyjście 1 200 tokenów łącznie. Miesiąc trzeci: ten sam wolumen, prefiks 7 000, cztery kroki, zmienna część 1 500 / 3 500 / 6 000 / 9 000, wyjście 1 600.

Pozycja Miesiąc 1 Miesiąc 3
Zapisy prefiksu do cache 8 mln tok. / 30,00 USD 14 mln tok. / 52,50 USD
Odczyty prefiksu z cache 16 mln tok. / 4,80 USD 42 mln tok. / 12,60 USD
Zmienne wejście (zgłoszenie, wyniki narzędzi, historia) 22 mln tok. / 66,00 USD 40 mln tok. / 120,00 USD
Wyjście 2,4 mln tok. / 36,00 USD 3,2 mln tok. / 48,00 USD
Razem 136,80 USD 233,10 USD
Koszt jednego zgłoszenia 0,068 USD 0,117 USD

Ten sam wolumen, wzrost o 70%, i ani jednej decyzji, którą ktokolwiek nazwałby kosztową.

Druga tabela pokazuje, ile w miesiącu pierwszym zależy wyłącznie od tego, czy cache trafia. Zmieniamy tylko obsługę prefiksu, reszta założeń bez zmian.

Wariant obsługi prefiksu Koszt prefiksu Rachunek łącznie
Bez cache (24 mln tokenów po pełnej stawce) 72,00 USD 174,00 USD
Cache wygasa między zgłoszeniami (1 zapis + 2 odczyty) 34,80 USD 136,80 USD
Cache stale ciepły (ruch gęstszy niż TTL) 7,20 USD 109,20 USD

Różnica między najgorszym a najlepszym wariantem to 90% kosztu prefiksu, ale tylko 37% rachunku łącznie. Cache nie jest dźwignią, którą wygrywa się cały budżet – dopóki zmienne wejście i wyjście stanowią większość, tam trzeba szukać reszty.

W miesiącu trzecim zmienne wejście to 120 z 233 USD, czyli ponad połowa rachunku, i żaden cache tego nie dotyka, bo z definicji zmienia się przy każdym wywołaniu. Dźwignie są tam trzy i wszystkie leżą po stronie przepływu, nie modelu: krótsze wyniki narzędzi, mniej kroków na zgłoszenie oraz przycinanie historii, gdy rozmowa przekracza ustalony próg. Czwarta, tańszy model dla części kroków, działa, ale kosztuje utratę trafień w cache i wymaga osobnego pomiaru jakości – klasyfikacja wstępna zwykle znosi mniejszy model bez szkody, redagowanie odpowiedzi do klienta znacznie rzadziej.

Co zmierzyć w tym tygodniu, zanim tkniesz cokolwiek

Optymalizacja bez pomiaru w tym obszarze zwykle kończy się przeniesieniem kosztu, nie jego obcięciem. Kolejność jest taka:

  • Zapisz z każdego wywołania cztery liczby: input_tokens, cache_read_input_tokens, cache_creation_input_tokens, output_tokens – razem z identyfikatorem zgłoszenia i numerem kroku. Bez tego dalsze punkty są zgadywanką.
  • Policz stosunek wywołań do zgłoszeń. Wynik powyżej zakładanej liczby kroków oznacza ponowienia albo pętle – znajdź je, zanim zaczniesz skracać prompt.
  • Sprawdź udział odczytów z cache w całym wejściu. Zero oznacza zmienny prefiks. Niski udział przy ciężkim prefiksie oznacza, że TTL nie pasuje do gęstości ruchu.
  • Zrób ranking narzędzi po średniej długości zwracanego wyniku. To najczęściej najtańsza w naprawie i najbardziej opłacalna pozycja – obcięcie odpowiedzi narzędzia zmniejsza wejście każdego kolejnego kroku.
  • Wyznacz koszt jednego zgłoszenia i pilnuj go jako metryki tygodniowej, obok wskaźnika automatycznego zamknięcia. Rachunek miesięczny miesza wolumen z efektywnością i ukrywa regresję.

Kiedy te pięć liczb jest na wykresie, decyzja do podjęcia jest jedna i konkretna: ustal górny próg kosztu pojedynczego zgłoszenia, przy którym agent przestaje być tańszy od człowieka w Twoim zespole, i wpisz go jako twardy limit w monitoringu. Zgłoszenia, które ten próg przekraczają, kieruj do eskalacji zamiast pozwalać agentowi krążyć – z tym progiem w ręku każda kolejna zmiana promptu, narzędzia czy modelu ma jasne kryterium przyjęcia.