你买的中转站真的是 GPT-6 吗?我写了个不问“你是什么模型”的检测工具

164 阅读2分钟

起因

花 GPT-6 的钱,拿到 GPT-5.6 Luna 甚至蒸馏小模型的输出——这事在中转站圈子里不算新鲜。

市面上的检测工具(比如 model-check 那一类)做的是验证:先问对方"你是什么模型",拿到声明之后,再围绕这个声明做一致性核对。这个思路有个天然缺口——声明本身是对方给的。对方声明撒谎,或者只在被测试的那几个请求上走真模型,验证就失效了。

所以我换了个方向:不做验证,做识别。不依赖任何声明,纯从行为上取证。

六路探针

每一路都是独立证据,按可靠性加权投票:

探针原理权重
分词器指纹固定中英文语料的 prompt_tokens 比值,不同家族分词器的差异是物理级的,极难伪装最高
陷阱题库temp=0 下不同代际模型必对/必错题(strawberry 里几个 r、9.11 vs 9.9)高
流式 TPOT流式输出首字延迟与 token/秒分布,小模型明显更快低(可被降速伪装)
自我披露随机措辞 + 多语言问身份,防固定话术背板最低
知识截止用不同年份的事件切边界中
Function calling工具调用格式完整性与参数约束遵守度中

输出不是黑白结论,而是候选排名 + 置信度:

gpt-5.6-luna    61%  ████████████
gpt-5.6-sol     22%  ████
deepseek-v4.1   10%  █
结论:❌ 不一致(疑似换壳)

用法

单文件 Go,零依赖,Windows 下 exe 下载即跑:

modelspy-windows-amd64.exe -base https://你的中转/v1 -model gpt-6-astra

常用参数:

  • -expect gpt-6-astra 声明期望模型(缺省取 -model)
  • -probes fp,trap,tpot 只跑指定探针,省 token
  • -html report.html 输出可视化报告
  • -json 机器可读输出
  • 退出码 0=一致 1=不一致 3=证据不足,可以直接挂到 cron 做常驻抽测

已打包成 Agent Skill

npx skills add 3378925604-a11y/modelspy

OpenCode / Claude Code / Codex / Gemini CLI / Qoder 都能装,装完直接对 Agent 说"测一下这个中转站跑的什么模型"。

诚实声明(很重要)

  • v0.1 的指纹库是社区种子数据,低置信度请多跑几轮再下判断;
  • 同家族模型(GPT-6 与 GPT-5.6)分词器相同,主要靠题库和速度区分,容易混淆;
  • 中转可以"只对疑似测试的请求走真模型",单轮抓不住,需要多轮抽样;
  • 这工具的定位是取证辅助,不是判决书。

求 star、求校准数据

internal/db/db.json 里的特征区间是最有价值的贡献——多跑几个中转站,把结果提 PR 回来,指纹库就能更准。

github.com/3378925604-…