首页 › cost-hacks › 中文token贵英文三倍:这笔隐形税能退

中文token贵英文三倍:这笔隐形税能退

大多数人省钱,眼睛只盯着"模型单价"——GPT-4o 多少刀一百万 token、Claude 多少刀、DeepSeek 多少刀。但你可能没意识到:同样一句话,中文喂进去的 token 数是英文的 2–3 倍,这笔钱从来没人告诉你。叠加每次请求都重传的 system prompt、塞了 20 个例子的 few-shot、还有一堆没人看的客套话——你的 API 账单里有 30%–50% 是"空气"。这一篇拆开输入侧的三种"隐形税",给你五把能立刻退款的刀。最狠的一把,是搞懂 Tokenizer 经济学,光换模型就能让中文账单腰斩。

一、你到底在交哪三种税?

把一个 API 请求的 token 流画清楚,漏洞一目了然:

flowchart LR
    U["你的输入"] --> Q{"进入模型计费"}
    Q -->|重复税| R1["每次重传的\nsystem prompt / 大文档"]
    Q -->|废话税| R2["客套话·重复说明\n冗余JSON·过时示例"]
    Q -->|中文税| R3["中文一字≈2 token\n英文一字≈0.25 token"]
    Q -->|往返税| R4["格式不稳\n多轮纠错重发"]
    Q -->|示例税| R5["few-shot\n塞20个例子"]
    R1 -->|刀一:Prompt Cache| F1["砍90%"]
    R2 -->|刀二:LLMLingua-2| F2["砍80%"]
    R3 -->|刀三:选对tokenizer| F3["砍50-70%"]
    R4 -->|刀五:结构化输出| F4["砍往返轮次"]
    R5 -->|刀四:精选few-shot| F5["砍75%"]
    F1 & F2 & F3 & F4 & F5 --> SAVE["实付token\n降到原来的15-30%"]
    style R3 fill:#ffe0e0
    style F3 fill:#d4f7d4
    style SAVE fill:#fff3b0

五种浪费里,中文税是最隐蔽、最反直觉、也最容易退的——所以这一篇把它当主角讲透。

二、刀三(主角):中文 token 贵英文三倍,这是真的

OpenAI 的 tokenizer(cl100k_base,GPT-4 / GPT-3.5 用的)是基于字节对编码(BPE)训练的,训练语料以英文为主。英文常见词直接合并成一个 token,大约 1 个 token ≈ 0.75 个英文单词。

但中文不走运:每个汉字在 UTF-8 里是 3 个字节,BPE 又没给中文攒出多少合并规则,结果常常是一个汉字拆成 1.5–2.5 个 token。一句同样的意思,英文 10 token,中文可能 25–40 token。API 按 token 收费,等于中文用户为单位"信息"付了 2–3 倍的钱——而且上下文窗口也被中文吃掉一大块,留给输出的空间更小,延迟更高。

转折点来了:GPT-4o 换了 tokenizer。 新的 o200k_base 是重做多语言版,中文效率大幅提升,一个汉字 ≈ 0.6–1.0 token,比 cl100k_base 砍了 50%–70%。也就是说:你以为 GPT-4o 只是"新一代",对中文用户它还是个隐形的半价开关——同样一段中文 prompt,光换模型,输入 token 就少了一大半。

更狠的是国产 tokenizer:通义 Qwen、智谱 GLM、DeepSeek 这些针对中文优化的 tokenizer,中文能做到 0.6–0.8 字/token,比 o200k_base 还省。如果你的业务是纯中文、长上下文(比如中文 RAG、客服、合同分析),用国产模型不只是"便宜",而是tokenizer 本身就帮你少烧一半 token。

退中文税的三种姿势:

  1. 能上 GPT-4o 就别用 GPT-4。 不为别的,就为 o200k_base。GPT-4 的 cl100k_base 对中文是"双倍计费"。
  2. 纯中文长场景,优先国产模型。 Qwen / GLM / DeepSeek 的 tokenizer 对中文更友好,叠加本身低价,账单能砍到原来的 1/3。
  3. 极端省法:翻译成英文过模型,再翻回来。 适合超长中文文档做摘要/抽取的离线任务——先把中文翻成英文(token 腰斩),让模型处理,再把结论翻回中文。会损失一点细节,但对"信息压缩"类任务是赚的。

信息差提醒:别再用 cl100k_base 估中文 token。写代码做成本预估时,用 tiktoken.encoding_for_model("gpt-4o") 拿到 o200k_base,否则你的预算会系统性高估 1.5–2 倍。

三、刀一:Prompt Caching,退"重复税"

如果你的每个请求都带着同一个 system prompt、同一份产品文档、同一组规则——你每次都在为这些完全不变的内容付全价。这就是重复税。

Anthropic(Claude)的 Prompt Caching:在 API 请求里给不变的部分打上 cache_control 标记,模型会把这段的中间状态(KV cache)缓存住,TTL 默认 5 分钟,命中即续期。价格结构是:

OpenAI 则是自动的:任何超过 1024 token 的相同前缀,自动缓存,缓存命中部分的输入价打 5 折。你不用改代码。

回本数学(公开标价示例,请以官方为准):假设你有个 8000 token 的 system prompt + 文档,每个会话调 10 次。Claude 3.5 Sonnet 输入价约 $3/M token。 - 不开缓存:每次都全价算 8000 token。 - 开缓存:第一次写缓存(8000 × 1.25 × $3/M ≈ $0.03),后面 9 次命中(8000 × 0.1 × $3/M ≈ $0.0024/次)。一个会话省下约 80% 的输入费。 - 用户越多、对话越长,省得越夸张。凡是有"固定大前缀"的场景(客服 bot、代码助手、文档问答),不开缓存就是在烧钱。

注意:Prompt Caching 是精确前缀匹配(缓存的是同一串字符的 KV 状态),和上一轮讲过的"语义缓存"(把相似问题挡在模型门外)是两码事——一个是复用计算,一个是干脆不调用。两者叠加才猛。

四、刀二:LLMLingua-2,把"废话税"压成空气

Prompt Caching 解决"重复的固定内容",那每次都不一样的、却又啰嗦的内容怎么办?比如:用户随手粘进来的长文档、塞满水词的工单、一个写了 2000 字其实 500 字够用的需求。

微软开源的 LLMLingua-2(仓库 microsoft/LLMLingua)就是干这个的:它用一个 BERT 分类器,对 prompt 里的每个 token 打分——"这个 token 删掉,意思会不会丢?"——然后按你设的压缩率,把低分 token 删掉。压缩比 2×–10×,文档越长省得越多。

和初代 LLMLingua(用小语言模型按困惑度打分、自回归、慢)相比,LLMLingua-2 用 BERT 并行处理,快得多,压缩也更忠实。它尤其适合 RAG 场景:检索回来一堆 chunks,先压一遍再喂模型,既省钱又能塞更多上下文。

怎么用(开源,自托管,免费):

from llmlingua import PromptCompressor
llm_lingua = PromptCompressor(model_name="microsoft/llmlingua-2-xlm-roberta-large",
                              use_llmlingua2=True)
compressed = llm_lingua.compress_prompt(
    your_long_prompt,
    rate=0.33,            # 压到原来的1/3
    force_tokens=['\n', '?', '.']  # 换行和标点别压
)
# compressed['compressed_prompt'] 就是瘦身后的版本

成本权衡:压缩本身要跑个小模型(有 GPU/算力成本),所以它适合单次 prompt 很长、且会被复用或多次调用的场景。如果 prompt 本来就短,别折腾,直接发。经验值:prompt 超过 2000 token,压缩才划算。

五、刀四:Few-shot 别再无脑塞 20 个例子

这是中文开发者最常见的浪费。为了让模型"稳定输出",很多人在 prompt 里塞 10–20 个 few-shot 示例,每个请求都带。示例越多 → 输入 token 越大 → 账单越炸。

三个退法:

  1. 示例数量降到 3–5 个。 研究(含 LLMLingua 团队的实验)反复证明:示例从 0 到 3 个,效果飙升;从 5 到 20 个,边际收益趋近于零,但 token 线性暴涨。留 3–5 个最有代表性的就够了。
  2. 示例塞进 Prompt Caching 缓存。 如果你的示例固定不变,用刀一把它们标记为缓存前缀,只第一次付全价。
  3. 干脆别用 few-shot,改用 fine-tune。 如果你真的需要 20 个例子才能稳,说明任务有固定模式——微调一个便宜的小模型(GPT-4o-mini 或国产小模型),把"示例"烧进权重里。调用时零示例,输入 token 直接归零,单价还便宜一个数量级。 这是"示例税"的终极退法:把 few-shot 固化成 fine-tune。

六、刀五:结构化输出,砍掉"往返税"

最后一种浪费最阴险——格式不稳导致的来回重试。模型这次吐了 JSON 少个逗号、那次多了句废话,你的代码 try/except 重试一遍,每次重试都是一整次全价调用。3 轮重试 = 3 倍账单。

解法是结构化输出,一轮搞定:

一条铁律:凡是程序要解析的模型输出,必须用结构化输出强制约束。 否则你是在为"模型偶尔犯的格式错误"反复买单。

七、信息差总结:你知道的 vs 别人不知道的

维度 大多数人以为 实际的信息差
省钱重点 比模型单价 输入侧有 30%–50% 是空气,单价只是冰山一角
中文成本 中文英文一样 中文 token 是英文 2–3 倍,换 GPT-4o 直接砍 50%–70%
固定前缀 每次都得发 Prompt Cache 读取只收 0.1×,砍 90%
长 prompt 没法省 LLMLingua-2 能压 2–10×,开源免费
few-shot 越多越稳 5 个以上边际为零,固化成 fine-tune 更省
格式输出 多试几次就好 Structured Outputs 一轮锁定,砍往返税
成本预估 按经验拍脑袋 用 tiktoken 精确计数,别用 cl100k_base 估中文

八、行动指南:今天就退三笔税

按性价比排序,照着做,一周内能看到账单变化:

  1. 【立刻·零成本】检查你的 system prompt 是不是固定不变的。 是 → 开 Prompt Caching(Claude 加 cache_control;OpenAI 超过 1024 token 自动)。这是最快见效的一刀。
  2. 【立刻·零成本】所有要被程序解析的输出,改用 Structured Outputs / Tool Use。 干掉重试往返税。
  3. 【今天】确认你用的是不是 GPT-4(cl100k_base)。 纯中文场景能上 GPT-4o 就上,或优先国产模型(Qwen / GLM / DeepSeek)——tokenizer 本身就帮你砍一半中文 token。
  4. 【本周】写成本预估时用 tiktoken.encoding_for_model() 精确计数。 别再按字数瞎估,中文会被你高估 2 倍。
  5. 【有 GPU 后】长 prompt(>2000 token)接 LLMLingua-2 压缩。 RAG 检索回来的 chunks 先压再喂。
  6. 【进阶】few-shot 超过 5 个的任务,考虑微调小模型。 把示例烧进权重,调用时零示例、低价模型。

参考来源

完成摘要

下一步 / 注意事项

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入