Optymalizacja kosztówPrzewodnik
Policz tokeny, zanim wyślesz żądanie: tiktoken w Pythonie
Oszacuj liczbę tokenów promptu offline za pomocą tiktoken, sprawdź ją względem okna kontekstu, wyceń i porównaj z polem usage z API.

Na tej stronie
Możesz policzyć tokeny promptu na własnej maszynie, zanim zostanie wysłany: zainstaluj tiktoken, zakoduj tekst, weź len() z wyniku. tiktoken to tokenizer OpenAI, więc dla modeli DeepSeek, GLM i MiniMax liczba jest szacunkiem. Prawdziwa wartość wraca w usage. po pierwszym wywołaniu, a porównanie obu zajmuje jeszcze jedną linię.
Po co się trudzić? Bo rachunek i błędy zaczynają się od rozmiaru wejścia. Wklej długi kontrakt do skryptu i dowiesz się, że był za duży, dopiero gdy API odpowie kodem 400. Uruchom partię pięciu tysięcy maili i dowiesz się, ile to kosztowało, dopiero gdy saldo będzie niższe. Wcześniejsze policzenie zamienia obie niespodzianki w liczbę, którą można odczytać z wyprzedzeniem.
Pięć linii, które liczą tokeny#
README tiktoken (sprawdzone 1 listopada 2026) pokazuje cały pomysł: wybierz kodowanie, zakoduj tekst, a długość listy to liczba tokenów.
pip install tiktokenimport tiktoken
enc = tiktoken.get_encoding('o200k_base')
text = 'Hello world'
tokens = enc.encode(text)
print(len(tokens)) # how many tokens the text is
enc. zwraca oryginalny tekst, co jest wygodną kontrolą, że patrzysz na ten sam tekst, który zobaczy model. README wspomina też o tiktoken., które wybiera tokenizer dla konkretnego modelu OpenAI. I to jest haczyk, o którym warto pamiętać: tokenizery należą do rodzin modeli. Zasada kciuka z README to około czterech bajtów tekstu na token i dotyczy ona wyłącznie tokenizerów OpenAI.
Więc co zrobić dla modelu DeepSeek? Użyj tej samej liczby jako roboczego szacunku i skalibruj go, jak pokazano poniżej.
Zgadnij liczbę
Mniej więcej ile tokenów ma 2000-znakowy tekst angielski?
Twoje przypuszczenie
02000
Pokaż odpowiedź
Odpowiedź: 500
Około 500. Przy zasadzie kciuka z README wynoszącej cztery bajty na token i zwykłym tekście angielskim o rozmiarze około jednego bajta na znak, 2000 ÷ 4 = 500. Inne języki i emoji zajmują więcej bajtów na znak, więc te same 2000 znaków zwykle oznacza więcej tokenów według tej zasady.
Czy prompt mieści się w oknie?#
Każdy model ma okno kontekstu, a twoje wejście plus odpowiedź, na którą pozwalasz, musi się w nim zmieścić. Okna dla modeli, które obsługujemy: DeepSeek-V4-Flash 380K, GLM-5.3-Flash 390K, MiniMax-M2.7 180K tokenów. Najdłuższa odpowiedź to 32 768 tokenów dla DeepSeek-V4-Flash i 8192 dla pozostałych dwóch (lista modeli CheapTokens, 1 listopada 2026).
Zabezpieczenie przed wywołaniem to cztery linie:
CONTEXT = {
'deepseek-ai/DeepSeek-V4-Flash-0731': 380_000,
'zai-org/GLM-5.3-Flash': 390_000,
'MiniMaxAI/MiniMax-M2.7': 180_000,
}
def fits(prompt_tokens, max_tokens, model):
return prompt_tokens + max_tokens <= CONTEXT[model]Powiedzmy, że masz dokument o rozmiarze 250 000 tokenów. fits(250_ to False, więc kierujesz to zadanie do modelu z większym oknem albo dzielisz dokument i błąd 400 nigdy nie występuje. fits(250_ to True. Jeśli chcesz poznać pełną historię tego, jak wygląda błąd, request too long: 400 vs 413, context window and max_tokens omawia to szczegółowo.
Ile to będzie kosztować?#
Teraz budżet. Weź jedną typową pozycję, policz ją i pomnóż. Załóżmy, że klasyfikujesz 5000 maili z zamówieniami. Liczysz jeden reprezentatywny mail i otrzymujesz około 800 tokenów wejściowych, a etykietę i krótkie uzasadnienie ograniczasz do 200 tokenów wyjściowych. Sumy: 5000 × 800 = 4 000 000 tokenów wejściowych i 5000 × 200 = 1 000 000 tokenów wyjściowych.
Poniższa tabela wycenia dokładnie to obciążenie według aktualnych cen, licząc wejście i wyjście razem:
| Model | Wejście $/1M | Wyjście $/1M | Za żądanie | 5000 żądań | OpenRouter, 5000 żądań |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000024 | $0.12 | $0.217 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000032 | $0.16 | $0.42 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.00007 | $0.35 | $4.20 |
800 tokenów wejściowych i 200 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.
Łącznie, licząc wejście i wyjście razem, kolumna CheapTokens jest tańsza niż OpenRouter dla tych modeli. Zmień te trzy liczby na własne i masz budżet przed pierwszym żądaniem. Aby poznać różnicę między obiema stronami rachunku, zobacz input vs output tokens: what an AI API bills you for, a po rzeczywiste zmierzone przykłady how many tokens an API request uses. Aktualne ceny są zawsze na stronie z cenami.

Porównaj szacunek ze zużyciem#
Szacunek to zgadywanie cudzego tokenizera, więc sprawdź go raz z kluczem odpowiedzi. Każda odpowiedź zawiera pole usage, a usage. to liczba, którą API naliczyło dla twojego wejścia. Postaw obie liczby obok siebie i podziel.
Krok po kroku
Uruchom porównanie
Konfiguracja
Zainstaluj pakiety i umieść klucz w zmiennej środowiskowej. Nigdy nie wklejaj go do skryptu.
pip install tiktoken openai
export CHEAPTOKENS_API_KEY='your-key-here'Uruchom skrypt
Zapisz to jako compare.py. Liczy lokalnie, wysyła żądanie do https:/ i wypisuje obie liczby. Identyfikator modelu to pełny identyfikator z listy modeli CheapTokens, ponieważ skrócone nazwy nie są akceptowane.
import os
import tiktoken
from openai import OpenAI
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'
enc = tiktoken.get_encoding('o200k_base')
messages = [{'role': 'user',
'content': 'Classify this email as order, refund or other: Hi, my parcel from last Tuesday has not arrived yet.'}]
estimate = sum(len(enc.encode(m['content'])) for m in messages)
client = OpenAI(base_url='https://api.cheaptokens.dev/v1',
api_key=os.environ['CHEAPTOKENS_API_KEY'])
r = client.chat.completions.create(model=MODEL, messages=messages, max_tokens=200)
real = r.usage.prompt_tokens
print(f'estimate {estimate}, usage.prompt_tokens {real}, ratio {real / estimate:.2f}')Odczytaj różnicę
Ostatnia linia wypisuje trzy liczby. Powiedzmy, że pokazuje estimate 24, usage.. Wtedy przed budżetowaniem pomnóż przyszłe szacunki przez ten stosunek. Rzeczywisty prompt jest też opakowany w formatowanie czatu, więc rzeczywista liczba może wyjść nieco wyższa niż szacunek dla zwykłego tekstu. Uruchom to na kilku typowych promptach, nie na jednym, i użyj średniego stosunku.
Od tej pory rutyna jest taka: szacuj lokalnie, zabezpiecz okno, zastosuj swój stosunek do budżetu i pozwól, by usage w każdej odpowiedzi trzymało cię w ryzach. Jeśli chcesz też sumę narastającą dla całego zadania, track AI agent token cost in Python buduje to na tym samym polu. Nowy w samym połączeniu? Your first API request with CheapTokens to omawia, a dokumentacja ma resztę.
Dopasuj pary
Dopasuj każdą nazwę do tego, co ci mówi
Dotknij element po lewej, a następnie jego parę
- len(enc.encode(text))Twój lokalny szacunek rozmiaru wejścia
- usage.prompt_tokensRozmiar wejścia tak, jak naliczyło go API
- usage.completion_tokensRozmiar odpowiedzi, wyceniany po stronie wyjścia
- max_tokensLimit długości odpowiedzi, który rezerwujesz w sprawdzaniu okna
Liczenie jest tanie, lokalne i zajmuje sekundy. Zrób to przed wywołaniem, które kosztuje pieniądze.



