首页 / 文章 / 为什么你的LLM账单是预期的3倍:生产环境推理系列
← 返回
IT技术

为什么你的LLM账单是预期的3倍:生产环境推理系列

✍️ zhirenhun 📅 2026/8/12 👁 222 阅读 ⏱ 27 分钟
为什么你的LLM账单是预期的3倍:生产环境推理系列

从业者关于隐藏推理成本乘数的论述,附带 DigitalOcean Serverless Inference 的实测数据。跨提供商的模式普遍适用。以下DO特有数字来自在 inference.do-ai.run 上记录的API运行,而非营销宣传。

差距是结构性的,而非账单错误

你在生产环境中的LLM账单很少等于 input_tokens × input_rate。提供商引用输入是因为它是较小的数字。生产流量为输出、隐藏的推理token、重复的前缀、非生产重放流量以及你在不知不觉中跨越的上下文层级付费。

团队根据定价页面做预算,然后在发票时感到惊讶。一旦你理解了下面的五个乘数,这种惊讶是可以预见的。这些乘数是叠加的。只修复其中一个而忽略其他,大部分差距仍然存在。

定价说明: 此处引用的Token费率反映2026年6月提供商文档和 DigitalOcean Inference 定价 中的标价。在预算前请确认实时费率。

标价与发票之间的五个乘数

五个隐藏成本乘数

输出token主导混合比例

Claude Sonnet 4.6 列出了每百万输入token $3.00,每百万输出token $15.00。DigitalOcean Serverless Inference 在撰写本文时列出了同样的拆分比例。

一个输入输出比为1:2的对话工作负载,在任何其他乘数应用之前,已经混合到 标称输入费率的3倍。查看你过去30天的使用情况。如果输出量是输入量的2倍或3倍,你的实际费率远不是定价页面上的数字。

推理token按输出计费且保持不可见

具有扩展思考功能的模型(Claude自适应思考、OpenAI o3/o4-mini)会发出用户从未见过的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,使模型在回答前花费更少的隐藏推理令牌。Opus 4.8始终会思考;你无法关闭这一点,但可以根据任务匹配深度。工单标签不需要与多步骤智能体工作流相同的推理预算。将低努力与简单提示配对,可以防止不可见的思考令牌虚增账单,使账单保持在接近可见输出数量的水平。

检查每个响应上的usage。当effort默认较高时,推理模型在简单任务上往往占据主要开销。

非生产流量共享一个API账户

CI管道在每次拉取请求时重放提示。预发布环境镜像生产环境。负载测试命中模型端点以验证应用规模,而非模型成本。没有环境标签,所有这些都像生产环境一样计费。

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 Serverless Inference,并在每次请求中为environmentservice附加metadata标签。这些标签放在extra_body中,这样你可以按来源——CI运行器、预发布环境、生产环境——切分使用日志,而不是把每个token都当作生产花费。打印response.usage可以得到token计数,在标记流量分组后与账单核对。

首次按环境拆分时,CI和预发布环境通常占总token量的30%到50%。

同一提示词下,不同模型的冗长度差异达2到4倍

同一个分类提示词,在详细模型上会返回整段文字,在简洁模型上只返回一个标签。无论哪种方式,你都要为每个输出token付费。这就是模型选择的通道:同样的任务,不同的输出token数量。

提示词约束(“只返回标签,不用解释”)在结构化任务上可削减60%到80%的输出。长期来看,应根据任务类型匹配模型的冗长度,并按端点而不是按模型目录条目衡量输出token。

长上下文附加费适用于整个请求

GPT-5.5OpenAI文档):输入token低于272K时,每百万输入/输出为$5/$30。输入超过272K时,整个会话每百万输入/输出涨至$10/$45

Gemini 3.1 Pro PreviewGoogle定价):上下文不超过200K时,每百万token为$2/$12。超过200K时,请求中所有token按每百万$4/$18计费

模型 标准费率(每百万输入/输出) 阈值 长上下文行为
GPT-5.5 $5 / $30 输入>272K 整个会话,输入2倍/输出1.5倍
Gemini 3.1 Pro Preview $2 / $12 输入>200K 整个请求,每百万$4/$18

长上下文定价阶梯图

在相当一部分请求中,RAG流水线多轮智能体会跨过这些阈值。请对照各提供商的层级边界,审计p95和p99的输入上下文长度。

我们在DigitalOcean Serverless Inference上测量的数据

上述乘数与提供商无关。本节数据来自https://inference.do-ai.run/v1上的实时API运行,记录于使用Inference Router实现多模型API成本治理(截至2026年6月16日)。方法:固定提示词、temperature=0、从响应中的usage读取token计数、按运行时的已发布DigitalOcean Inference费率计算成本。

模型选择税:相同token,成本相差36倍

模型选择通过两个独立通道影响成本:模型收取的每token费率,以及它产生的输出量(冗长度,乘数#4)。第一项测量单独考察费率通道。同一个分类提示词、三个模型、token形状完全相同94 input / 80 output)——输出比(乘数#1)和冗长度(乘数#4)保持不变,因此唯一变量是价格:

模型 每请求成本(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万次分类请求计算,仅路由一项的差距就是$28.49 vs $1,037.40。任何用量折扣都无法弥补模型不匹配的问题。

这与Serverless Inference中真正重要的指标中的更广泛DO基准一致:在同一提供商上,每个已完成答案的成本在模型目录中波动约230倍。提供商标价的变化只影响几个百分点,而模型选择的影响则相差几个数量级。

推理输出量:约为分类成本的840倍

同一提供商,不同任务,6月16日实时运行:

路径 模型 Token(输入/输出) 每请求成本
分类 openai-gpt-oss-20b 94 / 80 $0.00004070
客户问答 anthropic-claude-4.6-sonnet 412 / 292 $0.00445200
推理 openai-gpt-5 891 / 3,411 $0.03417625

推理路径每次请求的成本比分类高出约840倍($0.03417625 vs $0.00004070)。GPT-5的输入费率($1.25/M)低于Sonnet($3.00/M),因此这不是费率通道效应——账单之所以激增,是因为推理生成了3,411个输出token,而分类只有80个。这就是乘数#2,以及乘数#1在数值上的容量通道:输出量(包括在可见答案之前计费的思考token)主导了成本。

复现测量

使用你自己的模型访问密钥运行此命令。它会记录你进行成本归属所需的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)"

这个单行命令使用temperature=0openai-gpt-oss-20b发送固定的分类提示词,并打印响应的usage块。使用您的模型访问密钥运行它,可以查看DigitalOcean计费所依据的确切prompt_tokenscompletion_tokens。使用相同的提示词对anthropic-claude-4.6-sonnet重复相同的调用,使用量差异就是您的账单目前承担的模型选择税——相同的任务形态,但每令牌费率不同。

完整的路由器设置、任务策略以及x-model-router-selected-route响应头,请参阅Inference Router 操作指南成本治理教程

可见性先于优化

大多数计费仪表板显示总令牌数和总支出。它们省略了环境拆分、缓存命中率、思考与可见输出、长上下文层级暴露以及按任务的输出分布。

没有这种细分,您就是在盲目优化。下面的脚本使用DigitalOcean/Anthropic公布的价格,根据使用计数器估算混合成本。将其连接到您的推理日志:

#!/usr/bin/env python3
"""Estimate blended LLM cost from token usage counters."""

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,
    }

# 1M input, 2M output, 500K thinking: multiplier ~13.5× vs input-only estimate
print(estimate_cost("anthropic-claude-4.6-sonnet", 1_000_000, 2_000_000, thinking_tokens=500_000))

该辅助工具将原始令牌计数器转换为包含输出令牌和思考令牌(而不仅仅是输入令牌)的美元估算值。multiplier_vs_input_rate字段揭示了定价页面数学计算与实际支付之间的差距:底部的示例——100万输入、200万输出、50万思考令牌——相对仅输入估算产生了约13.5倍的乘数。将其接入你的推理日志,以标记综合成本偏离预算的端点。

四大杠杆,按效力排序

提示缓存降低了重复前缀的成本。Anthropic的缓存读取费用为基础输入的10%(定价文档)。一个100万令牌的系统提示词,在80%缓存命中率下,会显著改变输入经济性。机制细节:高级提示缓存

批量推理为异步工作负载提供约50%的折扣,并提供24小时SLA。如果你的任务可以容忍延迟,而你仍在调用同步端点,那你等于放弃了最容易获得的折扣。

用量折扣在月度支出较高时生效。许多符合条件的团队从未主动询问过。

模型路由是当流量混合简单和复杂任务时最大的杠杆。上面6月16日的DO实况运行显示,相同分类提示词的成本差异高达36倍。Inference Router可在inference.do-ai.run上自动化任务到模型的调度,无需应用端路由逻辑。在70万/25万/5万的分类/问答/推理流量分布下,根据每次请求的测量数据,文档化的路由方案比仅用Sonnet的基线降低了39.6%的月度成本,比仅用Opus降低了63.7%(完整的流量模型参见成本治理教程)。

为什么按令牌计费和路由对应这些乘数

乘数#3(非生产环境泄漏)是一个可观测性问题。按令牌计费在共享API密钥下默认不会区分环境。你可以通过在请求元数据中添加标签,以及一个按environment分组usage的仪表板来解决这一问题。DigitalOcean Serverless Inference的计费与API返回的usage块一致,因此你的日志管道和账单共享同一个数据源。

模型选择同时驱动乘数#4(冗长度)和费率差异,这两者都是架构问题。当一个前沿模型同时处理分类和推理任务时,你会通过两条渠道为单词标签支付前沿价格:更高的每令牌费率(实测36倍的分类溢价),以及对于更健谈的模型,在同一任务上更高的输出量。

按任务复杂度进行路由可保持平均成本与任务价值成比例。分类流量保持在openai-gpt-oss-20b上。问答流量保持在Sonnet上,并通过会话固定来保持KV缓存的热度。推理流量仅在输出量证明费率合理时才升级到GPT-5。这种架构直接针对乘数#1、#2和#4。它不能替代针对乘数#3的环境标签。

关于托管模式的权衡(当按令牌计费的serverless让位于按GPU小时计费的专用实例时),参见Serverless与专用与批量推理的对比规模化时的专用与Serverless推理。DigitalOcean基础设施上的缓存命中率基准测试在serverless基准测试管道中单独跟踪。

你也可以参考下面这个生产环境推理系列的其他文章:

  1. 如何为推理用例选择合适的LLM模型
  2. 提示缓存实践:从7%到74%的命中率
  3. 多提供商LLM路由不是问题,而是你的架构
  4. 生产级AI应用的实际成本

参考资料

——

🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

← 上一篇
规模化产品实验:Airbnb、Netflix、Lyft和Uber如何对基于LLM的AI功能进行因果推断
下一篇 →
租户感知:如何在不依赖聊天JSON的情况下审核图像生成的文本提示词

📌 相关推荐

GraphRAG 是推理问题,而非数据库问题
2026/8/30
构建市场时光机:使用 Python 和 WebSocket 重放交易会话
2026/8/30
如何自行基准测试LLM推理:值得信赖的数字设计标准
2026/8/30
← 返回文章列表