[Bug]: DashScope tiered pricing uses graduated slices instead of the request-size tier

该报错发生在 LiteLLM 的 DashScope 成本计算器将阶梯定价按“超额累进”方式分段计费,而阿里云 Model Studio(百炼)实际是按单次请求的总输入 token 数选择唯一档位、整单统一计价。优先检查你使用的 LiteLLM 版本是否已包含 #36720 修复。

快速结论:该报错发生在 LiteLLM 的 DashScope 成本计算器将阶梯定价按“超额累进”方式分段计费,而阿里云 Model Studio(百炼)实际是按单次请求的总输入 token 数选择唯一档位、整单统一计价。优先检查你使用的 LiteLLM 版本是否已包含 #36720 修复。

适用环境:LiteLLM(DashScope provider);Issue 复现基于 commit 24123269ccb76f36298a2457589f08bd3141072c,模型为 qwen-flash。未涉及操作系统、Python、CUDA、显卡版本,不做补写。

最快修复方案:升级 LiteLLM 至包含 pull request #36720 的版本,该修复已确认将 DashScope 计费改为从请求总输入 token 数选择单一档位,并统一按该档位价格计算所有 token 类别。

注意事项:如果升级后仍异常,需确认模型成本配置(如上 qwen-flashtiered_pricing 数据)与阿里云 Model Studio 官方定价页一致;此外,代理预算预留逻辑与修复前的成本计算存在不一致,修复后需重新验证预算控制效果。

问题场景

在使用 LiteLLM 代理调用阿里云 DashScope(Model Studio)上的 Qwen 系列大模型(如 qwen-flash)时,当单次请求的输入 token 数超过某个档位阈值(例如 256,000),日志中记录的花费金额与阿里云账单不一致,且预算强制(budget enforcement)可能失效。

报错原文

[Bug]: DashScope tiered pricing uses graduated slices instead of the request-size tier

{
  'actual_input': 0.023799999999999998,
  'actual_output': 0.0007999999999999999,
  'actual_total': 0.024599999999999997,
  'request_tier_input': 0.075,
  'request_tier_output': 0.004,
  'request_tier_total': 0.079
}

原因分析

根本原因:LiteLLM 的 DashScope 成本计算器在计算 tiered_pricing 时,采用了类似个人所得税的“超额累进/分段切片”方式——即分别对文本输入、缓存输入、输出 tokens 独立进行阶梯分段计费。

但阿里云 Model Studio 的官方规则是:按单次请求的总输入 token 数选择对应的唯一价格档位,请求中所有 token(包括输出、缓存输入)都按该档位的单价计费。

例如,300,000 输入 tokens 的请求应命中第二档(256,000~1,000,000)单价;修复前却将前 256,000 个输入按低档、剩余 44,000 个按高档,输出 token 又单独按第一档计算,导致费用被低估。代理预算预留代码已通过 select_tier_for_input 实现“请求大小定档”模型,因此预留估算和响应后实际记账互相矛盾,弱化了大请求的预算控制。缓存输入也被单独从零开始定档,进一步加剧不一致。

环境排查

  • 确认 LiteLLM 版本:是否已合入 #36720 修复;可检查 litellm/llms/dashscope/cost_calculator.py 中是否仍存在独立的 calculate_tiered_cost 调用。
  • 确认模型定价配置:以 qwen-flash 为例,核对模型 map 中的 tiered_pricing 档位 range 和单价是否与阿里云 Model Studio 官方定价一致。
  • 检查代理预算配置中使用的成本计算路径,确认预留(reservation)与账单(spend accounting)是否使用同一套定档逻辑。

解决步骤

  1. 升级 LiteLLM:升级到包含 pull request #36720 的正式版本,该修复将 DashScope 计费改为按请求总输入 token 数选择唯一档位。
  2. 验证成本计算:参考 Issue 中的复现脚本,运行 cost_per_token 对比实际费用与手动按“总输入定档”计算出的期望费用,两者应一致。
  3. 核对模型定价配置:如果升级后费用仍不匹配,检查 get_model_info 返回的 tiered_pricing 数据是否包含正确的 range 区间和单价,必要时按阿里云官方定价页更新。
  4. 回归预算测试:重新测试代理预算强制功能,确认请求预留(reservation)和响应后扣费不再矛盾。

验证方法

运行 Issue 中的 Python 脚本,对比 actual_totalrequest_tier_total:修复后两者应相等且等于 0.079(对 300,000 输入的 qwen-flash)。同时可发起一个跨档位阈值的真实或模拟请求,核对日志中的预估费用与阿里云账单是否一致。

参考来源

BerriAI/litellm #34729

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18858

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注