主题
如何验证模型真伪
在中转/代理 API 市场,「实际提供的模型与标称不符」(模型替换、静默降级)是行业层面普遍被讨论的风险——这不针对任何特定平台,而是所有中转用户都应具备的基本核查意识。
本页给出你可以自己动手执行的验证方法。我们不替你下结论:本页不包含 Shuro 的验证结果,也不构成对任何验证结果的承诺。
核心原则
不要依赖平台的自我声明(包括 Shuro 的)。用可复现的请求自己测,并保留请求/响应记录以便对比。
方法 1:核对模型目录(/v1/models)
最基础的一步:确认你的 key 能看到的模型清单,与 支持的模型 页记载的 9 款一致。
bash
# OpenAI 协议
curl -sS 'https://shuro.vip/v1/models' \
-H 'Authorization: Bearer <您的 API Key>' \
| jq -r '.data[].id' | sort
# Anthropic 协议
curl -sS 'https://shuro.vip/v1/models' \
-H 'x-api-key: <您的 API Key>' \
-H 'anthropic-version: 2023-06-01' \
| jq -r '.data[].id' | sort同时确认响应体里回显的模型 ID 与你请求的一致:
bash
curl -sS -X POST 'https://shuro.vip/v1/messages' \
-H 'content-type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H 'x-api-key: <您的 API Key>' \
-d '{"model":"claude-haiku-4-5-20251001","max_tokens":20,"messages":[{"role":"user","content":"hi"}]}' \
| jq '.model'局限:目录和回显字段都是网关可控的元数据,一致 ≠ 后端真的是该模型。这只能排除最粗糙的问题(模型压根不存在、ID 被改写)。
方法 2:知识截止日期提问法
不同模型代际的训练数据截止时间(knowledge cutoff)不同。问一些只有较新 cutoff 才可能知道的事实性问题,观察模型是否知道 / 是否明确说「我的知识截止于 XXXX 年 XX 月」。
bash
curl -sS -X POST 'https://shuro.vip/v1/messages' \
-H 'content-type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H 'x-api-key: <您的 API Key>' \
-d '{
"model": "claude-opus-4-8",
"max_tokens": 200,
"messages": [{"role":"user","content":"你的知识截止日期是什么时候?请直接回答,不要联网。"}]
}' | jq -r '.content[0].text'对同一问题分别问「标称的新模型」和「标称的旧/小模型」,cutoff 应有代际差异。
局限:
- 模型自报的 cutoff 不完全可靠(模型可能答错自己的 cutoff)
- 网关若注入系统提示词,可能影响回答
- 更可靠的变体:不问 cutoff 本身,而是问 cutoff 前后发生的具体公开事件,看模型「知道 A 但不知道 B」的边界落在哪个时间段
方法 3:上下文长度实测
Shuro 目录标注的上下文:Claude 全系 1M(haiku 为 200K)、gpt-5.5 1.1M、gpt-5.4 系列 400K。如果后端被换成小上下文模型,长输入会直接报错或被截断。
思路:构造一个超过「疑似替身模型」上下文、但在标称上下文以内的输入,在文首埋一个 needle(暗号),在文末要求复述:
python
# pip install anthropic
import anthropic
client = anthropic.Anthropic(
base_url="https://shuro.vip",
api_key="<您的 API Key>",
)
needle = "MAGIC-TOKEN-20260708"
# 约 30 万 token 量级的填充文本(超出 200K 级模型的上限)
filler = ("这是填充文本。" * 20) + "\n"
long_doc = f"记住这个暗号:{needle}\n" + filler * 12000
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=100,
messages=[{"role": "user", "content": long_doc + "\n请只输出文首的暗号。"}],
)
print(resp.content[0].text) # 应包含 needle
print(resp.usage.input_tokens) # 核对实际计入的输入 token 数结果解读:
- 请求被接受、needle 复述正确、
usage.input_tokens与预期量级相符 → 上下文能力与标称相容 - 报「context length exceeded」类错误且输入远低于标称上限 → 值得追问
成本注意
长上下文测试按输入 token 计费,一次 30 万 token 的请求即便打在低倍率模型上也有可观成本。建议:用最低倍率模型先测(如 claude-haiku-4-5-20251001 测 200K 档)、控制 max_tokens 输出上限、测一次留档即可,不要反复跑。费用构成见 计费说明。
方法 4:用量对账
对比两套独立来源的 token 计数:
- 控制台侧:Shuro 控制台 → 「日志」→ 找到对应请求,记录其 prompt/completion token 数
- 客户端侧:SDK 响应中的
usage字段(Anthropic:usage.input_tokens/output_tokens;OpenAI:usage.prompt_tokens/completion_tokens),或本地 tokenizer 的估算
bash
curl -sS -X POST 'https://shuro.vip/v1/chat/completions' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer <您的 API Key>' \
-d '{"model":"gpt-5.4-mini","max_tokens":50,"messages":[{"role":"user","content":"用一句话介绍 TCP"}]}' \
| jq '.usage'两边数字应当基本一致(tokenizer 差异可致小幅出入)。系统性、大比例的偏差——尤其是控制台计数持续显著高于客户端回报——是值得记录并追问的信号。倍率与计费口径见 计费说明。
方法 5:行为特征横向对比(仅作辅助)
如果你同时有官方 API(或另一渠道)的访问权,可以用**相同的 prompt、相同参数(temperature=0 等)**分别请求,对比:
- 输出风格、格式习惯(如 Markdown 结构、代码风格)
- 拒答边界、安全策略措辞
- 相同任务的错误模式
局限(很大):即使是同一模型,采样随机性、系统提示词差异、版本 snapshot 差异都会造成输出不同。这个方法主观性强,只能作为其他方法的辅助佐证,单独不构成任何结论。
免责与边界
请如实理解这些方法的效力
- 上述每种方法都有局限,没有任何单一方法能 100% 证明或证伪后端模型身份;多方法交叉印证也只能提高置信度。
- 本页是方法论指引,不包含 Shuro 平台的任何验证结果(我们没有替你做过这些测试),也不构成对验证结果的承诺或担保。
- 验证结论对时间敏感:今天测过 ≠ 永远如此,重要生产用途建议定期抽测并留档。
相关页面
- 支持的模型 — 对照用的完整目录
- 计费说明 — 倍率与 token 计费口径
- 服务状态与可靠性 — 可用性自查
- new-api 平台说明 — 网关层的工作方式
