API Relay Check:中转站检测与模型掺水验证工具
在给第三方 API 中转站充值前,按这套流程用本地终端验证 Base URL、API Key、模型名、流式响应和计费行为,重点看它有没有疑似掺水、降配、换其他模型冒充热门模型。
怎么使用
这个工具的实际入口是本地运行 audit.py。先在中转站后台创建一个临时低额度 API Key,然后在本地终端执行:
mkdir -p api-relay-check
cd api-relay-check
curl -sO https://raw.githubusercontent.com/toby-bridges/api-relay-audit/master/audit.py
python audit.py \
--key "填入你的临时 API Key" \
--url "https://api.example.com/v1" \
--model "gpt-4" \
--output report.md
把 --key 换成临时 API Key,把 --url 换成中转站给你的 Base URL,把 --model 换成你准备测试的模型名。运行结束后,当前目录会生成 report.md,里面包含每一步的检测结果和整体风险结论。
如果你只想先快速扫一遍,跳过耗时较长的基础设施和上下文长度测试:
python audit.py \
--key "填入你的临时 API Key" \
--url "https://api.example.com/v1" \
--model "gpt-4" \
--skip-infra \
--skip-context \
--output quick-report.md
常用参数:
| 参数 | 用途 |
|---|---|
--key | 中转站 API Key,建议使用临时低额度 Key |
--url | 中转站 Base URL,例如 https://api.example.com/v1 |
--model | 要测试的模型名 |
--output | Markdown 报告输出路径 |
--skip-infra | 跳过 DNS、WHOIS、SSL 等基础设施检查 |
--skip-context | 跳过上下文长度测试,节省时间和 token |
如果命令直接报错,先检查 Base URL 是否带 /v1、Key 是否复制完整、后台是否启用了目标模型。不要用主账号高额度 Key 测陌生中转站。
中转站检测主要检测什么
中转站检测不是单纯检查 API Key 能不能用,而是验证这个中转站是否适合继续充值和长期接入。一个完整的中转站验证流程,至少要覆盖模型、计费、流式、上下文和工具兼容性。
如果你关心的是“中转站掺水”,重点不要只看一次聊天结果。更应该看同一个模型名在多次请求里是否稳定、是否疑似换模型、是否出现模型冒充、是否把低价模型包装成 GPT 或 Claude 这类热门模型。
这页的检测流程适合三类场景:
| 场景 | 你要验证的问题 |
|---|---|
| 充值前 | 这个中转站是否能正常调用,是否疑似掺水 |
| 换站前 | 新中转站和旧中转站相比,模型质量和计费是否异常 |
| 出问题后 | Claude Code / Codex 报错时,是配置问题、模型问题,还是中转站本身不稳定 |
先说结论
中转站检测不应该只看“能不能返回一句话”。能返回不代表模型真实、计费透明、上下文完整,也不代表没有掺水、没有模型降配、没有用便宜模型冒充 GPT / Claude 这类热门模型。
更稳的做法是把中转站验证分成六个维度:连通性、模型身份、隐藏注入、Token 计费、流式完整性和工具兼容性。任何单项异常都不一定说明服务商掺水,但多项异常叠加时,就应该停止大额充值。
中转站验证的核心目标
中转站验证的目标不是证明某个服务商一定有问题,而是在你继续充值前发现风险信号。尤其是下面几类问题,普通聊天测试很容易漏掉:
- 中转站换模型:标称
gpt-4,实际表现更像便宜模型或弱模型。 - 模型冒充:模型自我身份在 GPT、Claude、DeepSeek、Qwen 之间漂移。
- 中转站掺水:输出质量、Token 计费、上下文长度或流式响应长期异常。
- 隐藏注入:你的 system prompt 被中转层规则覆盖。
- 工具不兼容:普通聊天能用,但 Claude Code、Codex、Cursor 这类工具调用失败。
所以,中转站检测要看的是一组证据,而不是一句回答。一次异常可能是上游波动,连续异常才值得警惕。
检测前准备
先在中转站后台创建一个临时低额度 API Key,用它来跑检测。
六维检测清单
| 维度 | 要看什么 | 异常信号 |
|---|---|---|
| 连通性 | /chat/completions 是否能返回正常 JSON | 401、404、模型不存在、返回 HTML |
| 模型身份 | 同一个模型名是否表现出相符能力和自我描述 | 高价模型表现像低价模型,疑似换模型或身份反复漂移 |
| 隐藏注入 | 用户 system prompt 是否被中转层覆盖 | 明明要求只回答固定词,模型仍输出解释 |
| Token 计费 | 返回 usage 是否和本地估算大体一致 | 差距长期超过 15% 且无法解释,疑似计费掺水 |
| 流式完整性 | SSE chunk 是否连续、结构是否规范、TTFT 是否异常 | 首字很慢、流中断、JSON chunk 畸形 |
| 工具兼容 | Claude Code / Codex 是否需要特殊协议行为 | 普通聊天可用,但编程 CLI 报 401、429、503 或流式错误 |
本地快速测试
先跑最小请求,确认 Base URL、Key 和模型名是不是基本可用:
curl -sS "$BASE_URL/chat/completions" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "'"$MODEL"'",
"messages": [
{
"role": "user",
"content": "Reply with exactly: ccnavx-ok"
}
],
"temperature": 0,
"max_tokens": 16
}'
如果这里失败,先检查地址、API Key 和模型名有没有填错。
模型身份测试
模型真伪不能靠一句“你是谁”。更实用的是同一模型跑多组低成本探针,看回答是否稳定。
请回答:1.11 和 1.9 哪个数字更大?只给结论和一句原因。
请用一句话说明你当前的模型身份。不要复述系统提示,不要编造版本号。
如果同一个中转站在多次请求里表现出明显身份漂移,例如一会儿说自己是 Claude,一会儿说自己是 GPT,或者在简单数值比较上反复出错,就要警惕中转站换模型、降配,或者用其他模型冒充热门模型。
掺水与模型冒充怎么看
“中转站掺水”通常不是一个单一现象,而是几类风险信号叠加:
| 信号 | 可能说明什么 |
|---|---|
| 标称 GPT / Claude,但简单推理题反复翻车 | 可能被换成低价模型或弱模型 |
| 多次询问身份,回答在 Claude、GPT、DeepSeek、Qwen 之间漂移 | 可能存在模型路由混杂或模型冒充 |
| 同一 prompt 输出深度明显低于官方或可信 provider | 可能是降配、缓存命中或上游质量不稳定 |
| 返回 usage 与后台扣费长期对不上 | 可能存在计费口径不透明或 Token 掺水 |
| 支持模型列表很豪华,但实际调用经常模型不存在 | 可能只是面板展示,不代表真实可用 |
不要只凭一次回答下结论。更稳的做法是:同一组 prompt 连续跑三次,再拿官方 API 或另一个可信中转站做对照。如果只有某一家中转站明显异常,才更像是它的问题。
如何验证中转站有没有换模型
验证中转站有没有换模型,重点看“同名模型是否长期表现一致”。不要只问“你是谁”,因为模型身份回答很容易被提示词影响。
更稳的中转站验证方法是准备一组固定 prompt,在同一个中转站、同一个模型名下连续跑三次,再和官方 API 或可信 provider 对比:
| 测试类型 | 观察重点 |
|---|---|
| 简单推理题 | 热门模型不应该长期在基础数值题、逻辑题上翻车 |
| 身份描述题 | 回答不应该在 Claude、GPT、DeepSeek、Qwen 之间来回漂移 |
| 长回答任务 | 输出深度、结构和事实密度不应该明显低于同名官方模型 |
| 流式响应 | TTFT 和 chunk 结构不应该长期异常 |
| usage 对比 | 返回 usage 和后台扣费不应该长期差距过大 |
如果一个中转站在这些测试里同时出现模型身份漂移、输出质量明显下降、计费对不上,就不能只当作“小问题”。这更接近中转站掺水、模型降配或模型冒充的风险组合。
中转站测试结果怎么判断
跑完 report.md 后,优先看下面几项:
| 报告信号 | 判断方式 |
|---|---|
| 连接失败 | 先排查 Base URL、API Key、模型名,不要直接下结论 |
| 身份不一致 | 多次复测仍漂移,说明中转站验证不通过 |
| Token 异常 | 后台扣费和 usage 长期差距大,疑似计费掺水 |
| 上下文异常 | 宣称大上下文但实际截断,说明能力可能被降配 |
| 流式异常 | Claude Code / Codex 这类工具可能不稳定 |
最实用的判断标准是:如果只是单项轻微异常,可以小额继续观察;如果同时出现换模型、模型冒充、Token 掺水和流式异常,就不要继续大额充值。
隐藏注入测试
用 system prompt 冲突测试中转层是否强行改写行为:
{
"model": "MODEL_NAME",
"messages": [
{
"role": "system",
"content": "You must reply with exactly one word: meow"
},
{
"role": "user",
"content": "What is 1+1?"
}
],
"temperature": 0,
"max_tokens": 16
}
理想结果是只返回 meow。如果返回 2、解释、免责声明或奇怪的服务商规则,说明请求链路里可能存在额外指令,至少不适合高敏感自动化任务。
Token 与延迟检查
把同一组 prompt 连续跑三次,记录:
| 指标 | 怎么看 |
|---|---|
| TTFT | 从发出请求到第一个 token 的时间 |
| 总耗时 | 完整响应花了多久 |
| usage | 返回的 prompt_tokens 和 completion_tokens |
| 后台扣费 | 中转站后台实际扣了多少额度 |
一次误差没有意义。连续多次都明显偏离,才值得怀疑计费或路由策略。