你已经认定网关是合理的选择 —— 多家供应商,汇聚成一个 OpenAI 兼容端点、一张账单。接下来才是更难的问题:到底该选哪一家, 又不至于最后落到一个被重新封装、计费灌水、还不稳定的转售商手里 —— 它之所以能比标价便宜 80%,是因为那些容量说不定一夜之间就消失了。 下面是我们自己会用的检查清单,涵盖真正重要的五件事 —— 外加一段一分钟的脚本,让你亲自验证这些说法,而不是照单全收。
1. 真实性 —— 它是不是真正的模型?
模型名是最容易造假的一环。转售商完全可以打着 claude-sonnet-4-6 的旗号,端出一个更小的模型、一个微调版本,或者只是把你的提示词 套进固定模板再返回。请去验证那些降级藏不住的能力:完整的上下文窗口、 原生工具调用、视觉识别。 模型真实性那篇文章 里给出了对应的探测方法。
- 这个模型能不能撑住它声称的完整上下文(在 150K+ 上做大海捞针)?
- 原生工具与视觉识别能不能用,还是只是拿文本假冒的?
- 这个模型是否可追溯到第一方来源(Bedrock、Vertex),还是来路不明?
2. 计费诚实度 —— 计量表说的是不是实话?
你按 token 付费,而数量是网关上报的。在这里灌水 —— 偷偷注入一段系统提示词,或者凭空捏造一个 usage 对象 —— 是最不动声色、却能把你超收 5~25 倍的手法。用 20 行代码就能验证(见 token 灌水那篇文章)。
- 上报的 token 数是否等于你实际的文本量再加上一小段固定的额外开销?
- 失败的 4xx/5xx 调用是否免费,还是连报错都要付费?
- 提示词缓存有没有被如实对待 —— 真正的缓存命中是否按折扣费率计费?
3. 可靠性 —— 高负载下会不会掉链子?
网关多加了一跳;它必须靠「比上游更可靠、而不是更不可靠」来撑起这个位置。 要留意快速失败的行为(给你能重试的报错,而不是卡住 90 秒), 以及会主动把流量从劣化后端切走的路由机制。
- 有没有公开状态页,以及一个公布的 SLA 数字?
- 是跨供应商的故障切换,还是每次调用只对应单一上游?
- 它会不会快速且明确地失败,好让你的重试能生效,而不是默默卡死?
4. 覆盖范围 —— 一把密钥能不能搞定你真正在做的活儿?
- 对话、图像和视频能用同一把密钥,还是只有文本?
- 是否全程都兼容 OpenAI —— 流式、工具、视觉识别、JSON 模式?
- 关键场合的原生路由(例如 Anthropic 的
/v1/messages)有没有原封不动地保留?
5. 价格与条款 —— 便宜得有原因,还是定价公道?
陷阱往往就埋在价格里。比官方标价低一点的折扣,是建立在规模化基础设施上的利润空间。 而一个比标价便宜 80% 的网关,卖的是随时会消失的灰色市场容量 —— 省下来的钱一定来自某处,而那通常就是拿真实性或稳定性换来的。
- 是否针对每个模型、对照官方费率定价(可审计),而不是含糊的全面打折?
- 是按量付费,还是被绑死在订阅方案和会过期的额度里?
- 余额会不会过期?有没有最低消费门槛?
一分钟就能跑完的尽职调查
别把营销页面的话 —— 也别把我们的话 —— 照单全收。把这些检查跑一遍:
# gateway_due_diligence.py
# 在生产环境信任任何 OpenAI 兼容网关之前,都可以拿它来跑一遍。
# 五项检查,成本远不到一美分,大约一分钟搞定。
import tiktoken
from openai import OpenAI
client = OpenAI(api_key="sk-...", base_url="https://api.brievio.com/v1")
# 1. 诚实计费 —— 比对上报的 prompt_tokens 与本地分词器数出来的数量。
msgs = [{"role": "user", "content": "Reply with the single word: ok."}]
r = client.chat.completions.create(model="claude-sonnet-4-6", messages=msgs, max_tokens=5)
local = len(tiktoken.get_encoding("cl100k_base").encode(msgs[0]["content"]))
print("token ratio (want ~1.0-1.6x):", round(r.usage.prompt_tokens / local, 1))
# 2. 真正的模型 —— 返回真实的结构化 tool_call,而不是把 JSON 硬塞进文本里。
r = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "weather in Tokyo? use the tool"}],
tools=[{"type": "function", "function": {"name": "get_weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}}}}],
)
print("returns real tool_calls:", r.choices[0].message.tool_calls is not None)
# 3. 失败调用免费 —— 故意发一个错误的请求,然后去看 usage 页面:
# 4xx/5xx 应该完全不计费。
# 4. 上下文 —— 在模型声称的窗口大小上做大海捞针测试
# (代码片段见「你的 Claude 真的是 Claude 吗」那篇文章)。
# 5. 条款 —— 有公开的状态页和公布的 SLA;定价是针对每个模型对照官方费率,
# 而不是含糊的「全场一律 2 折」。Brievio 在自己的清单上落在哪
老实说说我们自己的成绩单:Brievio 通过 tier-1 云端通道,路由的是 真正的第一方模型(Claude 走 AWS Bedrock、Gemini 走 Google Vertex), 完整上下文与原生功能都原封不动;按真实的 token 数计费, 失败的调用一律不收费;每个模型的定价约比官方标价低 15%(图像和视频折扣更深),按量付费,余额不会过期。我们赢不了的地方在于: 直连官方在首日就能拿到新模型、 以及正式的签约主体(provider-of-record)这两点上,依然胜过我们;而 OpenRouter则覆盖了范围广得多的开源长尾。完整内容请看 对比和价格, 然后拿上面那段脚本,去跑你候选名单上的每一个网关。
检查清单的意义,就在于你可以拿它去检验每一个人,包括写出这份清单的厂商。 也拿它来检验我们吧。