成本优化指南
发送请求前先统计 token:Python 中的 tiktoken
用 tiktoken 离线估算提示词的 token 数,对照上下文窗口检查,计算价格,并与 API 的 usage 字段对比。

你可以在自己的机器上、在发送之前先统计提示词的 token 数:安装 tiktoken,对文本进行编码,取结果的 len()。tiktoken 是 OpenAI 的分词器,所以对 DeepSeek、GLM 和 MiniMax 模型来说,这个数字只是估算值。真实数字会在第一次调用后通过 usage. 返回,对比两者只需再加一行代码。
为什么要费这个劲?因为账单和报错都始于输入大小。把一份长合同粘贴进脚本,你只有在 API 返回 400 时才发现它太大了。跑一批五千封邮件,你只有在余额变少时才发现花了多少钱。先统计,就能把这两种意外都变成一个可以提前读到的数字。
统计 token 的五行程代码#
tiktoken README(2026 年 11 月 1 日查阅)展示了完整思路:选一个编码,对文本编码,列表的长度就是 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. 会还原出原始文本,这是一个方便的健全性检查,确认你看到的就是模型将看到的同一段文本。README 还提到了 tiktoken.,它会为特定的 OpenAI 模型选择分词器。这一点值得记住:分词器属于模型家族。README 的经验法则是每个 token 约四个字节的文本,而且它只描述 OpenAI 的分词器。
那么对 DeepSeek 模型该怎么办?把同样的计数当作工作估算值,并按下文所示进行校准。
猜数字
一段 2,000 字符的英文文本大约有多少 token?
你的猜测
02,000
显示答案
答案: 500
大约 500。按照 README 每个 token 四个字节的经验法则,以及纯英文文本约每个字符一个字节,2,000 ÷ 4 = 500。其他语言和 emoji 每个字符占更多字节,所以按该法则,同样的 2,000 字符通常意味着更多 token。
提示词能放进窗口吗?#
每个模型都有上下文窗口,你的输入加上你允许的答案必须能放进去。我们服务的模型窗口:DeepSeek-V4-Flash 380K、GLM-5.3-Flash 390K、MiniMax-M2.7 180K token。最长答案对 DeepSeek-V4-Flash 是 32,768 token,对另外两个是 8,192(CheapTokens 模型列表,2026 年 11 月 1 日)。
调用前的一道防线是四行代码:
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]假设你有一份 250,000 token 的文档。fits(250_ 是 False,所以你要么把这个任务路由到窗口更大的模型,要么拆分文档,400 就永远不会发生。fits(250_ 是 True。如果你想了解这个错误的完整情况,请求过长:400 与 413、上下文窗口和 max_tokens 有详细讲解。
要花多少钱?#
现在算预算。取一个典型条目,统计它,然后相乘。假设你要对 5,000 封订单邮件分类。你统计一封有代表性的邮件,得到约 800 个输入 token,并把标签和简短理由限制在 200 个输出 token。总计:5,000 × 800 = 4,000,000 个输入 token,5,000 × 200 = 1,000,000 个输出 token。
下表按实时价格正好为这个工作量计价,输入和输出合并计算:
| 模型 | 输入 $/1M | 输出 $/1M | 每次请求 | 5,000 次请求 | OpenRouter,5,000 次请求 |
|---|---|---|---|---|---|
| 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 和 200 个输出 token。每 100 万 token 的价格为当前价格,会随我们的资费一同变动;OpenRouter 列显示相同工作负载的参考价格。
总计,输入和输出合并计算,对这些模型而言 CheapTokens 列比 OpenRouter 更便宜。把这三个数字换成你自己的计数,你就在第一次请求之前有了预算。关于账单两端的区别,见 输入 vs 输出 token:AI API 到底为什么收费,真实测量示例见 一次 API 请求用多少 token。当前价格始终在定价页面上。

把估算与用量对比#
估算是对别人分词器的猜测,所以要用答案对照一次。每个响应都带有 usage 字段,usage. 就是 API 为你的输入统计的数量。把两个数字并排放,然后相除。
分步操作
运行对比
准备工作
安装软件包,把密钥放进环境变量。绝不要把它粘贴进脚本。
pip install tiktoken openai
export CHEAPTOKENS_API_KEY='your-key-here'运行脚本
把它保存为 compare.py。它在本地计数,把请求发送到 https:/,并打印两个数字。模型 id 要用 CheapTokens 模型列表中的完整 id,因为缩写名称不被接受。
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}')解读差距
最后一行打印三个数字。假设它显示 estimate 24, usage.。那么在做预算之前,把你未来的估算乘以这个比率。真实提示词还会被聊天格式包裹,所以真实计数可能略高于纯文本估算。要在几个典型提示词上运行,而不是只跑一个,并使用平均比率。
此后流程就是:本地估算、检查窗口、把比率应用到预算,并让每个响应中的 usage 保持你的诚实。如果你还想要整个任务的累计总量,在 Python 中追踪 AI agent 的 token 成本 基于同一字段构建。刚接触连接本身?你的第一次 CheapTokens API 请求 有介绍,其余内容在文档中。
配对
把每个名称与它告诉你的信息对应起来
点击左侧项目,然后点击其配对项
- len(enc.encode(text))你对输入大小的本地估算
- usage.prompt_tokensAPI 统计的输入大小
- usage.completion_tokens答案的大小,按输出侧计价
- max_tokens你在窗口检查中预留的答案长度上限
统计成本低、在本地进行、只需几秒。在花钱的调用之前做这件事。



