起因
花 GPT-6 的钱,拿到 GPT-5.6 Luna 甚至蒸馏小模型的输出------这事在中转站圈子里不算新鲜。
市面上的检测工具(比如 model-check 那一类)做的是验证 :先问对方"你是什么模型",拿到声明之后,再围绕这个声明做一致性核对。这个思路有个天然缺口------声明本身是对方给的。对方声明撒谎,或者只在被测试的那几个请求上走真模型,验证就失效了。
所以我换了个方向:不做验证,做识别。不依赖任何声明,纯从行为上取证。
六路探针
每一路都是独立证据,按可靠性加权投票:
| 探针 | 原理 | 权重 |
|---|---|---|
| 分词器指纹 | 固定中英文语料的 prompt_tokens 比值,不同家族分词器的差异是物理级的,极难伪装 |
最高 |
| 陷阱题库 | temp=0 下不同代际模型必对/必错题(strawberry 里几个 r、9.11 vs 9.9) | 高 |
| 流式 TPOT | 流式输出首字延迟与 token/秒分布,小模型明显更快 | 低(可被降速伪装) |
| 自我披露 | 随机措辞 + 多语言问身份,防固定话术背板 | 最低 |
| 知识截止 | 用不同年份的事件切边界 | 中 |
| Function calling | 工具调用格式完整性与参数约束遵守度 | 中 |
输出不是黑白结论,而是候选排名 + 置信度:
erlang
gpt-5.6-luna 61% ████████████
gpt-5.6-sol 22% ████
deepseek-v4.1 10% █
结论:❌ 不一致(疑似换壳)
用法
单文件 Go,零依赖,Windows 下 exe 下载即跑:
bash
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
bash
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 回来,指纹库就能更准。