API 空回复扣费是什么原因?completion_tokens=0 为什么还会扣费?

空回复扣费是指请求返回了空内容(completion_tokens=0、无文本、无 tool_call、无 image),但站点仍然扣费的现象。根本原因通常是预扣费机制没有正确实现「无有效输出 = 返还预扣」的结算逻辑。通过 raw quota 对比可以精确判断是否有异常扣费。
直接答案

空回复扣费的原因

  • 站点使用预扣费机制,但结算时没有正确返还
  • 请求失败(503/500/network error),预扣没有返还
  • 请求格式不支持,返回空内容但仍扣估算费用
  • 模型不支持,返回空内容但按 prompt tokens 扣费

如何判断?

对比请求前后的 raw quota。如果无有效输出但 quota 减少,则为异常扣费。

使用 API 扣费检测工具 获取 Link-AI API Key

什么是空回复扣费?

空回复扣费是指请求返回了空内容,但站点仍然按估算 usage 扣费的现象。典型场景:

  • API 返回 completion_tokens = 0,但余额少了
  • 请求返回 HTTP 200,但 response 为空
  • 请求返回 503,但预扣没有返还
  • 请求格式不支持,返回空内容但按 prompt tokens 扣费

为什么页面余额看不出来?

页面余额通常只显示两位小数,无法发现 $0.0001 级别的扣费变化。

应该通过 /api/user/self 读取 raw quota(精确整数),再配合 /api/statusquota_per_unit 换算实际金额。

换算公式
实际余额 (USD) = raw_quota / quota_per_unit

例如:
raw_quota = 99819128
quota_per_unit = 500000
实际余额 = 99819128 / 500000 ≈ 199.64 USD

预扣费 + 最终结算机制

预扣费是中转站点的常见机制:

  • 请求开始:预扣预估额度(如 prompt_tokens * 价格)
  • 请求完成:根据实际 usage 结算,多退少补
  • usage = 0 时:应全额返还预扣金额

如果站点没有正确实现「无有效输出 = 返还预扣」的结算逻辑,就会出现空回复扣费。


用户侧:如何发现空回复扣费?

  • 记录请求前的 raw quota(GET /api/user/self
  • 发起测试请求(可以用无效模型触发空回复)
  • 等待结算(3 秒快速结算 + 10 秒预扣结算)
  • 记录请求后的 raw quota
  • 对比 quota 变化:如果无有效输出但 quota 减少,则为异常扣费
  • API 扣费检测工具 自动完成以上步骤

站长侧:New API / One API 如何修复?

核心原则:无有效输出时,final_quota_change = 0,预扣金额应全额返还。

判断无有效输出的条件

  • completion_tokens = 0(无文本生成)
  • 无 tool_call 调用
  • 无 image / audio / search 等有效产物
  • HTTP 状态码为 5xx(上游错误)

结算逻辑建议

在 New API 的请求结算逻辑中增加判断:

结算伪代码示例
# 请求完成后的结算逻辑(伪代码)
if (usage.completion_tokens == 0 and no_tool_calls and no_multimodal_output):
    # 无有效输出,不扣最终费用
    refund_precharge()  # 返还预扣金额
    record_consume_log(quota_change=0)
else:
    # 有有效输出,按实际 usage 结算
    final_charge = calculate_from_usage(usage)
    refund_precharge()  # 先返还预扣
    deduct(final_charge)  # 再扣实际费用
    record_consume_log(quota_change=final_charge)

关键点:无论是否有有效输出,最终扣费都应该反映实际 usage。无有效输出时,final_quota_change = 0


常见空回复扣费场景

场景是否应扣费修复方向
completion_tokens=0,无文本不应(final_change=0)返还预扣,不记录 consume log
HTTP 503,上游不可用不应返还预扣
HTTP 500,服务端错误不应返还预扣,审计后补调
模型不支持,invalid model不应(无 usage)返还预扣,不扣 prompt 估算
网络超时,524可能有(部分完成)检查 usage 是否 > 0
completion_tokens > 0,有文本按实际 usage 扣费

和 Link-AI 有什么关系?

Link-AI 是 OpenAI-compatible API gateway,面向开发者提供 Claude、GPT 等模型接入服务。

  • Link-AI 按实际消耗计费,失败请求扣费会在审计后自动返还
  • 如果发现异常扣费,请联系客服处理
  • 如果担心扣费异常,使用 API 扣费检测工具 验证 raw quota 变化

常见问题

空回复扣费是指请求返回了空内容(completion_tokens=0、无文本、无 tool_call、无 image),但站点仍然按估算 usage 扣费的现象。

通常是因为站点使用了预扣费机制:请求开始时预扣额度,最终结算时如果 usage=0,应该返还预扣金额。如果站点没有正确实现返还逻辑,就会出现空回复扣费。

页面余额通常只显示两位小数,无法发现微小扣费。应该通过 /api/user/self 读取 raw quota(精确整数)来判断。

核心原则:无有效输出(completion_tokens=0)时,final_quota_change 应为 0,预扣金额应全额返还。在请求结算时检查 usage 是否为 0,若为 0 则不记录 consume log 并返还预扣金额。

通过 raw quota 对比:请求前读取 quota,请求后等待结算,再读取 quota。如果无有效输出但 quota 减少,则为异常扣费。

预扣费是中转站点的常见机制:请求开始时先冻结部分额度,请求完成后根据实际 usage 结算。如果最终 usage=0,应全额返还预扣金额;如果没有正确实现返还,就会出现空回复扣费。


相关教程

🔍

API 扣费检测工具

用 raw quota 对比自动检测扣费异常。

立即检测 →

524 超时解决

524 超时原因及 api2 切换方案。

查看详情 →
🔧

Claude Code 配置

Claude Code 完整配置教程。

查看教程 →
担心空回复扣费?用 raw quota 对比检测,精确判断是否有异常扣费。
使用扣费检测工具 获取 API Key