Powrót do bloga

Optymalizacja kosztówPrzewodnik

Oszacuj koszt API turnieju modeli, zanim go uruchomisz

Policz tokeny na miejsce, pomnóż przez gry i zamiany stron, i ustaw twardy limit w Pythonie: opracowany szacunek dla 6-miejscowego turnieju modeli z 60 grami.

Autor: CheapTokens TeamOpublikowano 5 min czytania

Okładka: koszt turnieju modeli przed uruchomieniem, od miejsc i tur po rosnącą historię i limit budżetu
Na tej stronie
  1. Co mówi, a czego nie mówi nagłówek o 20 000 dolarów
  2. Jedno miejsce: dlaczego wejście wciąż rośnie
  3. Od jednego miejsca do całego turnieju
  4. Ustaw twardy limit w kodzie
  5. Bezpieczna kolejność pierwszego uruchomienia

Możesz poznać rachunek za turniej modeli jeszcze przed pierwszym zapytaniem: policz tokeny, które jedno miejsce wysyła przez całą grę, pomnóż przez liczbę miejsc i gier, i ustaw twardy limit w kodzie. To, co ludzie przeoczają, to historia. Każda tura ponownie wysyła wszystko, co powiedziano do tej pory, więc wejście rośnie znacznie szybciej niż liczba tur.

Co mówi, a czego nie mówi nagłówek o 20 000 dolarów#

5 listopada 2026 r. podcaster Dwarkesh Patel opublikował Clocktower Bench, benchmark, w którym modele grają przeciwko sobie w grę dedukcji społecznej Blood on the Clocktower. Twierdzi, że wydał około 20 000 dolarów kredytów API na zbudowanie środowiska testowego i że znaczna część poszła na iterowanie nad projektem środowiska, więcej niż na tokeny, które planował.

README projektu (sprawdzone 8 listopada 2026 r.) opisuje konfigurację: 11 modeli, 386 gier w rankingu głównym, jeden model grający na każdym dobrym miejscu i inny na każdym złym, 10–12 graczy, gry trwające kilka godzin. Każde rozdanie jest rozgrywane ponownie ze zamienionymi stronami, więc żaden model nie dostaje łatwiejszej roli. Zawiera też darmowy przebieg próbny (--model random), zapisuje wydatki do games/ledger.jsonl i ma limit --budget domyślnie ustawiony na 1000 dolarów.

Czego nie podaje, to tokenów na grę. Więc nie ma czego kopiować; sam budujesz szacunek. To robi reszta tego artykułu, z podanymi założeniami, które możesz zamienić na własne.

Jedno miejsce: dlaczego wejście wciąż rośnie#

Załóżmy, że prowadzisz mniejszą grę: 6 miejsc, każde miejsce to model z własną rozmową, 20 tur na miejsce. Przyjmij 2000-tokenowy prompt systemowy (zasady i rola miejsca), 600 nowych tokenów rozmowy przy stole przychodzących przed każdą turą i 300-tokenową odpowiedź. API nie ma pamięci, więc każde zapytanie ponownie niesie całą rozmowę (dlaczego długi czat kosztuje więcej).

Tura 1 wysyła 2000 + 600 = 2600 tokenów. Tura 20 wysyła 2000 + 600 × 20 + 300 × 19 = 19 700. Spróbuj sam policzyć ostatnią liczbę:

Zgadnij liczbę

Ile tokenów wejściowych wysyła miejsce w swojej 20. turze?

Pokaż odpowiedź

Odpowiedź: 19 700

19 700: 2000-tokenowy prompt systemowy, 20 × 600 nowej rozmowy i 19 wcześniejszych odpowiedzi po 300 każda. Każda stara odpowiedź i każda stara wiadomość wraca.

Zsumuj wszystkie 20 tur dla jednego miejsca: 2000 × 20 + 600 × 210 + 300 × 190 = 40 000 + 126 000 + 57 000 = 223 000 tokenów wejściowych. Wyjście to tylko 20 × 300 = 6000. Gdybyś policzył każdą wiadomość raz, dostałbyś 2000 + 20 × 600 = 14 000 i pomyliłbyś się szesnastokrotnie.

Liczenie raz versus ponowne wysyłanie historii dla jednego miejsca przez 20 tur
Jedno miejsce, 20 tur: liczenie wiadomości raz daje 14 000 tokenów wejściowych, ponowne wysyłanie historii daje 223 000. Założenia tego artykułu.

Strona wyjściowa ledwo się zmienia. Wejście to miejsce, w które idą pieniądze, i to strona, która pogarsza się wraz z wydłużaniem gier.

Od jednego miejsca do całego turnieju#

Teraz przeskaluj to trzema mnożnikami.

  • Miejsca. 6 miejsc × 223 000 = 1 338 000 tokenów wejściowych i 6 × 6000 = 36 000 tokenów wyjściowych na grę.
  • Zamiana stron. Weź 3 modele w round robin: 3 pary. Rozegraj 10 rozdań na parę, każde dwa razy ze zamienionymi stronami: 3 × 10 × 2 = 60 gier.
  • Gry. 60 × 1 338 000 = 80 280 000 wejściowych i 60 × 36 000 = 2 160 000 wyjściowych tokenów na turniej.
Od jednego miejsca do 60 gier: mnożniki
Założenia tego artykułu: 6 miejsc, 3 pary × 10 rozdań × 2 strony = 60 gier.

Jedna gra na DeepSeek-V4-Flash kosztuje $0.0237. Poniższa tabela wycenia cały 60-growy turniej tak, jakby ten jeden model grał na każdym miejscu, więc możesz porównać trzy modele oferowane przez CheapTokens do tego rodzaju zadania z długą rozmową. W sumie, licząc wejście i wyjście razem, każdy z nich jest tańszy niż referencja OpenRouter w ostatniej kolumnie.

Model Za żądanie 60 żądań OpenRouter, 60 żądań
GLM-5.3-Flash $0.0282 $1.69 $2.87
DeepSeek-V4-Flash $0.0237 $1.42 $5.92
MiniMax-M2.7 $0.0723 $4.34 $52.06

1 338 000 tokenów wejściowych i 36 000 tokenów wyjściowych na żądanie. Ceny za 1 mln tokenów są aktualne i zmieniają się wraz z naszymi taryfami; kolumna OpenRouter pokazuje ceny referencyjne dla tego samego obciążenia.

Budżetowo to cała sztuczka: nie potrzebujesz pozycji o wartości 20 000 dolarów, aby dowiedzieć się, który z trzech modeli lepiej gra w grę negocjacyjną. Potrzebujesz powyższego szacunku, a potem prawdziwego pilotażu, aby go sprawdzić.

Szybkie sprawdzenie

Twoja 6-miejscowa gra przechodzi z 20 na 40 tur na miejsce. Co dzieje się z rachunkiem za wejście?

Pokaż odpowiedź

Odpowiedź: Rośnie około 3,6 razy

Dla 40 tur ten sam wzór daje 2000 × 40 + 600 × 820 + 300 × 780 = 806 000 tokenów wejściowych, w porównaniu do 223 000 dla 20 tur. Człon historii rośnie z kwadratem liczby tur.

Dwa sprawdzenia, zanim zaufasz takiej liczbie. Po pierwsze, największe zapytanie musi mieścić się w oknie modelu. Przy 20 turach największe zapytanie to 19 700 tokenów, bez problemu. Wielogodzinna gra z 200 turami na miejsce osiąga 2000 + 600 × 200 + 300 × 199 = 181 700, około 182K, więc przeczytaj rozmiar kontekstu na stronie modelu, zanim zaprojektujesz grę. DeepSeek-V4-Flash ma okno 380K i do 32 768 tokenów wyjściowych; zobacz stronę modelu. Po drugie, jeśli model generuje długie rozumowanie, twoje 300 tokenów wyjściowych staje się większe (tokeny myślenia w zadaniu wsadowym).

Ustaw twardy limit w kodzie#

Flaga --budget z README to właściwy pomysł, a skopiowanie jej do własnego środowiska testowego zajmuje dziesięć linii. Poniższy skrypt szacuje przed uruchomieniem, odmawia wysłania zapytania, które mogłoby przekroczyć limit, i loguje każde wywołanie do pliku księgi. Ceny w nim są przykładowe: zastąp je aktualnymi z tabeli cen.

python
import json, os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'
PRICE_IN, PRICE_OUT = 0.10, 0.40  # per 1M tokens: example, substitute current
CAP_USD = 5.00
spent = 0.0


def cost(tin, tout):
    return (tin * PRICE_IN + tout * PRICE_OUT) / 1_000_000


def estimate(seats, turns, system=2000, new_in=600, out=300):
    tin = sum(system + new_in * k + out * (k - 1) for k in range(1, turns + 1))
    return seats * tin, seats * turns * out


def ask(seat, history, max_out=400):
    global spent
    rough_in = sum(len(m['content']) for m in history) // 3  # pessimistic
    if spent + cost(rough_in, max_out) > CAP_USD:
        raise SystemExit(f'cap reached: ${spent:.4f} spent')
    r = client.chat.completions.create(
        model=MODEL, messages=history, max_tokens=max_out)
    u = r.usage
    spent += cost(u.prompt_tokens, u.completion_tokens)
    with open('ledger.jsonl', 'a') as f:
        f.write(json.dumps({'seat': seat, 'in': u.prompt_tokens,
                            'out': u.completion_tokens,
                            'spent': round(spent, 6)}) + '\n')
    return r.choices[0].message.content


print(estimate(6, 20))  # (1338000, 36000) per game

estimate(6, 20) wypisuje (1338000, 36000), te same liczby na grę co powyżej, więc kod i arytmetyka sprawdzają się nawzajem. usage.prompt_tokens i usage.completion_tokens pochodzą z odpowiedzi i to za nie płacisz; wstępne sprawdzenie używa pesymistycznego liczenia znaków, ponieważ prawdziwa liczba jest znana dopiero po wywołaniu. Więcej o księgach na projekt w śledzeniu kosztu tokenów agenta w Pythonie.

Bezpieczna kolejność pierwszego uruchomienia#

Własna sekwencja repozytorium to dobry wzorzec: najpierw darmowo, potem tanio, na końcu drogo. Ułóż te kroki w kolejności:

Ustaw w kolejności

Ułóż kroki bezpiecznego pierwszego uruchomienia w kolejności

  1. Przebieg próbny z losowym graczem, bez wywołań API
  2. Uruchom estimate() i porównaj z limitem
  3. Rozegraj jedną prawdziwą grę i przeczytaj księgę
  4. Popraw założenia rzeczywistymi liczbami tokenów
  5. Uruchom pełny turniej z włączonym limitem

README mówi, że gra demonstracyjna na tanich modelach kosztuje około 2–5 dolarów. To stwierdzenie autora, a modele nie są nazwane, więc traktuj to jako zakres kontrolny, a nie wycenę dla twojej konfiguracji. Twoja własna gra pilotażowa daje liczbę, która ma znaczenie: jeśli jej księga pokazuje 1 500 000 tokenów wejściowych, gdy zakładałeś 1 338 000, nauczyłeś się czegoś za kilka centów, a nie przy grze 40.

W przypadku dłuższych eksperymentów zwykłe dźwignie są w przycinaniu historii czatu: wytnij to, co każde miejsce musi ponownie przeczytać, a człon kwadratowy się zmniejszy. Gdy będziesz gotowy to uruchomić, dokumentacja zawiera endpoint i identyfikatory modeli.