Rachunek stojący za fakturą za LLM

Spis treści
Rachunek za aplikację, która rozmawia z modelem językowym przez interfejs, łatwo oszacować i zwykle szacuje się go błędnie. Powód jest prosty: szacuje się na żądanie, a płaci się na rozmowę. Jedno żądanie to pytanie i odpowiedź. Rozmowa to to samo pytanie, wysyłane ponownie z każdym kolejnym.
Cała reszta – pamięć podręczna, tryb wsadowy, wybór modelu – zmienia liczbę już ustaloną przez tę budowę. Warto więc spojrzeć na budowę przed cennikiem.

Dlaczego długa rozmowa drożeje ponad miarę
Modele nie mają pamięci między wywołaniami. Kontynuowanie rozmowy oznacza więc ponowne wysłanie całego dotychczasowego przebiegu. W drugiej rundzie pierwsze pytanie wraz z odpowiedzią jest opłacane po raz drugi, w trzeciej pierwsze dwa, i tak dalej.
Tabela przelicza to dla rozmowy, w której instrukcja systemowa liczy 1200 tokenów, każde pytanie 150, a każda odpowiedź 400. Tokeny to z grubsza cząstki słów; sto tokenów odpowiada mniej więcej siedemdziesięciu słowom.
| Runda | Wejście tej rundy | Opłacone łącznie do tego miejsca |
|---|---|---|
| 1 | 1 350 | 1 350 |
| 2 | 1 900 | 3 250 |
| 3 | 2 450 | 5 700 |
| 4 | 3 000 | 8 700 |
| 5 | 3 550 | 12 250 |
| 6 | 4 100 | 16 350 |
| 7 | 4 650 | 21 000 |
| 8 | 5 200 | 26 200 |
Po ośmiu rundach opłacone jest 26 200 tokenów wejścia, choć cała rozmowa liczy na końcu tylko 5200 tokenów. A koszt rośnie szybciej niż sama rozmowa: dwukrotnie więcej rund, z czterech na osiem, kosztuje nie dwa razy tyle, lecz mniej więcej trzy razy tyle.
Z tych 26 200 tokenów 21 000 to tekst, który model już raz dostał – cztery piąte. To argument za dwiema decyzjami niemającymi nic wspólnego z cenami: trzymaniem instrukcji systemowej krótko i streszczaniem długiej rozmowy zamiast ciągnięcia jej w całości. Oba zmniejszają liczbę, która przypada do zapłaty w każdej jeszcze nadchodzącej rundzie.
Cztery ceny za ten sam token
| Rodzaj | Stosunek | Co kosztuje w zamian |
|---|---|---|
| Wejście | 1× | odniesienie, względem którego mierzy się każdy kolejny wiersz |
| Wyjście | 3× do 5× | nic – jest po prostu drogą połową |
| Pamięć podręczna, odczyt | około 0,1× | niezmieniony początek i trwałość liczoną w minutach |
| Pamięć podręczna, zapis | około 1,25× | płatny raz na wpis, zanim cokolwiek zostanie zaoszczędzone |
| Wsad | 0,5× po obu stronach | czas oczekiwania: odpowiedź w godzinach zamiast w sekundach |
Wiersz o pamięci podręcznej niesie ze sobą warunek. Trafienie wymaga początku identycznego co do znaku z wcześniejszym żądaniem – instrukcja systemowa z bieżącą godziną w środku nigdy nie zostanie zapamiętana, a rozmowa, której przebieg się później edytuje, unieważnia wszystko od miejsca zmiany. Wspólna część musi być stała i musi stać z przodu.
Cena zapisu jest powodem, dla którego zapamiętywanie krótkich instrukcji się nie opłaca. Zapis kosztuje więcej niż wysłanie, wpis musi więc zostać odczytany wielokrotnie, zanim się zwróci – przy powyższych stosunkach jakieś dwa do trzech razy. Instrukcja potrzebna raz na godzinę, przy wpisie trzymającym pięć minut, jest za każdym razem opłacana po cenie zapisu.
Ile naprawdę kosztuje rabat wsadowy
Połowa ceny za tę samą pracę wygląda na najłatwiejszą decyzję z listy i nią jest – dla pracy, która to zniesie. Żądanie wsadowe zostaje obsłużone, gdy u dostawcy zwolni się moc; to okno godzin, a nie obietnica, i nic w żądaniu nie może zależeć od tego, że ktoś czeka.
To wyklucza wszystko interaktywne i włącza niemal całą resztę: uporządkowanie zaległości, wygenerowanie opisów do katalogu, przetłumaczenie archiwum, wyciągnięcie pól ze stosu dokumentów. Użytecznym nawykiem jest sortowanie pracy po tym, czy ktoś właśnie patrzy na ekran – bo to pytanie rozstrzyga, która z dwóch cen obowiązuje, a nie model i nie instrukcja.
Tokeny to nie słowa i nie w każdym języku równie tanie
Token odpowiada mniej więcej czterem znakom tekstu angielskiego, słowo zatem około 1,3 tokena. Polski i niemiecki wypadają gorzej: złożenia, odmiana i znaki diakrytyczne rozpadają się na więcej części, a to samo zdanie kosztuje w tłumaczeniu wyraźnie więcej tokenów niż angielski, z którego pochodzi.
W aplikacji wielojęzycznej objawia się to różnicą kosztu rzędu trzydziestu do pięćdziesięciu procent na język przy tej samej treści, i to w obie strony – instrukcja kosztuje więcej i odpowiedź również. To nie powód, by robić cokolwiek inaczej; to powód, by mierzyć osobno dla każdego języka zamiast zmierzyć raz i pomnożyć – bo właśnie tak budżet kończy się w dokładnie tych dwóch językach, w których nikt nie sprawdzał.
Strona wyjścia to ta, której nikt nie steruje
Wyjście jest drogą połową i połową najmniej precyzyjnie określoną. max_tokens to górna granica, a nie cel; model poproszony o streszczenie wytworzy długość, którą uzna za stosowną, a polecenie ją skracające stoi w instrukcji, a nie w parametrach.
Dwa nawyki ruszają tę liczbę bardziej niż cokolwiek innego. Żądanie odpowiedzi ustrukturyzowanej z krótkimi nazwami pól zamiast prozy – obiekt JSON z trzema kluczami kosztuje ułamek akapitu mówiącego to samo. I, tam gdzie model potrafi rozbudowane rozumowanie, pamiętanie, że te tokeny również rozlicza się jako wyjście: żądanie zwracające czterdzieści tokenów odpowiedzi po dwóch tysiącach tokenów myślenia rozlicza się z dwóch tysięcy czterdziestu.