
本文是一位技术从业者对大模型推理中隐藏的“成本放大器”的深度剖析,包含来自 DigitalOcean 无服务器推理的真实运行测算。虽然用的是 DO 的服务,但其背后的成本规律全行业通用。以下数据均来自 inference.do-ai.run 记录的 API 真实运行结果,而非营销宣传。
成本鸿沟是架构带来的,而不是计费出了 Bug
在实际生产中,你的 LLM 账单很少会刚好等于 输入 Token 数 × 输入单价。大模型厂商在官网上往往只拿输入价格来说事,纯粹是因为这个数字看起来比较低。但实际上,真正让生产环境流量账单爆掉的,是高昂的输出 Token、隐形的思考 Token、重复的前缀、测试环境的重放流量,以及你在不知不觉中跨过的长文本加价门槛。
很多技术团队看着官网的定价页面做预算,结果收到发票时直接傻眼。只要你把下面这 5 个隐藏的成本放大因素理清楚,就会发现这种“惊喜”完全在预料之中。这些因素是层层叠加的,如果只解决其中一个而忽视其他,大部分的成本漏洞依然堵不上。
价格说明: 这里引用的 Token 费率反映的是 2026 年 6 月各厂商文档以及 DigitalOcean Inference (推理服务)定价的公开价格。在制定预算前,请先联系卓普云(aidroplet.com)核实最新的实时费率。
隐藏在标价与最终发票之间的 5 个成本放大器
1. 输出 Token 才是真正的“大头”
Claude Sonnet 4.6 的公开定价为每百万输入 Token 3.00 美元,而输出则是每百万 15.00 美元。在撰写本文时,DigitalOcean 无服务器推理(Serverless Inference) 也是相同的定价比例(输出是输入的 5 倍)。
在日常的对话类业务中,如果输入与输出的比例达到 1:2,那么在套用其他任何花销之前,你的综合单价就已经飙升到了标称输入单价的 3 倍。不妨去拉一下你们过去 30 天的实际用量,如果输出量达到了输入量的 2 到 3 倍,那你的实际综合费率跟定价页面上的数字根本就不是一回事。
2. 推理(思考)Token 按输出计费,而且隐隐不见
具备长文本思考能力的高级模型(如 Claude 的自适应思考、OpenAI o3/o4-mini)会产生用户根本看不到的 Token。但供应商会毫不客气地把它们全部算进输出 Token 里来计费。
以 Claude Opus 4.8 为例,其输出价格为每百万 Token 25 美元。如果一个请求包含 500 个可见的输出 Token 以及 2,000 个思考 Token,它的成本将是单纯 500 个可见 Token 的 5 倍。Opus 4.8 和 Opus 4.7 默认开启了自适应思考,你只能通过 effort(思考力度)参数来控制其深度,而无法设置一个固定的上限:
{
"model": "claude-opus-4-8",
"max_tokens": 16000,
"thinking": { "type": "adaptive" },
"output_config": { "effort": "low" },
"messages": [{ "role": "user", "content": "Classify this support ticket." }]
}
上面这个请求向启用了自适应思考的 Claude Opus 4.8 发送了一个简短的工单分类提示词,但把 effort 设为了 low(低),这样模型在回答前就会收敛隐藏的推理 Token 消耗。Opus 4.8 总是会进行思考,你没办法彻底关掉它,但可以让它的思考深度与具体任务相匹配。毕竟,给工单打个标签,可不需要像多步骤 Agent 工作流那样耗费那么多思考预算。把低思考力度与简单的提示词搭配使用,可以有效防止看不见的思考 Token 让账单暴涨。
所以,记得去检查每一次 API 返回的 usage 字段。在那些把 effort 默认设得挺高的模型上,即便是处理一些简单的任务,推理模型也常常会无形中吞掉你大部分的预算。
3. 非生产环境的流量共享了同一个 API 账户
在 CI 流水线中,每次提交 Pull Request 都会自动重复跑一遍提示词。预发测试环境也完全镜像了生产环境。甚至还有人在做压力测试时,直接去轰大模型端点来验证应用的吞吐上限,压根没考虑模型本身的费用。如果不用环境标签做区分,所有这些测试产生的开销,在账单上看起来全都跟生产环境一模一样。
Speedscale 的企业用量分析报告指出,很多团队直到发票送上门,才惊觉非生产环境混在了里面。所以,务必给每一次调用都打上标签:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["MODEL_ACCESS_KEY"],
base_url="https://inference.do-ai.run/v1",
)
response = client.chat.completions.create(
model="anthropic-claude-4.6-sonnet",
messages=[{"role": "user", "content": "Summarize this log line."}],
extra_body={
"metadata": {
"environment": os.environ.get("APP_ENV", "local"),
"service": "ci-test-runner",
}
},
)
print(response.usage)
这段代码通过兼容 OpenAI 的 SDK 调用了 DigitalOcean 的无服务器推理服务,并在每次请求的 extra_body 中附带了 environment(环境)和 service(服务)的 metadata 标签。这样一来,你就可以根据来源(比如 CI 跑批、测试环境、生产环境)来切分和分析使用日志,而不是把所有 Token 全都当成生产环境的开销。
通常来说,第一次做环境隔离的团队会惊讶地发现,CI 和测试环境消耗的 Token 居然占到了总量的 30% 到 50%。
4. 面对相同的提示词,不同模型的“啰嗦程度”能差出 2 到 4 倍
同一个分类提示词,给到细节控模型可能会吐出好几段话;而换成高冷话少的模型,它可能就直接回你一个标签。但不管哪种,你都得为生成的每一个输出 Token 自掏腰包。这就是模型选择中的“吐字量差异”:同样的任务,不同的模型,生出来的输出 Token 数天差地别。
在结构化任务中,加上一些提示词约束(例如“仅返回标签,不要做任何解释”)可以砍掉 60% 到 80% 的输出。长远来看,你得根据任务类型去匹配模型的啰嗦程度,并且去测算每个 API 端点的平均输出 Token 数,而不是光看模型列表里的参数。
5. 长上下文加价是针对整个请求“全额”计算的
GPT-5.5(参考 OpenAI 文档):当输入 Token 低于 272K 时,价格为每百万输入/输出 5 美元/30 美元。一旦超过 272K,整个会话的所有 Token 全都跳涨到每百万 10 美元/45 美元。
Gemini 3.1 Pro Preview(参考 Google 定价):上下文在 200K 以内时,每百万 2 美元/12 美元。一旦超过 200K,该请求中的所有 Token 统统按每百万 4 美元/18 美元计费。
| 模型 | 标准费率 (每百万输入 / 输出) | 阶梯阈值 | 长上下文计费行为 |
|---|---|---|---|
| GPT-5.5 | $5 / $30 | >272K 输入 | 整个会话输入变 2 倍 / 输出变 1.5 倍 |
| Gemini 3.1 Pro Preview | $2 / $12 | >200K 输入 | 整个请求的所有 Token 均按 $4 / $18 计费 |
在实际业务中,RAG 流水线和多轮对话 Agent 有相当大一部分请求会轻易踩中这些加价红线。赶紧去审计一下你们 p95 和 p99 的输入上下文长度,看看是不是撞上了各家供应商的收费阶梯。
在 DigitalOcean 无服务器推理服务中的实测数据
上面提到的那些隐形大坑是行业通病,跟哪家供应商没关系。而本节的数据则来自 https://inference.do-ai.run/v1 的真实 API 运行结果,记录在《使用推理路由实现多模型 API 成本治理》。测试方法:固定提示词,temperature=0,Token 数量直接从返回的 usage 字段读取,成本根据运行当时官方公布的 DigitalOcean 推理费率计算(最新价格数据也可直接咨询DigitalOcean 中国区战略合作伙伴卓普云)。
模型选择税:相同的 Token,成本能差出 36 倍
选错模型会在两个不同的地方让你亏钱:一个是模型本身的 Token 单价,另一个则是它产生的输出长度(也就是前面说的模型废话太多)。这第一组测试为了单纯对比单价的影响,控制了变量。我们用了同一个分类提示词喂给三个模型,保持完全相同的 Token 结构(94 个输入 / 80 个输出)——也就是说输出比例和模型废话程度都被固定了,唯一的变量就是价格:
| 模型 | 单次请求成本 (2026年6月16日运行数据) | 对比最便宜的路径 |
|---|---|---|
openai-gpt-oss-20b | $0.00004070 | 基准线 |
openai-gpt-5 | $0.00091750 | 22.5 倍 |
anthropic-claude-4.6-sonnet | $0.00148200 | 36 倍 |
openai-gpt-oss-20b 的计算公式为:(94 × $0.05 + 80 × $0.45) / 1,000,000 = $0.00004070。
如果 openai-gpt-oss-20b 的准确率就已经够用了,你却依然把每个分类请求都无脑塞给 Sonnet,那你单次请求就要多付 36 倍的“模型选择税” ——这纯粹是单价差出来的,还没算模型啰嗦带来的额外开销。如果一个月有 70 万次分类请求,光是在路由上优化一下,就能把成本从 1,037.40 美元直接砍到 28.49 美元。模型选错了,给你再多的用量折扣也是白搭。
这与我们发布在卓普云官网博客的《无服务器推理中那些至关重要的指标》中的 DO 基准测试结论相吻合:在同一个供应商的模型库里,处理同样的任务,单次完整回答的成本跨度能差出 230 倍左右。供应商的公开调价顶多让你省几个百分点,而真正决定成本数量级的,是你的模型路由策略。
推理输出量:分类任务成本的 ~840 倍
同一个供应商,处理不同的任务,6 月 16 日的实时运行数据如下:
| 路径 | 模型 | Token 数量 (输入 / 输出) | 单次请求成本 |
|---|---|---|---|
| 分类任务 (Classify) | openai-gpt-oss-20b | 94 / 80 | $0.00004070 |
| 客户问答 (Customer Q&A) | anthropic-claude-4.6-sonnet | 412 / 292 | $0.00445200 |
| 推理任务 (Reasoning) | openai-gpt-5 | 891 / 3,411 | $0.03417625 |
推理路径的单次请求成本比分类路径高出了约 840 倍($0.03417625 对比 $0.00004070)。要知道,GPT-5 的输入单价($1.25/M)甚至比 Sonnet($3.00/M)还要低,所以这根本不是单价引起的——账单之所以炸掉,是因为推理任务疯狂生成了 3,411 个输出 Token,而分类任务只有 80 个。输出的总量(包括在吐出最终答案前被计费的思考 Token)彻底主导了成本。
复现这个测试结果
你可以用自己的 Model Access Key 来跑一下这段命令。它会打印出归属成本所需的 usage 数据块:
curl -s -X POST "https://inference.do-ai.run/v1/chat/completions" \
-H "Authorization: Bearer $MODEL_ACCESS_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai-gpt-oss-20b",
"temperature": 0,
"messages": [
{"role": "system", "content": "Classify the ticket. Reply with one word: billing, bug, how-to, or account."},
{"role": "user", "content": "I was charged twice for my subscription last month."}
]
}' | python3 -c "import sys,json; u=json.load(sys.stdin)['usage']; print(u)"
这行单行命令向 openai-gpt-oss-20b 发送了一个固定的分类提示词(设置 temperature=0),并过滤打印出了返回的 usage 数据块。拿你自己的 Key 跑一下,就能看到 DigitalOcean 实际计费的 prompt_tokens 和 completion_tokens。如果用完全相同的提示词去调用 anthropic-claude-4.6-sonnet,两者的用量差距就是你现在账单里默默在承受的“模型选择税”。
关于路由器的完整配置、任务策略以及返回的 x-model-router-selected-route 响应头。
先看清成本,才能开始优化
大多数计费后台只给你看总 Token 数和总花费。它们直接隐瞒了测试环境拆分、缓存命中率、思考 Token 与可见输出的比例、长上下文加价档口的触发次数,以及具体到每个任务的输出分布。
拿不到这些细分指标,你的优化就是在瞎子摸象。下面这个脚本可以通过用量计数器,并结合 DigitalOcean/Anthropic 的公开费率来估算复合成本。你可以把它塞进你们的推理日志流里:
#!/usr/bin/env python3
"""通过 Token 计数器估算 LLM 的真实复合成本。"""
from dataclasses import dataclass
@dataclass
class ModelRates:
input_per_m: float
output_per_m: float
cache_read_per_m: float = 0.0
RATES = {
"anthropic-claude-4.6-sonnet": ModelRates(3.00, 15.00, 0.30),
"openai-gpt-oss-20b": ModelRates(0.05, 0.45),
}
def estimate_cost(model, input_tokens, output_tokens, cache_read_tokens=0, thinking_tokens=0):
rates = RATES[model]
billable_output = output_tokens + thinking_tokens
input_cost = (input_tokens / 1_000_000) * rates.input_per_m
cache_cost = (cache_read_tokens / 1_000_000) * rates.cache_read_per_m
output_cost = (billable_output / 1_000_000) * rates.output_per_m
total = input_cost + cache_cost + output_cost
headline = (input_tokens / 1_000_000) * rates.input_per_m
return {
"total_usd": round(total, 4),
"input_only_usd": round(headline, 4),
"multiplier_vs_input_rate": round(total / headline, 2) if headline else 0.0,
}
# 100万输入、200万输出、50万思考:对比只算输入的估算,实际开销约为 13.5 倍
print(estimate_cost("anthropic-claude-4.6-sonnet", 1_000_000, 2_000_000, thinking_tokens=500_000))
这个小工具可以把原始的 Token 计数转换成包含输出和思考 Token 的真实美元估算,而不是只看输入。里面的 multiplier_vs_input_rate 字段一针见血地指出了只看官网标价与实际支付之间的巨大鸿沟:最下面的示例(1M 输入、2M 输出、500K 思考)算下来,实际开销是单看输入估算额的 13.5 倍。把它接到你的推理日志里,就能一眼揪出那些实际开销跟预算严重脱钩的端点。
4 种省钱大招(按效果从大到小排序)
-
提示词缓存 (Prompt Caching):可以大幅砍掉重复前缀的成本。Anthropic 的缓存读取费用只有基础输入单价的 10%(参考 定价文档)。一个 100 万 Token 的系统提示词,如果缓存命中率能达到 80%,能彻底改变输入的经济模型。具体玩法见:《高级提示词缓存指南》。
-
批处理推理 (Batch Inference):可以为那些对实时性要求不高、能接受 24 小时内交付的异步任务直接提供 ~50% 的折扣。如果你的任务对延迟不敏感,你却还在调用同步端点,那完全是把到手的羊毛白白放过了。
-
用量折扣 (Volume Discounts):在月消耗达到一定门槛时是可以谈的。很多团队明明已经够格了,却从来没主动去找供应商要过。
-
动态模型路由 (Model Routing):这是最给力的杠杆,尤其是当你的流量混杂了简单和复杂任务的时候。上面 6 月 16 日的 DO 实时运行数据显示,在相同的分类提示词下,成本有 36 倍的差距。推理路由器 可以在
inference.do-ai.run上自动根据任务类型分发到不同模型,不需要你在应用端写复杂的路由逻辑。在一个分类/问答/推理任务比例为 70万 / 25万 / 5万 的真实流量模型中,配置了路由器之后,月度成本比全用 Sonnet 的方案降低了 39.6%,比全用 Opus 的方案更是暴省了 63.7%(完整流量模型见《成本治理教程》)。
为什么多模型治理和动态路由能对症下药
测试环境流量偷跑(因素 3)本质上是一个监控和可见性的问题。在默认情况下,共享同一个 API Key 的 Token 计费是不会帮你区分环境的。解决办法是在请求的元数据(metadata)里加上环境标签,并做一个能按 environment 把 usage 归类外加对账的仪表盘。DigitalOcean 无服务器推理(Serverless Inference)就是直接根据 API 返回的 usage 数据块来出账单的,所以你的日志系统和最终的发票用的是同一套底层真相。
而模型选择则是导致模型废话太多(因素 4)和单价飙升的罪魁祸首,这属于架构设计问题。当你让一个全能的旗舰模型同时去干分类和深度推理时,你在拿昂贵的旗舰价格为一两个字的标签买了两次单:一次是更高的单价(也就是我们测出来的 36 倍分类溢价),另一次则是某些喜欢长篇大论的模型在简单任务上吐出的废话 Token。
按照任务的复杂程度去动态路由,才能让你的平均成本跟任务的业务价值真正挂钩。让纯分类的流量老老实实呆在 openai-gpt-oss-20b 上;问答流量交给 Sonnet,并结合会话保持来保障 KV 缓存的命中率;只有当输出量带来的价值真的配得上它的高单价时,再把推理任务交由 GPT-5 处理。这种架构直接从源头上击破了多项显形和隐形的开销。
至于托管模式的选择权衡(什么时候该从按 Token 付费的 Serverless 切换到按 GPU 小时付费的专用显卡模式),可以咨询 DigitalOcean 中国区战略合作伙伴卓普云的技术团队。
参考资料
- 《使用推理路由器实现多模型 API 成本治理》(DigitalOcean,2026 年 6 月实时运行数据)
- 《无服务器推理中那些至关重要的指标》(DigitalOcean 单次回答成本基准测试)
- 《为什么相同模型在不同 Serverless 推理服务上的表现存在差异》(DigitalOcean 内部 TTFT 首字延迟测试)
- Anthropic API 定价文档
- DigitalOcean 推理服务的定价文档
- GPT-5.5 模型官方文档(OpenAI)
- Gemini API 定价官方文档(Google)
- 《我分析了 60 多个 LLM 模型,发现大多数企业多付了 50-90% 的冤枉钱》(第三方成本溢价分析)
- 《隐藏的 AI 账单:为什么非生产环境的 LLM 成本会失控螺旋上升》(Speedscale)
相关产品与选型



