Conta i token prima di inviare una richiesta: tiktoken in Python
Stima offline il conteggio dei token di un prompt con tiktoken, verificalo rispetto alla finestra di contesto, prezzalo e confrontalo con il campo usage dell'API.

In questa pagina
Puoi contare i token di un prompt sulla tua macchina prima che venga inviato: installa tiktoken, codifica il testo, prendi len() del risultato. tiktoken è il tokeniser di OpenAI, quindi per i modelli DeepSeek, GLM e MiniMax il numero è una stima. Il valore reale torna in usage. dopo la prima chiamata, e confrontare i due richiede una riga in più.
Perché preoccuparsi? Perché sia la fattura sia gli errori iniziano con la dimensione dell'input. Incolla un contratto lungo in uno script e scopri che era troppo grande solo quando l'API risponde con un 400. Esegui un batch di cinquemila email e scopri quanto è costato solo quando il saldo è più basso. Contare prima trasforma entrambe le sorprese in un numero che puoi leggere in anticipo.
Cinque righe che contano i token#
Il README di tiktoken (verificato il 1 novembre 2026) mostra l'idea completa: scegli un encoding, codifica il testo, e la lunghezza della lista è il conteggio dei token.
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. restituisce il testo originale, un utile controllo di sanità per verificare che tu stia guardando lo stesso testo che vedrà il modello. Il README menziona anche tiktoken., che sceglie il tokeniser per uno specifico modello OpenAI. Questo è il punto da ricordare: i tokeniser appartengono a famiglie di modelli. La regola empirica del README è di circa quattro byte di testo per token, e descrive solo i tokeniser di OpenAI.
Quindi cosa fai per un modello DeepSeek? Usa lo stesso conteggio come stima di lavoro, e calibralo, come mostrato sotto.
Indovina il numero
All'incirca quanti token è un testo inglese di 2.000 caratteri?
La tua risposta
02000
Mostra risposta
Risposta: 500
Circa 500. Con la regola empirica del README di quattro byte per token, e il testo inglese semplice a circa un byte per carattere, 2.000 ÷ 4 = 500. Altre lingue ed emoji occupano più byte per carattere, quindi gli stessi 2.000 caratteri di solito significano più token secondo quella regola.
Il prompt entra nella finestra?#
Ogni modello ha una finestra di contesto, e il tuo input più la risposta che consenti deve entrarci. Le finestre per i modelli che serviamo: DeepSeek-V4-Flash 380K, GLM-5.3-Flash 390K, MiniMax-M2.7 180K token. La risposta più lunga è 32.768 token per DeepSeek-V4-Flash e 8.192 per gli altri due (lista modelli CheapTokens, 1 novembre 2026).
Una guardia prima della chiamata è di quattro righe:
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]Supponiamo che tu abbia un documento da 250.000 token. fits(250_ è False, quindi indirizzi quel lavoro a un modello con una finestra più grande o dividi il documento, e il 400 non si verifica mai. fits(250_ è True. Se vuoi la storia completa di come appare l'errore, request too long: 400 vs 413, context window and max_tokens lo analizza.
Quanto costerà?#
Ora il budget. Prendi un elemento tipico, contalo e moltiplica. Supponi di classificare 5.000 email di ordini. Conti un'email rappresentativa e ottieni circa 800 token di input, e limiti l'etichetta e una breve motivazione a 200 token di output. I totali: 5.000 × 800 = 4.000.000 token di input e 5.000 × 200 = 1.000.000 token di output.
La tabella sotto prezza esattamente quel carico di lavoro ai prezzi correnti, con input e output contati insieme:
| Modello | Input $/1M | Output $/1M | Per richiesta | 5000 richieste | OpenRouter, 5000 richieste |
|---|---|---|---|---|---|
| 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 di input e 200 token di output per richiesta. I prezzi per 1M di token sono attuali e cambiano insieme alle nostre tariffe; la colonna OpenRouter mostra i prezzi di riferimento per lo stesso carico di lavoro.
In totale, con input e output contati insieme, la colonna CheapTokens è più economica di OpenRouter per questi modelli. Cambia i tre numeri con i tuoi conteggi e hai un budget prima della prima richiesta. Per la differenza tra i due lati della fattura, vedi input vs output tokens: what an AI API bills you for, e per esempi realmente misurati how many tokens an API request uses. I prezzi correnti sono sempre sulla pagina dei prezzi.

Confronta la stima con l'uso#
La stima è un'ipotesi sul tokeniser di qualcun altro, quindi verificala una volta contro il foglio delle risposte. Ogni risposta porta un campo usage, e usage. è ciò che l'API ha contato per il tuo input. Metti i due numeri fianco a fianco e dividi.
Passo dopo passo
Esegui il confronto
Configurazione
Installa i pacchetti e metti la chiave in una variabile d'ambiente. Non incollarla mai nello script.
pip install tiktoken openai
export CHEAPTOKENS_API_KEY='your-key-here'Esegui lo script
Salvalo come compare.py. Conta localmente, invia la richiesta a https:/ e stampa entrambi i numeri. L'id del modello è quello completo dalla lista modelli CheapTokens, poiché i nomi abbreviati non sono accettati.
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}')Leggi lo scarto
L'ultima riga stampa tre numeri. Supponiamo che mostri estimate 24, usage.. Allora moltiplica le tue stime future per il rapporto prima di fare il budget. Un prompt reale è anche avvolto nella formattazione della chat, quindi il conteggio reale può risultare un po' sopra la stima del testo semplice. Eseguilo su alcuni prompt tipici, non uno solo, e usa il rapporto medio.
Da quel momento la routine è: stima localmente, proteggi la finestra, applica il tuo rapporto al budget, e lascia che usage in ogni risposta ti tenga onesto. Se vuoi anche il totale progressivo su un intero lavoro, track AI agent token cost in Python lo costruisce sullo stesso campo. Nuovo alla connessione stessa? Your first API request with CheapTokens lo copre, e la documentazione ha il resto.
Abbina le coppie
Abbina ogni nome a ciò che ti dice
Tocca un elemento a sinistra, poi il suo abbinamento
- len(enc.encode(text))La tua stima locale della dimensione dell'input
- usage.prompt_tokensLa dimensione dell'input come l'ha contata l'API
- usage.completion_tokensLa dimensione della risposta, prezzata sul lato output
- max_tokensIl limite sulla lunghezza della risposta che riservi nel controllo della finestra
Contare è economico, locale e richiede secondi. Fallo prima della chiamata che costa denaro.



