如何检测中转站的假模型:5 个可复现方法
更新时间
检测中转站假模型的 5 种可复现方法:响应指纹、Tokenizer 边界、上下文长度、限速自述、流式超时,对应 /check 工具 5 项自动检测。
5 个方法的共同前提
这 5 个方法都从中转站对一次请求的响应特征反推,不需要拿到中转站后台权限,也不依赖站点自己的宣传文案。
它们能增强或削弱“这个响应来自宣称模型”的判断,但不能单独构成对站点的定性。/check 结果面板的口径是:结论基于 5 项探测的一致性,不代表该站点未来的行为。截至 2026-08-13,RelayPick 自己的验真抽样也使用同一组方法,见 探针架构。
下面每节的 curl 都是示意,用来说明要比对哪一类字段,不是一份保证能在任意站点原样跑通的脚本。没有编程基础的话,直接用 /check 即可。
响应指纹
已知厂商官方 API 对固定探测请求的响应,会有特征性的 HTTP 头和字段组合:哪些头存在、字段如何命名。把中转站的多个样本拿去对,对得上才算一致。只包一层、底层仍是别家接口的转发站,通常会在头或字段风格上露馅。
手工示意:
# 示意:对固定探测请求读取响应头与 JSON 字段名,不要只看 HTTP 状态码
curl -sD - \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
"$BASE_URL/v1/chat/completions" \
-d '{"model":"MODEL","messages":[{"role":"user","content":"probe"}]}'
把多次响应里稳定出现的头和字段风格记下来,再与该厂商官方 API 的样本对照。单次不一致可能是网关加了自定义头;多个样本都对不上,才提高“不是这条官方链路”的权重。
这项在 /check 里由 fingerprint 自动完成。
Tokenizer 边界
不同模型家族的 tokenizer 对同一段 prompt 算出的 token 数是确定的,可以预先算好。把这段 prompt 发过去,看响应 usage 里的 prompt_tokens(或 Anthropic 风格的 input_tokens)是否等于预期值。若中转站把请求转给了别的模型,tokenizer 不同,数字对不上。
手工示意:
# 示意:先离线算好固定 prompt 的预期 token 数,再对比响应里的 usage
curl -s \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
"$BASE_URL/v1/chat/completions" \
-d '{"model":"MODEL","messages":[{"role":"user","content":"<fixed-prompt>"}]}'
只比对 token 计数,不把生成文本像不像当作依据。生成风格主观,tokenizer 计数不是。
这项在 /check 里由 tokenizer 自动完成。
上下文长度实测
官方或站点宣称的 context window(例如 200K)不一定是接口真正接受的长度。用二分法逐步加大 prompt,直到请求被拒绝,得到实测边界,再和宣称值比。
手工示意:
# 示意:按二分法更换 prompt 长度,记录二分结束时仍被接受的请求
curl -s -o /tmp/ctx-out -w "%{http_code}" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
"$BASE_URL/v1/chat/completions" \
-d '{"model":"MODEL","messages":[{"role":"user","content":"<payload>"}]}'
实测短于宣称值,说明标称窗口不可按字面用于排程。这项测的是接受边界,不是生成质量。
这项在 /check 里由 context 自动完成。
限速自述值
检查响应头里的限速自述字段(剩余额度、重置时间等)是否符合该厂商真实 API 的字段命名与取值范围模式。字段名不对、取值范围对不上,说明限速层不是该厂商的原样接口。
手工示意:
# 示意:只打印响应头,核对限速相关字段的命名与取值范围
curl -sD - -o /dev/null \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
"$BASE_URL/v1/chat/completions" \
-d '{"model":"MODEL","messages":[{"role":"user","content":"probe"}]}'
没有限速头不等于一定是假模型,有些网关会剥掉头。此项应和其他四项一起看。
这项在 /check 里由 ratelimit 自动完成。
流式与超时
真实上游的 SSE 流式响应应该有干净的结束信号:连接正常关闭,不管有没有 [DONE] 这类文本哨兵。中途被莫名掐断,是套壳或转发链路不稳定的信号。
手工示意:
# 示意:跟踪 SSE 直到连接关闭,观察是正常结束还是中途断开
curl -N \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
"$BASE_URL/v1/chat/completions" \
-d '{"model":"MODEL","stream":true,"messages":[{"role":"user","content":"probe"}]}'
这项在 /check 里由 stream 自动完成。五项对得上,只能说明这一次探测窗口里响应特征和宣称模型一致。RelayPick 不销售 API 额度,不接受排名付费;/check 的结论不代表该站点后续行为。
常见问题
- 这 5 个方法能 100% 测出假模型吗?
- 不能。多项吻合只能增强“当前响应对得上宣称模型”的判断,不能证明该站点过去或未来都如此。套壳站也可能在抽样当时转到正确上游。/check 结果面板的口径是:结论基于 5 项探测的一致性,不代表该站点未来的行为。
- 普通用户没有编程基础能测吗?
- 能。不需要自己写 curl。打开 /check 页面,按提示对目标站点发起检测,响应指纹、Tokenizer 边界、上下文长度、限速自述、流式超时这 5 项会自动跑完。指南里的 curl 只是原理示意,给需要复现或对照原始响应的人看。
- RelayPick 自己也用这 5 个方法吗?
- 用。验真抽样是独立于可用性探针的每日分散机制,检测项与 /check 相同:响应指纹、Tokenizer 边界、上下文长度、限速自述、流式超时。探针看能不能连上,验真看连上之后像不像宣称的模型。