🤖 AI 摘要
AI API 中转站的计费通常采用"预扣费 + 最终结算"模式,但很多中转站不透明的地方在于:失败请求、空回复、503/524 错误时,预扣费没有返还。页面余额显示的是经过处理的数字,raw quota 才是真实消耗数据。结合 quota 前后差值与后台消费记录,可以辅助判断扣费是否需要进一步核查。对于站长侧,无有效输出时应将 final_quota 设为 0 并返还预扣费。
💡 直接答案
判断中转站扣费是否透明的关键方法是:不要只看页面余额,要查 raw quota(请求前后 quota 差值)。但要注意:不要只看“请求失败”四个字。你需要结合后台消费记录、usage、raw quota、prompt_tokens、completion_tokens、stream 状态,以及是否产生了可用输出(文本 / tool_call / 图片 / 音频等)。
失败请求、tool_call、client_gone 和 empty response 怎么判断是否扣费?一般来说,tool_call message 显示出来通常说明模型或协议转换返回了工具调用结构;client_gone 表示客户端提前断开,可能导致你没收到完整输出;empty response 表示没有可用文本输出。以上情况是否扣费,都需要回到 usage / raw quota 与后台消费记录综合判断。如果没有可用输出但你怀疑产生了扣费,请保留:时间、模型、客户端、错误截图、消费记录(最好包含 request_id),联系客服核查。
你也可以使用 AI API Doctor 辅助检查 Base URL、API Key、模型权限和常见错误,并结合后台 usage、raw quota 与消费记录做对比核验。
什么是预扣费 + 最终结算
大多数 AI API 中转站(包括 New API / One API 架构)采用两阶段计费:
- 预扣费阶段:发起请求时,根据预估 token 数扣除费用
- 最终结算阶段:请求完成后,根据实际 token 消耗多退少补
问题出在第二步:如果请求失败或没有有效输出,预扣费可能不会返还。
为什么页面余额看不出小额扣费
页面余额经过了两层处理:
- 预扣:发起请求时扣除
- 结算:请求完成后根据实际消耗调整
如果大量小额失败请求累积(比如每笔 0.001 元),余额页面可能只显示"掉了 10 元",但用户不知道这 10 元是由 10000 笔失败请求组成的。
⚠️ 关键问题
很多中转站的"余额掉了"不等于"实际消耗了"。失败请求的预扣费没有返还,这是很多用户没有察觉到的隐形损失。
raw quota 为什么更准确
raw quota 是请求前后 quota 的实际差值,代表真实 token 消耗。通过 /api/user/self 接口可以获取:
quota:预扣后余额(经过结算的)raw_quota:真实 quota(预扣前的原始值)quota_per_unit:每单位的价格
对比这两个值,可以判断:
- 如果
raw_quota和quota一致 → 正常 - 如果
quota明显低于raw_quota差值 → 可能在返还预扣费 - 如果请求失败但 quota 或 raw quota 有变化 → 需要结合 request_id、usage、completion_tokens、stream 状态、tool_call / 图片 / 音频 / 搜索等其他计费项综合判断
失败请求是否应该扣费
| 失败类型 | 理想处理 | 实际常见情况 | 用户应该怎么做 |
|---|---|---|---|
| 401 认证失败 | 完全不扣费 | 不扣费 | 检查 Key 配置 |
| 403 权限不足 | 完全不扣费 | 可能预扣不返还 | 检查模型授权 |
| 503 上游不可用 | 完全不扣费 | 可能预扣不返还 | 等待恢复,检测 raw quota |
| 524 Cloudflare 超时 | 按实际消耗结算 | 可能全部预扣不返还 | 缩短单次任务/降低超时概率,并结合 raw quota + 消费记录判断 |
| 空回复(completion_tokens=0) | 完全不扣费 | 可能预扣不返还 | 检测 raw quota |
常见场景怎么查
| 场景 | 用户看到什么 | 重点看什么 | 建议动作 |
|---|---|---|---|
| tool_call message 可见 | 用户看到 tool_call / function_call / arguments | 客户端是否支持工具调用、是否有 completion_tokens、是否有可用输出、是否返回 usage |
先查 /tool-call-message-api-error/,再结合后台消费记录核验 |
| client_gone | 请求中途断开或客户端停止等待 | stream 状态、completion_tokens、是否有部分输出、后台是否有 usage |
保留时间和消费记录(含 request_id),如无可用输出但疑似扣费可联系客服核查 |
| empty response | 没有正常文本输出 | completion_tokens 是否为 0、content 是否为空、后台是否有 usage / raw quota 变化 |
回到 raw quota + 消费记录综合判断(必要时截图留存) |
| model not found | 模型名或权限不匹配 | 模型名、Base URL、是否为 OpenAI-compatible /v1 模式、模型权限 | 参考 /model-not-found-api-error/ 并检查 API Gateway 说明:/openai-compatible-api-gateway/ |
| no available channel | 模型路由没有可用渠道 | 模型权限、渠道状态、上游状态 | 参考 /no-available-channel/,必要时按 Claude API 渠道选择排查:/claude-api-channel-cost/ |
| 503 / 524 | 长请求或上游超时 | 任务长度、客户端超时、是否存在部分输出、usage/raw quota 变化、消费记录 | 参考 /claude-code-524-503-timeout/;必要时结合渠道选择说明:/claude-api-channel-cost/ |
空回复是否应该扣费
completion_tokens=0 的空回复需要分情况判断:
- prompt 本身无法生成有效回复:用户问题,无法生成有效内容,扣费可能是合理的
- 服务端处理错误(503/524):中转站或上游问题,不应让用户承担预扣费
- 渠道质量导致输出被截断:中转站配置问题,应该返还
- max_tokens 设置过低:用户配置问题,扣费可能合理
503 / 524 是否应该扣费
- 503 Service Unavailable:上游服务不可用,请求未实际处理。理想情况下完全不扣费。
- 524 Gateway Timeout:Cloudflare 超时,上游可能处理了一部分。需要看实际消耗。
💡 判断方法
可以对比请求前后的 quota 差值:发起一个会触发 503/524 的请求(故意传错误参数),然后查看 quota 变化。如果 quota 或 raw quota 有变化,结合 request_id、usage、completion_tokens、stream 状态、tool_call / 图片 / 音频 / 搜索等其他计费项,以及后台消费记录综合判断。
Claude Code 524 / 503 超时会不会扣费?
超时不等于一定扣费,也不等于一定没扣费。判断时要看请求是否到达上游、是否产生 usage/raw quota、是否有 completion_tokens,以及中转站是否记录了错误明细。
Claude Code 的 524/503 超时场景有特殊性:
- 524 更常见于长请求、代理层或源站响应超时——请求可能已发出但上游响应太慢,代理层在规定时间内没有收到响应
- 503 更常见于上游渠道不可用、路由失败、余额或权限问题——请求到达了网关但上游无法处理
什么情况下不应该扣费
- 如果
completion_tokens=0、没有有效文本、没有 tool_call、image、audio、search 产物,不应按成功输出最终扣费 - 如果已经预扣,应在最终结算阶段返还
- 524 场景下请求未到达上游(无 request_id),理论上不应有成功扣费记录
什么情况下可能扣了费
- 请求已到达上游,上游实际处理了部分 prompt(产生了 usage 记录)
- 上游返回错误但计费系统记录为"已完成"
- 多跳链路中某段产生了中间成本
💡 用户反馈"超时但扣费"时,请准备以下信息
- request_id(最重要)
- 请求时间(精确到分钟)
- 模型名和版本
- API Key 后四位或 token 名称
- 客户端名称,例如 Claude Code / Codex / Cursor
- 是否为 stream 请求
- 是否有 completion_tokens
- 是否有 raw quota / usage log
建议配合以下页面进行排查:
- Claude Code 524 / 503 排查:/claude-code-524-503-timeout/
- tool_call message 排查:/tool-call-message-api-error/
- 空回复 / empty response:优先结合
completion_tokens、usage、raw quota 和消费记录综合判断 - API Gateway 机制:/openai-compatible-api-gateway/
- Claude API 渠道选择:Claude API 渠道选择指南(Claude Code 长请求失败、empty response 或 client_gone 场景可结合一起排查)
如何辅助核查扣费记录
可以结合以下方式辅助判断扣费是否需要进一步排查:
- 对比请求前后的 quota 差值,参考
/api/user/self返回的quota和raw_quota - 检查 request_id、usage、stream 状态和 completion_tokens
- 确认是否有 tool_call、图片、音频或搜索等其他计费项
- 结合后台消费记录和结算明细综合判断
你也可以使用 AI API Doctor 辅助检查 Base URL、API Key、模型权限和常见错误,结合后台 usage、raw quota 与消费记录进行辅助核查。
# 获取用户 quota 信息
curl https://api1.link-ai.cc/api/user/self \
-H "Authorization: Bearer 你的APIKey"
# 响应中的 quota 相关字段
{
"quota": 998.50, # 页面显示余额
"raw_quota": 999.00, # 原始 quota
"quota_per_unit": 0.01 # 每单位价格
}
站长侧建议:无有效输出时的处理
如果你是中转站的运营者,建议采用以下扣费逻辑:
if (final_output_tokens == 0) {
// 无有效输出,final_quota = 0,返还预扣费
refund_precharge()
} else {
// 有有效输出,按实际消耗结算
final_quota = actual_tokens * price_per_token
}
这不仅是对用户的公平,也是建立长期信任的基础。
如何辅助核查 Link-AI 的扣费记录
结合 quota 差值、usage、raw quota 与消费记录综合判断,必要时使用 AI API Doctor 辅助检查
API 中转站常见错误码对照表
| 错误文本 | 含义 | 用户看到什么 | 重点看什么 | 建议动作 |
|---|---|---|---|---|
401 invalid_api_key |
API Key 无效 | 提示 Key 错误,请求被拦截 | Key 是否复制完整、是否带空格、Key 与 Base URL 是否属于同一平台 | 重新复制 Key、确认 Base URL 匹配 |
403 permission denied |
权限不足 | Key 可能有效,但没有该模型权限 | 模型是否已启用、账号/分组是否有权限访问 | 检查 Link-AI 控制台模型授权与用户分组 |
404 model not found |
模型名不存在 | 找不到对应模型 | Base URL 路径、模型名拼写、/v1 格式是否匹配 | 核对后台模型列表与 Base URL |
429 rate limit |
请求过多 | 被限速,请求被拒绝 | 并发或频率是否过高、账户额度是否不足 | 降低并发、稍后重试 |
503 Service Unavailable |
上游不可用 | 服务暂时不可用,或 no available channel |
渠道状态、上游可用性、模型权限 | 等待后重试,参考 Claude Code 524 / 503 排查 |
524 Gateway Timeout |
网关超时 | 长时间没有返回,或空回复 | 任务长度、Cloudflare 120 秒限制、是否切到 api2 | 缩短任务或切换 api2 通道 |
| tool_call message | 工具调用内容直接显示 | 用户看到 tool_call / function_call / arguments 原文 | 客户端是否支持工具调用、是否有 completion_tokens 与 usage | 先查 tool_call message 排查,再结合扣费记录判断 |
| client_gone | 客户端提前断开 | 请求中途断开,没拿到完整输出 | stream 状态、completion_tokens、是否有部分输出 | 保留时间和消费记录(含 request_id),联系客服核查 |
| empty response | 空回复 | 没有正常文本输出,但可能已扣费 | completion_tokens 是否为 0、usage / raw quota 是否有变化 | 回到 raw quota + 消费记录综合判断 |
更多错误码和排查口径,参考 OpenAI-compatible API Gateway 与 no available channel 排查。
FAQ
completion_tokens、是否有可用输出(文本 / tool_call / 图片 / 音频等)和后台消费记录综合判断。tool_call 可见更多是客户端或协议兼容问题,但扣费判断仍应以后台记录为准。prompt_tokens、是否返回 usage、stream 状态、是否有 tool_call 或其他计费项,以及后台消费记录综合判断。