Bumalik sa blog

Pag-optimize ng gastosGabay

Bilangin ang mga token bago magpadala ng request: tiktoken sa Python

Tantyahin ang bilang ng token ng isang prompt offline gamit ang tiktoken, suriin ito laban sa context window, presyuhan ito, at ihambing sa usage field ng API.

Ni CheapTokens TeamNai-publish noong 6 min na pagbabasa

Terminal na nagpapakita ng pip install tiktoken at isang linyang token count
Sa pahinang ito
  1. Limang linya na nagbibilang ng token
  2. Kasya ba ang prompt sa window?
  3. Magkano ito?
  4. Ihambing ang tantya sa usage

Maaari mong bilangin ang mga token ng isang prompt sa sarili mong makina bago ito ipadala: i-install ang tiktoken, i-encode ang teksto, kunin ang len() ng resulta. Ang tiktoken ay tokeniser ng OpenAI, kaya para sa mga modelong DeepSeek, GLM at MiniMax ang bilang ay tantya. Ang tunay na bilang ay bumabalik sa usage.prompt_tokens pagkatapos ng unang tawag, at ang paghahambing ng dalawa ay tumatagal ng isa pang linya.

Bakit mag-abala? Dahil ang bayarin at ang mga error ay parehong nagsisimula sa laki ng input. I-paste ang isang mahabang kontrata sa isang script, at malalaman mo lamang na ito ay masyadong malaki kapag sumagot ang API ng 400. Magpatakbo ng batch ng limang libong email, at malalaman mo lamang ang gastos kapag mas mababa na ang balanse. Ang pagbilang muna ay ginagawang isang numerong mababasa mo nang maaga ang parehong sorpresa.

Limang linya na nagbibilang ng token#

Ang tiktoken README (sinuri noong 1 Nobyembre 2026) ay nagpapakita ng buong ideya: pumili ng encoding, i-encode ang teksto, at ang haba ng listahan ay ang bilang ng token.

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
Ang limang linya sa isang file na tinatawag na estimate.py
Ang buong counter: get_encoding, encode, len.

Ang enc.decode(tokens) ay nagbabalik ng orihinal na teksto, na isang madaling sanity check na tinitingnan mo ang parehong teksto na makikita ng modelo. Binanggit din ng README ang tiktoken.encoding_for_model('gpt-4o'), na pumipili ng tokeniser para sa isang partikular na modelong OpenAI. Iyon ang catch na dapat tandaan: ang mga tokeniser ay nabibilang sa mga pamilya ng modelo. Ang rule of thumb ng README ay humigit-kumulang apat na byte ng teksto bawat token, at inilalarawan lamang nito ang mga tokeniser ng OpenAI.

Kaya ano ang gagawin mo para sa isang modelong DeepSeek? Gamitin ang parehong bilang bilang gumaganang tantya, at i-calibrate ito, tulad ng ipinapakita sa ibaba.

Hulaan ang numero

Gaano karaming token ang isang 2,000-character na tekstong Ingles?

Ipakita ang sagot

Sagot: 500

Mga 500. Sa rule of thumb ng README na apat na byte bawat token, at ang plain English na teksto ay mga isang byte bawat character, 2,000 ÷ 4 = 500. Ang ibang mga wika at emoji ay tumatagal ng mas maraming byte bawat character, kaya ang parehong 2,000 character ay karaniwang nangangahulugan ng mas maraming token sa rule na iyon.

Kasya ba ang prompt sa window?#

Bawat modelo ay may context window, at ang iyong input kasama ang sagot na pinapayagan mo ay dapat kasya dito. Ang mga window para sa mga modelong pinaglilingkuran namin: DeepSeek-V4-Flash 380K, GLM-5.3-Flash 390K, MiniMax-M2.7 180K token. Ang pinakamahabang sagot ay 32,768 token para sa DeepSeek-V4-Flash at 8,192 para sa dalawa pa (listahan ng modelo ng CheapTokens, 1 Nobyembre 2026).

Ang guard bago ang tawag ay apat na linya:

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]

Sabihin nating mayroon kang 250,000-token na dokumento. Ang fits(250_000, 8_192, 'MiniMaxAI/MiniMax-M2.7') ay False, kaya iruruta mo ang job na iyon sa isang modelong may mas malaking window o hatiin ang dokumento, at hindi mangyayari ang 400. Ang fits(250_000, 8_192, 'deepseek-ai/DeepSeek-V4-Flash-0731') ay True. Kung gusto mo ang buong kuwento kung ano ang hitsura ng error, request too long: 400 vs 413, context window and max_tokens ay dumadaan dito.

Magkano ito?#

Ngayon ang budget. Kumuha ng isang tipikal na item, bilangin ito, at i-multiply. Ipagpalagay na nag-classify ka ng 5,000 order email. Binibilang mo ang isang representatibong email at nakakuha ng mga 800 input token, at nililimitahan mo ang label at isang maikling dahilan sa 200 output token. Ang mga total: 5,000 × 800 = 4,000,000 input token at 5,000 × 200 = 1,000,000 output token.

Ang talahanayan sa ibaba ay nagpepresyo ng eksaktong workload na iyon sa live na presyo, na pinagsama ang input at output:

Modelo Bawat kahilingan 5,000 mga kahilingan OpenRouter, 5,000 mga kahilingan
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 input at 200 output na token bawat kahilingan. Ang mga presyo kada 1M token ay kasalukuyan at nagbabago kasabay ng aming mga taripa; ang column ng OpenRouter ay nagpapakita ng reference na presyo para sa parehong workload.

Sa kabuuan, kapag pinagsama ang input at output, ang column ng CheapTokens ay mas mura kaysa OpenRouter para sa mga modelong ito. Palitan ang tatlong numero ng sarili mong bilang at mayroon kang budget bago ang unang request. Para sa pagkakaiba ng dalawang panig ng bill, tingnan ang input vs output tokens: what an AI API bills you for, at para sa mga tunay na sinusukat na halimbawa how many tokens an API request uses. Ang mga kasalukuyang presyo ay laging nasa pricing page.

Ang daloy ng tantya mula sa teksto hanggang sa tunay na bilang ng paggamit
Tantyahin offline, i-guard ang window, ipadala, pagkatapos ihambing sa usage.

Ihambing ang tantya sa usage#

Ang tantya ay isang hula tungkol sa tokeniser ng iba, kaya suriin ito nang isang beses laban sa answer key. Bawat tugon ay may dalang usage field, at ang usage.prompt_tokens ay ang binilang ng API para sa iyong input. Ilagay ang dalawang numero nang magkatabi at hatiin.

Hakbang-hakbang

Patakbuhin ang paghahambing

Setup

I-install ang mga package at ilagay ang key sa isang environment variable. Huwag kailanman i-paste ito sa script.

bash
pip install tiktoken openai
export CHEAPTOKENS_API_KEY='your-key-here'

Patakbuhin ang script

I-save ito bilang compare.py. Nagbibilang ito nang lokal, ipinapadala ang request sa https://api.cheaptokens.dev/v1, at ipinapakita ang parehong numero. Ang model id ay ang buong isa mula sa listahan ng modelo ng CheapTokens, dahil hindi tinatanggap ang mga pinaikling pangalan.

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}')

Basahin ang agwat

Ang huling linya ay nagpapakita ng tatlong numero. Sabihin nating ipinapakita nito ang estimate 24, usage.prompt_tokens 31, ratio 1.29. Pagkatapos ay i-multiply ang iyong mga tantya sa hinaharap sa ratio bago mag-budget. Ang isang tunay na prompt ay nakabalot din sa chat formatting, kaya ang tunay na bilang ay maaaring lumabas nang bahagyang mas mataas kaysa sa plain-text na tantya. Patakbuhin ito sa ilang tipikal na prompt, hindi isa, at gamitin ang average na ratio.

Mula ngayon ang routine ay: tantyahin nang lokal, i-guard ang window, ilapat ang iyong ratio sa budget, at hayaang ang usage sa bawat tugon ay panatilihing tapat ka. Kung gusto mo rin ang running total sa buong job, track AI agent token cost in Python ay nagtatayo nito sa parehong field. Bago sa koneksyon mismo? Your first API request with CheapTokens ay sumasaklaw nito, at ang docs ay may natitira.

Itugma ang mga pares

Itugma ang bawat pangalan sa sinasabi nito sa iyo

  • len(enc.encode(text))Ang iyong lokal na tantya ng laki ng input
  • usage.prompt_tokensAng laki ng input ayon sa binilang ng API
  • usage.completion_tokensAng laki ng sagot, na pinresyuhan sa panig ng output
  • max_tokensAng cap sa haba ng sagot na inilalaan mo sa window check

Ang pagbilang ay mura, lokal at tumatagal ng ilang segundo. Gawin ito bago ang tawag na nagkakahalaga ng pera.