OpenRouter 的空补全保险是什么:返回空内容时的计费与重试口径

2026-08-18

调 OpenRouter 时最让人心里发毛的一种情况,不是报错,是「什么都没有」:请求发出去了,HTTP 状态码看着正常,响应体里 choices 那一段却空空如也,结束原因也是空的。这时候第一反应通常不是去查模型,而是去查账:这一次是不是照样把 prompt 的钱扣了?

OpenRouter 官方文档里有一页专门回答这个问题,标题叫 Zero Completion Insurance(openrouter.ai/docs/guides/features/zero-completion-insurance)。这篇就把那一页的口径拆开讲清楚,同时把它没有回答的部分也点出来——后半部分往往比前半部分更值钱,因为那才是你不能拿它当保证的地方。

现象:拿到空返回,不知道这一次算不算钱

典型的几种表现:

  • 响应回来了,但补全部分没有任何输出内容,结束原因是空的或 null
  • 响应里的结束原因是错误(文档原文写作 error finish reason);
  • 流式调用时连一个有效分片都没拿到,流就结束了;
  • 走的是语音或图像类型的请求,拿到一段放不出来的音频,或者一个解不开的图像负载。

这些情况的共同点是:你这一次没有拿到可用的东西,但上游供应商那边很可能已经把你的 prompt 处理过一遍了。文档里明确承认了这个错位——它写的是,即使底层供应商对 prompt 处理收费,符合条件的请求也不向你收取模型的 token 费用。

怎么确认是这个问题:先看两个条件是否成立

这层保护不是「看起来像空返回就不收钱」,文档给出的是两个明确的判定条件,二者满足其一即可:

  1. 该响应的 completion token 数为零,并且结束原因为空或 null
  2. 该响应的结束原因是 error。

注意第一个条件是「与」的关系,两半都要成立。这一点很容易被读快了当成「只要没内容就免费」,实际上文档写的是零 completion token 加上空的结束原因。

所以判定动作很直接,按顺序做三步:

第一步,回到你自己这一侧的响应记录,把那次调用的原始响应体留下来,确认补全部分的 token 数是否为零、结束原因字段的取值是空、null 还是 error。这里要说清楚一件事:官方这一页是用叙述性语言写的(zero completion tokens、blank/null finish reason、error finish reason),它没有在这一页逐字给出对应的 JSON 字段名,所以本文也不替它编一个字段名出来。你在自己的响应体里对着这三种语义找就行。

第二步,去 activity 页面看这一次请求的记录。 文档写明,受到这层保护的请求,在 activity 页面上显示的 token 用量扣费为零。这是官方给出的、能直接看到结果的验证位置。

第三步,看这次请求的 usage breakdown。 文档提到,附加服务如果确实产生了费用,会出现在该次请求的 usage breakdown 里。也就是说,如果你在 activity 上看到这一次不是完全零扣费,下一步就该去 breakdown 里看剩下的那部分是不是附加服务,而不是模型 token。

这三步在 Windows 和 Linux/macOS 上的做法没有区别:文档描述的是平台侧对这次响应的计费口径,写的是「不会向你扣除模型 token 的额度」,而不是让你在客户端做什么配合动作。文档里也没有给出任何与操作系统、SDK 或客户端形态相关的差异说明,所以不要指望换个系统或换个客户端能改变判定结果——至于平台内部具体在哪一层做这个判定,官方这一页没有说明,本文也不替它推断。

文档语义给出的处置:不用你做任何配置

这一页里有一句话值得单独拎出来:这项保护对所有账户自动启用,不需要任何配置

所以「怎么开启」这个问题是不存在的——没有开关、没有需要传的参数、没有需要在请求里带的标记。反过来说,也没有「关闭」的口径,文档没有提供任何选择退出的方式。如果你在排查时的思路是「是不是我没打开这个功能」,可以直接把这条排除掉。

覆盖范围文档写得很具体,是模型的推理成本这一块,具体点名了三类 token:prompt token、completion token、reasoning token。请求符合条件时,这三类都不计费。reasoning token 被单独点名这一点,对用带思考过程的模型的人有实际意义——不是只免 completion 那一小部分。

语音和图像有各自的「有效输出」定义

这一页里最容易被忽略的是:文本转语音和图像生成不是简单套用「零 completion token」这条,各有各的判定标准。

文本转语音这边,文档把「可用输出」定义为响应流交付了格式有效的音频:MP3 至少要有一个完整的 MPEG 帧,PCM 至少要有一个完整的 sample。空的、无效的、被截断的输出不计费。但紧接着有一句是真正的坑:按字符计价的请求,一旦交付了可用音频,就按完整输入计费——包括客户端在收到部分音频之后主动取消的情况。也就是说,你写的那个「超时就 abort」的逻辑,如果 abort 发生在第一帧有效音频之后,这一次是照常算钱的,别指望它被算成空返回。

图像生成这边,文档定义的可用输出是:响应至少交付了一张 base64 负载非空且可解码的图像。三种情况会被判为上游失败并因此不计费:没有图像数据、负载为空、负载不是合法的 base64。还有一句技术上的限定值得记住——校验只检查 base64 是否可解码,不检查解码后字节的实际格式,所以包括 AVIF 和 HEIC 在内的各种有效输出格式都会正常交付。换句话说,「我这边解不开这张图」和「平台判定它是失败」是两回事:只要 base64 能解,平台就认为交付成功了,格式兼容性问题得你自己在客户端处理。

不覆盖的部分:已经跑完的附加服务

这是账单对不上时最常见的真实原因。文档写明,这层保护不覆盖那些在响应失败之前就已经执行完的附加服务,并点了三类:

附加服务文档写明的计费口径
web search可能按实际执行的工作计费(文档举例:每次请求的搜索费用)
文件解析 / PDF OCR可能按实际执行的工作计费
web fetch可能按实际执行的工作计费

这张表只列了与本篇直接相关的这三项,因为它们正是「模型没出货但账单不是零」的解释来源。文档同时补了一句余地:在某些失败场景下——它举的例子是上游失败到完全没有产生任何 token——这些费用也会一并跳过。注意这句用的是举例的口吻,并没有给出一份完整的「哪些失败会跳过附加服务费」的清单,所以别把它当成规则来推演。

对应到 activity 页面上,文档的说法是:如果一次受保护的请求同时用了 web search 或文件解析这类附加服务,那么被扣掉的只有这些服务费用。

处置后怎么验证

这一层没有「处置动作」可做,验证是唯一能做的事,落点也很明确:

  1. 在 activity 页面上找到那一次请求,确认 token 用量的扣费显示为零。文档强调这一点即使在 OpenRouter 自己被供应商收了 prompt 处理费的情况下也成立;
  2. 如果扣费不是零,打开这次请求的 usage breakdown,看剩下的部分是不是落在附加服务那一栏;
  3. 如果 breakdown 里显示的仍然是模型 token 的费用,那就说明这次请求根本没有满足前面那两个条件之一,问题不在这层保护,而在你对「这次算不算空返回」的判断。

什么情况说明不是这个原因

这一节是本文的重点,因为把不属于这里的问题往这里靠,会浪费很多排查时间。

第一种:有输出,但内容你不满意。 模型返回了一个很短的、没用的、甚至只有空白字符的回答,但 completion token 不为零、结束原因是正常结束——这不满足文档给出的任何一个条件。「输出质量差」和「零输出」在计费上完全是两件事,这一页只处理后者。

第二种:语音请求已经交付了可用音频。 前面说过,只要第一个完整的 MPEG 帧或第一个完整 sample 已经出去了,按字符计价的请求就按完整输入计费,客户端事后取消也一样。你如果在代码里做了「N 秒没播完就取消」的保护,账单不为零是符合文档口径的结果,不是异常。

第三种:图像的 base64 能解码,只是你这边渲染不出来。 平台的校验只到「可解码」为止,格式对不对不在它的判定范围内。这种情况会正常计费。

第四种:账单差额来自附加服务。 这次请求带了 web search、文件解析或 web fetch,模型侧确实没收钱,但服务费照收。去 usage breakdown 里核,比在这一页上反复读要快得多。

第五种:你想问的其实是重试。 这一点必须说清楚:官方这一页没有说明任何与重试相关的口径——空返回之后平台会不会自动换一家上游重试、重试产生的那一次算不算新的计费单元、重试次数有没有上限,这一页一个字都没写。所以你在自己的客户端里做重试时,得按「每一次调用都是独立的一次请求、各自按上面两个条件单独判定」来预估,而不能假定平台会替你兜住重试的开销。真要确认平台侧的路由与重试行为,得去看路由相关的文档页,不能从这一页推。

最后提醒一句常识性的:这一页描述的是平台当前的计费口径,OpenRouter 的功能与文档迭代都很频繁,涉及计费的任何判断都请以官方文档最新内容为准,本文只负责把落盘那一天的原文口径讲明白。


本文依据 OpenRouter 官方文档(openrouter.ai/docs)于 2026-08-18 的公开内容整理。 该平台闭源,本文只复述官方文档写明的机制,不推断其内部实现我们没有对文中涉及的功能做过实测,因此不涉及界面外观与运行表现的任何描述。 该平台的供应商、模型与路由策略随时变动,文中不列具体供应商名单与模型清单; 价格、额度与限流的具体数值请以官方定价页与用量说明为准。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。