选择中转
怎么检测 Claude 中转有没有掺水
“纯血”“满血”谁都能写在首页上。这一页讲怎么自己验证一个中转背后是不是 Anthropic 官方:哪些方法靠不住,哪些信号造不了假,以及一个可以直接跑的检测脚本。它对任何中转都适用,包括 CoreCode。
- 问模型“你是什么模型”证明不了什么:系统提示一句话就能让任何模型自称 Claude。
- 能验证的是三种行为:Anthropic Messages 的响应格式,提示缓存写入后能读回,以及被改过的思考签名会被拒绝。
- Anthropic 文档写明,思考块的签名被篡改或无法解密时,API 一律返回 400。
- 检测脚本 check-relay.py 只用 Python 标准库,跑一次花几美分。
- 它能证明上游是 Anthropic,不能证明答你的是你选的那一档模型。
- 型号由 CoreCode 每 3 天用开源的 ModelTrace 指纹检测一次,结果和原始数据公开在本页。
常见的掺水方式
- 换模型。你选 Opus,实际答你的是更便宜的 Sonnet、Haiku,或者别家的模型。
- 不走官方 API。上游是网页版或客户端的逆向接口,上下文被截短,工具调用和缓存不完整。
- 用量自己算。返回的 token 数和缓存数是中转按自己的规则填的,不是 Anthropic 给的,账单因此对不上。
这几种方式都能正常聊天、正常写代码,只靠日常使用很难察觉。
为什么问“你是什么模型”没用
模型对自己身份的回答来自训练数据和系统提示,不是一个可靠的事实来源。中转可以在系统提示里写一句“你是 Claude Opus”,任何模型都会照着说;真的 Claude 也可能说错自己的版本号。所以“问身份”“问知识截止日期”“看回复的语气”都只能当参考,不能当证据。
可靠的办法是找 Anthropic 官方 API 才有、而且别人仿造不了的行为。
三个造不了假的信号
一、响应格式与用量字段
官方 Messages 接口返回 type: "message",id 以 msg_ 开头,usage 里有 input_tokens、output_tokens,用缓存时还有 cache_creation_input_tokens 和 cache_read_input_tokens。把别家模型转成这个格式不难,所以这一项只能筛掉最粗糙的转换,是后两项的前提。
二、提示缓存能写进去,也能读出来
发一段近两万 token、带 cache_control 的系统提示,第一次应当看到 cache_creation_input_tokens,紧接着发同样的请求,应当看到差不多同样多的 cache_read_input_tokens。这两个字段的含义见 Anthropic 的 提示缓存文档。
- 两次都是 0:上游不支持 Anthropic 的提示缓存,或者用量是中转自己算的。
- 写入了但一直读不到:请求很可能每次落在不同账号上。上游也许是真的,但缓存几乎不会命中,Claude Code 的花费会高很多,原因见 缓存与计费。
三、思考块的签名
开启扩展思考时,Anthropic 给每个思考块附一个加密签名 signature。下一轮把思考块原样传回去时,官方 API 会校验这个签名,被改过就以 400 拒绝。别家模型生成不出能通过校验的签名,转换层也没有 Anthropic 的密钥来校验它。Anthropic 文档的说法是:API 用签名来验证思考块是由 Claude 生成的(Thinking),被篡改或无法解密的签名一律返回 400(Preserved thinking)。
检测方法:拿到一个带签名的思考块和工具调用,把签名改掉一个字符传回去,应当被拒;原样传回去,应当通过。改过的签名也能通过,就说明没有人在校验,上游不是 Anthropic。
检测脚本
上面三项写成了一个脚本:check-relay.py。只用 Python 3.8+ 标准库,不装任何依赖,密钥只发给你填的地址。先打开看一遍再运行。源码、测试和问题反馈在 GitHub:CoreCodeAI/claude-relay-check。
curl -fsSLO https://corecode.live/docs/verify/check-relay.py
python3 check-relay.py --base-url https://中转地址 --key sk-你的密钥 --model claude-sonnet-5-5
不填 --base-url 和 --key 时,读环境变量 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN,也就是 Claude Code 正在用的配置。中转要求 Authorization: Bearer 时加 --bearer。一次检测大约花几美分:两次近两万 token 的缓存请求,加四次很短的请求。
https://中转地址/v1/messages model=claude-sonnet-5-5
[PASS] shape Messages 格式正确,返回模型 claude-sonnet-5-5,输入 143 token
[PASS] cache 首次写入 17755 token,第 2 次读取 17755 token
[PASS] signature 篡改签名被拒(HTTP 400),原样回传通过
结论:三项都像 Anthropic 官方
| 结果 | 含义 |
|---|---|
PASS | 这一项符合 Anthropic 官方 API 的行为。 |
WARN | 有疑点但不能定性,比如缓存写入了却读不到。 |
FAIL | 这一项说明上游不是 Anthropic 官方,或者用量不是真实的。退出码 1。 |
ERROR | 请求本身失败(连不上、密钥无效、余额不足、客户端被拒),检测没有完成,不说明真假。退出码 2。 |
SKIP | 这个模型不接受思考参数,或者这次自己决定不思考,签名一项跳过。再跑一次,或换一个模型。 |
403 拒绝。这是客户端限制,和上游真假无关。在 CoreCode 上检测,用「Claude 满血(可外接)」分组的密钥;「仅限CC」分组的密钥会被拒。脚本证明不了什么
- 证明的是“上游是 Anthropic”,不是“上游是你选的那一档”。Sonnet 生成的思考块同样有合法签名。档位要结合返回的
model字段、账单里逐条记录的模型和单价,以及复杂任务上的实际表现来判断。CoreCode 自己的检测见 定期检测。 - 只是一次抽样。中转可以只在部分时段或部分请求上换模型。过一段时间再跑一次,比只跑一次更有说服力。
- 不衡量稳定性。成功率和延迟要看服务的历史记录,比如 CoreCode 的 服务状态。
判断型号:CoreCode 的定期检测
上面三个信号能证明上游是 Anthropic,判断不了是哪个型号。型号这一项,我们用开源工具 ModelTrace 定期检测自己。它让模型连续写出几百个 1 到 355 之间的整数,每个模型偏爱的数字不一样;ModelTrace 把数字的分布和它收录的 18 个 GPT、Claude 模型的指纹比对,算出最可能是哪一个。
服务器每 3 天检测一次:用一个「Claude 满血(可外接)」分组的密钥,每个 Claude 模型测 3 轮,每轮 3 条回答,下表在检测后自动更新。两个分组用的是同一批账号。不从「仅限CC」分组测,是因为它只放行带 Claude Code 系统提示的请求,而 ModelTrace 的作者说明,这段提示会让结果偏差很大。
最近一次检测:2026-11-01 19:17 UTC,每个模型 3 轮,每轮 3 条回答。每条提示和回答都在 2026-11-01.json 里,可以用 ModelTrace 自己重算。
| 模型 | 有效轮数 | 判为 Claude | 判为该型号 | 最像的型号 |
|---|---|---|---|---|
claude-fable-5-1 | 3 / 3 | 95% | 不在指纹库 | claude-opus-5-5 |
claude-haiku-5-5 | 3 / 3 | 100% | 100% | claude-haiku-5-5 |
claude-opus-5-5 | 3 / 3 | 100% | 100% | claude-opus-5-5 |
claude-sonnet-5-5 | 3 / 3 | 79% | 78% | claude-sonnet-5-5 |
历次检测
| 日期 | claude-fable-5-1 | claude-haiku-5-5 | claude-opus-5-5 | claude-sonnet-5-5 |
|---|---|---|---|---|
| 2026-11-01 | 95% / — | 100% / 100% | 100% / 100% | 79% / 78% |
| 2026-10-31 | 100% / — | 100% / 100% | 100% / 100% | 96% / 79% |
| 2026-10-28 | 100% / — | 100% / 100% | 100% / 100% | 99% / 99% |
单元格为 判为 Claude / 判为该型号 的平均概率。
怎么看这张表:
- 结论只在指纹库的候选里成立。库里没有的模型也会被归到最像的那一个。
claude-fable-5-1不在库里,“判为该型号”一栏写“不在指纹库”,只能看它是不是 Claude。 - 单轮会波动,表里是 3 轮的平均。2026 年 10 月 28 日第一次试测时,
claude-sonnet-5-5有一轮判为 Claude 的概率只有 63%,同一天另外两轮都是 100%。 - ModelTrace 的作者也说结果仅供参考。它的 Claude 指纹采集自第三方中转 OAIPro,不是 Anthropic 官方 API。它补的是签名检测说不清的型号问题,替代不了上面三个信号。
- 可以自己测。打开 ModelTrace 网页版,把它给的三条挑战发给模型,再把回答贴回去;或者在本地运行 ModelTrace,用 API 自动测试填
https://corecode.live和一个「可外接」分组的密钥。表上方链接的原始数据里有每条提示和回答,也可以拿去重新打分。
挑中转时还要看哪些方面,见 Claude Code 中转站怎么选。
常见问题
问模型它是什么模型,能判断中转真假吗?
不能。模型对自己身份的回答来自训练数据和系统提示,中转在系统提示里写一句就能改,真的 Claude 也可能说错版本号。要看的是别人仿造不了的行为,见 三个造不了假的信号。
跑一次检测要花多少钱?
几美分:两次近两万 token 的缓存请求,加四次很短的请求。
能用它检测 CoreCode 吗?
能。用「Claude 满血(可外接)」分组的密钥;「仅限CC」分组只接受 Claude Code,脚本的请求会被 403 拒绝,结果是 ERROR,不说明真假。
脚本会把我的密钥发到哪里?
只发给你用 --base-url 填的地址,不连接任何其他服务。脚本是公开的,运行前可以先读一遍。