IT ▾
Ottieni chiave API

Token e fatturazione API LLM: stime, lettura, budget ed esempi

Usare le API LLM è come usare l'acqua e l'elettricità: senza il contatore, la bolletta di fine mese ti spaventa; leggendo il contatore, sai esattamente quanto consumi. Il "contatore" qui è il conteggio dei token. Questo articolo spiega prima cosa sono i token e come stimarli in cinese e inglese, poi ti insegna a leggere il campo usage nelle risposte, a installare un limite di budget nel programma e infine usa tre esempi con assunzioni esplicite per calcolare i costi reali per input a $0,25 e output a $1,00 per milione di token.

Aggiornato il

Punti chiave

  • Formula di fatturazione: (token input × $0,25) + (token output × $1,00), diviso per un milione.
  • Le stime sono solo preventive; i dati reali sono nel campo usage della risposta. Nelle risposte streaming, usage appare nell'ultimo blocco.
  • Il costo maggiore nelle chat è la cronologia ripetuta; tagliare la cronologia è la soluzione più economica.
  • Tre metodi per il budget: limita max_tokens, limita la lunghezza della cronologia, accumula i costi nel codice e imposta un limite giornaliero.

Cosa sono i token e come calcolare i costi

Il token è l'unità minima di elaborazione del modello: non è una parola o un carattere, ma un frammento intermedio. Pensalo come le tacche di un contatore dell'acqua: più usi, più le tacche avanzano. La fatturazione si divide in due parti:

VocePrezzo unitario (per milione di token)Cosa include
Input$0.25Tutto il contenuto di messages: system, cronologia, domanda corrente
Output$1.00Risposta generata dal modello

L'output costa 4x l'input: riduci i token del modello più che il contesto. Prepagato, non scade mai. $0.50 di credito di prova valido 7 giorni.

Un punto che spesso confonde: i token di output sono quelli effettivamente generati dal modello, non max_tokens. max_tokens è solo un limite; se il modello risponde in 200 token, paghi solo quelli. Per le stime di budget, calcola sul limite massimo per coprire i casi peggiori e non farti prendere alla sprovvista da output lunghi.

Stima preliminare: come stimare grossolanamente cinese e inglese

Prima della richiesta puoi solo stimare. I valori sotto sono approssimativi e variano in base al contenuto:

TestoRegola di stimaEsempio (ipotesi)
CineseCirca 1-1,5 token per carattere3000 caratteri ≈ 3000-4500 token
IngleseCirca 1 token ogni 4 caratteri, o circa 1,3 token per parola1000 parole ≈ 1300 token
Misto cinese/inglese, codiceStima sul valore altoJSON e simboli consumano di più

L'uso corretto delle stime è fare una "stima di ordine di grandezza": questo articolo ha circa diecimila o centomila token? Supera la finestra di contesto da 100.000? Quanto costa una chiamata? Per precisione, leggi il campo usage. Una buona abitudine è eseguire un campione di decine di chiamate per scenario e usare la media dei valori empirici al posto delle stime.

Esempio che combina stima e misurazione reale. Supponiamo di dover elaborare un batch di circa 2000 caratteri di feedback clienti in cinese. Stimando grossolanamente a 1,3 token per carattere, una singola richiesta è di circa 2600 token. Aggiungendo 200 token per il prompt, l'input totale è circa 2800. Esegui prima 30 richieste, leggi il campo usage e calcola la media. Se la media reale è 2500, aggiorna il tuo coefficiente a circa 1,15. Da ora in poi, calcola il budget del batch usando il coefficiente corretto; l'errore sarà molto minore. Questo dato reale è solo un'ipotesi dimostrativa; i tuoi dati avranno i loro valori.

Leggere usage: la vera "lettura del contatore"

Ogni risposta valida include usage con prompt_tokens, completion_tokens e total_tokens. Lo streaming non richiede parametri aggiuntivi; un blocco dati con usage viene aggiunto automaticamente alla fine. Il codice qui sotto mostra entrambi i metodi di lettura e converte i valori in dollari:

import os
from openai import OpenAI

client = OpenAI(base_url="https://api.apidamoxing.com/v1", api_key=os.environ["API_KEY"])
PRICE_IN, PRICE_OUT = 0.25, 1.00     # 美元 / 百万 token

def cost(u):
    return (u.prompt_tokens * PRICE_IN + u.completion_tokens * PRICE_OUT) / 1_000_000

# 非流式:usage 在响应对象上
r = client.chat.completions.create(
    model="uncensored", max_tokens=200,
    messages=[{"role": "user", "content": "用三句话解释什么是通货膨胀。"}],
)
print(r.usage.prompt_tokens, r.usage.completion_tokens, f"${cost(r.usage):.6f}")

# 流式:最后一个数据块带 usage,其余块的 usage 为空
usage_last = None
stream = client.chat.completions.create(
    model="uncensored", max_tokens=200, stream=True,
    messages=[{"role": "user", "content": "再用三句话解释什么是通货紧缩。"}],
)
for chunk in stream:
    if chunk.usage:
        usage_last = chunk.usage
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
print()
if usage_last:
    print(usage_last.prompt_tokens, usage_last.completion_tokens, f"${cost(usage_last):.6f}")

Attenzione allo streaming: solo l'ultimo blocco contiene usage; negli altri è nullo. Usa if chunk.usage per verificare. Registra ogni lettura in log o database: ti serviranno per conciliare i conti a fine mese, rilevare anomalie e calcolare il costo per utente.

Un'abitudine utile: etichetta ogni funzione di business e registra i costi con l'etichetta. Ad esempio, separa "riassunto", "assistenza" e "traduzione". A fine mese vedrai quale funzione costa di più e se ottimizzare il prompt, tagliare la cronologia o abbassare max_tokens. Senza etichette, avrai solo un totale e sarà difficile ottimizzare.

Tre casi di studio (ipotesi esplicitate)

Caso di studio 1: assistenza clienti

Ipotesi: ogni richiesta richiede 800 token in input (inclusi system e frammenti di conoscenza) e 200 token in output; 10.000 richieste al giorno.

Costo per chiamata: 800 × 0,25 ÷ 1.000.000 = $0,0002; output 200 × 1,00 ÷ 1.000.000 = $0,0002; totale $0,0004. $4,00 al giorno, $120 in 30 giorni. A questo ritmo, il credito di prova di $0,50 sostiene circa 1250 chiamate di questo tipo.

Caso di studio 2: riassunto di articoli lunghi

Ipotesi: input di 20.000 token per articolo, output di 600 token per riassunto; totale 500 articoli.

Per articolo: 20.000 × 0,25 ÷ 1.000.000 = $0,005, più 600 × 1,00 ÷ 1.000.000 = $0,0006, totale $0,0056. Per 500 articoli il totale è $2,80. Si nota che le attività con input lunghi e output brevi sono molto economiche.

Caso di studio 3: chat a più turni e taglio della cronologia

Ipotesi: system 100 token; ogni turno richiede 60 token in input dall'utente e 150 token in output; una conversazione ha 20 turni.

SoluzioneToken cumulativi in inputToken cumulativi in outputCosto totale
Con tutta la cronologia43,1003,000Circa $0,0138
Solo gli ultimi 3 turni14,5403,000Circa $0,0066

L'input per la soluzione che mantiene tutta la cronologia è: 20 × (100 + 60) + 210 × (0 + 1 + … + 19) = 3.200 + 39.900 = 43.100. La soluzione con taglio ha input di 160, 370, 580 per i primi tre round, e 790 per ogni round dal 4° al 20°, per un totale di 14.540. Il costo è circa la metà, e la differenza aumenta con i round perché l'input della soluzione cronologica cresce quadraticamente.

Da questi tre casi si può dedurre una formula empirica: il costo è determinato principalmente da "numero di richieste × quantità di input/output per richiesta", e la quantità di input è influenzata soprattutto dalla cronologia e dai dati allegati. Ridurre la lunghezza dei frammenti di conoscenza nei casi di assistenza, tagliare la cronologia nelle chat e elaborare in blocchi paralleli nei casi di riassunto seguono lo stesso principio: non pagare token non necessari. È importante sottolineare che i numeri di questi casi derivano esclusivamente dalle ipotesi sopra indicate; i tuoi dati effettivi devono essere verificati tramite usage.

Consideriamo un calcolo inverso: se il tuo budget mensile è $30, quante conversazioni da 20 turni puoi sostenere al mese con un prodotto di chat? Utilizzando la soluzione "solo gli ultimi 3 turni" del caso 3, ogni conversazione costa circa $0,0066; $30 ÷ 0,0066 fa circa 4.545 conversazioni. Con lo stesso budget, utilizzando la soluzione con cronologia completa, che costa $0,0138 a conversazione, puoi sostenere solo circa 2.174 conversazioni. Questa è la differenza pratica del taglio della cronologia.

Controllo del budget: un limitatore per il tuo programma

La stima è solo una previsione, il limitatore è la garanzia. Di seguito è riportata una classe di budget giornaliero basata sui dollari: prima della richiesta, prevedi lo "scenario peggiore" (output al massimo di max_tokens); dopo la richiesta, registra il costo effettivo in base all'usage.

class Budget:
    """按美元计的日预算。超出时拒绝新请求。"""
    def __init__(self, daily_usd):
        self.limit = daily_usd
        self.spent = 0.0

    def check(self, est_prompt_tokens, max_tokens):
        # 最坏情况:输出用满 max_tokens
        worst = (est_prompt_tokens * 0.25 + max_tokens * 1.00) / 1_000_000
        if self.spent + worst > self.limit:
            raise RuntimeError(f"预算不足:已用 ${self.spent:.4f},本次最坏 ${worst:.4f},上限 ${self.limit}")

    def record(self, usage):
        self.spent += (usage.prompt_tokens * 0.25 + usage.completion_tokens * 1.00) / 1_000_000

budget = Budget(daily_usd=5.0)
budget.check(est_prompt_tokens=1200, max_tokens=500)   # 请求前
# ……发请求……
# budget.record(response.usage)                        # 请求后

Oltre al limitatore nel codice, ci sono tre metodi a livello di configurazione:

  1. Imposta max_tokens in base al compito, non portarlo sempre al massimo; il valore predefinito è 2048, il massimo è 32.000;
  2. Imposta un limite di lunghezza alla cronologia della chat, come descritto in Creazione di un chatbot;
  3. Ricarica sul tuo account solo l'importo che intendi utilizzare, e aggiungi fondi solo quando necessario; la modalità prepagata è di per sé un limite rigido.

I prezzi e le regole del saldo sono soggetti a Pagina dei prezzi, i dettagli dell'interfaccia sono in Dettagli dei parametri.

In sintesi, ecco una checklist: prima, stima l'ordine di grandezza, imposta max_tokens e verifica la lunghezza della cronologia; durante, presta attenzione all'usage dell'ultimo blocco durante lo streaming; dopo, registra i costi e categorizzali per funzione per confrontarli con il budget. Dopo questi tre passaggi, i conti saranno chiari.

Domande frequenti

I token in input e in output sono entrambi a pagamento?

Sì. L'input costa $0,25 per milione di token, l'output $1,00 per milione di token, calcolati separatamente in base a prompt_tokens e completion_tokens nell'usage.

Posso calcolare il costo esatto in anticipo?

Puoi solo stimarne l'ordine di grandezza. Il numero esatto dipende dall'usage nella risposta; si consiglia di campionare e calcolare la media per ogni scenario per fare previsioni.

Il saldo scade?

Il saldo prepagato ricaricato non scade mai. Il credito di prova gratuito di $0,50 per i nuovi account è valido per 7 giorni.

Come evitare che la conversazione diventi sempre più costosa?

Limita la lunghezza della cronologia inclusa, conserva solo gli ultimi turni o comprimi i contenuti precedenti in un riassunto, e imposta un max_tokens adeguato in base al compito.

Compila il modulo per ottenere la chiave

Crea un account, copia la chiave, modifica il Base URL. La configurazione è così semplice.

Ottieni la chiave API