CoreCode文档

选择中转

怎么检测 Claude 中转有没有掺水

最后更新:2026 年 10 月 28 日

“纯血”“满血”谁都能写在首页上。这一页讲怎么自己验证一个中转背后是不是 Anthropic 官方:哪些方法靠不住,哪些信号造不了假,以及一个可以直接跑的检测脚本。它对任何中转都适用,包括 CoreCode。

要点
  • 问模型“你是什么模型”证明不了什么:系统提示一句话就能让任何模型自称 Claude。
  • 能验证的是三种行为:Anthropic Messages 的响应格式,提示缓存写入后能读回,以及被改过的思考签名会被拒绝。
  • Anthropic 文档写明,思考块的签名被篡改或无法解密时,API 一律返回 400。
  • 检测脚本 check-relay.py 只用 Python 标准库,跑一次花几美分。
  • 它能证明上游是 Anthropic,不能证明答你的是你选的那一档模型。
  • 型号由 CoreCode 每 3 天用开源的 ModelTrace 指纹检测一次,结果和原始数据公开在本页。

常见的掺水方式

这几种方式都能正常聊天、正常写代码,只靠日常使用很难察觉。

为什么问“你是什么模型”没用

模型对自己身份的回答来自训练数据和系统提示,不是一个可靠的事实来源。中转可以在系统提示里写一句“你是 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 的 提示缓存文档。

三、思考块的签名

开启扩展思考时,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这个模型不接受思考参数,或者这次自己决定不思考,签名一项跳过。再跑一次,或换一个模型。
只接受 Claude Code 的密钥会报 ERROR有的中转只放行 Claude Code 客户端的请求,脚本发的请求会被 403 拒绝。这是客户端限制,和上游真假无关。在 CoreCode 上检测,用「Claude 满血(可外接)」分组的密钥;「仅限CC」分组的密钥会被拒。

脚本证明不了什么

判断型号: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-13 / 395%不在指纹库claude-opus-5-5
claude-haiku-5-53 / 3100%100%claude-haiku-5-5
claude-opus-5-53 / 3100%100%claude-opus-5-5
claude-sonnet-5-53 / 379%78%claude-sonnet-5-5

历次检测

日期claude-fable-5-1claude-haiku-5-5claude-opus-5-5claude-sonnet-5-5
2026-11-0195% / —100% / 100%100% / 100%79% / 78%
2026-10-31100% / —100% / 100%100% / 100%96% / 79%
2026-10-28100% / —100% / 100%100% / 100%99% / 99%

单元格为 判为 Claude / 判为该型号 的平均概率。

怎么看这张表:

挑中转时还要看哪些方面,见 Claude Code 中转站怎么选。

常见问题

问模型它是什么模型,能判断中转真假吗?

不能。模型对自己身份的回答来自训练数据和系统提示,中转在系统提示里写一句就能改,真的 Claude 也可能说错版本号。要看的是别人仿造不了的行为,见 三个造不了假的信号。

跑一次检测要花多少钱?

几美分:两次近两万 token 的缓存请求,加四次很短的请求。

能用它检测 CoreCode 吗?

能。用「Claude 满血(可外接)」分组的密钥;「仅限CC」分组只接受 Claude Code,脚本的请求会被 403 拒绝,结果是 ERROR,不说明真假。

脚本会把我的密钥发到哪里?

只发给你用 --base-url 填的地址,不连接任何其他服务。脚本是公开的,运行前可以先读一遍。

三项都 PASS,就一定是 Opus 吗?

不一定。Sonnet 生成的思考块同样有合法签名。档位要结合返回的 model 字段、账单里每条请求的模型和单价,以及复杂任务上的实际表现来判断,见 脚本证明不了什么。CoreCode 每 3 天用 ModelTrace 检测一次各模型的型号,见 定期检测。