Powrót do bloga

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.

Autor: CheapTokens TeamOpublikowano 4 min czytania

Terminal pokazujący pip install tiktoken i jednoliniowe liczenie tokenów
Na tej stronie
  1. Pięć linii, które liczą tokeny
  2. Czy prompt mieści się w oknie?
  3. Ile to będzie kosztować?
  4. Porównaj szacunek ze zużyciem

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.prompt_tokens 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.

bash
pip install tiktoken
python
import tiktoken

enc = tiktoken.get_encoding('o200k_base')
text = 'Hello world'
tokens = enc.encode(text)
print(len(tokens))  # how many tokens the text is
Pięć linii w pliku o nazwie estimate.py
Cały licznik: get_encoding, encode, len.

enc.decode(tokens) zwraca oryginalny tekst, co jest wygodną kontrolą, że patrzysz na ten sam tekst, który zobaczy model. README wspomina też o tiktoken.encoding_for_model('gpt-4o'), 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?

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:

python
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_000, 8_192, 'MiniMaxAI/MiniMax-M2.7') 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_000, 8_192, 'deepseek-ai/DeepSeek-V4-Flash-0731') 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 Za żądanie 5000 żądań OpenRouter, 5000 żądań
GLM-5.3-Flash $0.000024 $0.12 $0.217
DeepSeek-V4-Flash $0.000032 $0.16 $0.42
MiniMax-M2.7 $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.

Przepływ szacowania od tekstu do rzeczywistej liczby zużycia
Oszacuj offline, zabezpiecz okno, wyślij, a potem porównaj ze zużyciem.

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.prompt_tokens 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.

bash
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://api.cheaptokens.dev/v1 i wypisuje obie liczby. Identyfikator modelu to pełny identyfikator z listy modeli CheapTokens, ponieważ skrócone nazwy nie są akceptowane.

python
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.prompt_tokens 31, ratio 1.29. 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

  • 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.