Asalebeta

如何验证模型真实性

一条通道如何证明自己真的是所售的模型、通过之后靠什么继续保持诚实,以及为此开源的两个项目。

任何人都可以声明自己在卖 claude-opus-4-5。连接是真的,usage 字段能解析,通道也确实出现在市场上——但协议里没有任何东西能证明那些 token 真的来自被声明的那个模型。把客户端改一改,悄悄把请求转发给价格只有百分之一的模型,通常的市场检查一条都不会触发。这个价差就是套利,堵住它是本页要讲的全部内容。

远程证明堵不住:没有办法证明一台陌生机器上跑的是哪个二进制。能堵住的是行为差距——向通道提出一些答案取决于生成它的模型本身的问题,再看回答像不像它声称的那个模型。

三个要分开问的问题

问题怎么回答
可用性——这条通道到底能不能应答?每一次探测都是从网关正门发出的一次普通购买。连不上的通道在这里就已经失败,后面的判断都轮不到。
真实性——它是不是所声称的模型?分难度的行为探测,打分得出判决;只要还在售,就会不预先通知地反复重跑。
计费准确性——报上来的 token 数诚不诚实?定价以服务商自己的 usage 为准,网关同时独立数一遍同一个请求,再把两个数放在一起比。

上市之前

  1. 你打开卖出开关

    客户端列出该账号能提供的每一个模型。每一个都是一条通道——(设备, 服务商, 模型) 三元组,各自独立验证:在便宜模型上拿到的判决,绝不能拿来给贵的模型背书。

  2. 平台向你买几次

    不是走后门:同一个网关、同一种派单帧、和买家请求完全相同的路径,只是被钉在你这台设备上。如果你的上游账号拒绝了这次请求,运行结果里报的就是这件事。

  3. 写下判决

    十来次短回复,进度条走一两分钟。这次运行两侧都按零结算——不扣买家的钱,也不给卖家结钱。它仍然会消耗你自己的订阅额度,而这是自查一个账号唯一该有人承担的成本。

在通过之前,买家看不到这条通道。未验证的通道不是「上线慢」,而是被设计成不在市场上;离开这个状态的唯一途径,就是平台从它这里买一次。

通过之后,靠抽检维持诚实

预告过的考试就是一场可以被应付的考试。真想作弊的卖家,只要在对话框开着的九十秒里提供真模型,之后一直给便宜的,这道门槛就只花了他一次补全的成本。

所以门槛不是安全控制,影子抽检才是:已验证的通道会在它无法预测的时刻被重新探测,走同一个正门,外层与任何一次购买完全一样——而且卖家按市价拿到这笔钱。这不是慷慨。不付钱的抽检会在收益流水里留下一个缺口,而缺口正是作弊者可以盯的标记。

已验证通道被影子抽检的流量占比1%
处于 watch、或所属账号出过拒绝判决时的占比10%
在售通道最长多久必被抽检一次(无论流量多少)72 小时
一个通过判决的有效期,过后需重新赢得7 天

时间上限和百分比一样重要。没有它,一条没有买家的通道就永远不会被检查——而「让自己在两次抽检之间没有买家」恰恰是作弊者安排得出来的事。

一次抽检还会被摊开到将近一个小时,而不是打成一梭子:二十一个请求按固定顺序连着发是一种形状,形状是可以被认出来的。

判决只在一个方向上保守

判决含义后果
Pass分数 ≥ 75,且没有硬闸门命中正常出售
Watch结论不明确,或分数偏低但没有硬证据**仍然可以卖。**抽检率提高十倍,排序下降
Reject命中硬闸门,或读数为伪造——并且估计器自身的置信度不低于 0.6该通道下架;该账号下所有通道抽检加重

一次不明确的运行不是欺诈的证据。一个在两次运行之间能整整跳一档的统计量,拿来把诚实卖家赶出市场是很糟糕的做法,所以我们不这么做:watch 对卖家的代价只有更高的抽检率,这会在几天之内把问题变成答案,而不是为一次抛硬币惩罚谁。

自动判决也从不冻结卖家未释放的收益。下架一条通道是可逆的;凭一个分数把人锁在自己余额之外则不可逆。这个手柄仍然存在,但只留给看过证据的运营人员。

决定判决的那些题目不公开

llm-verify 是公开的,这正是它的价值——任何人都可以审查它问了什么。这同时也是天花板:被探测的卖家同样能读到这套题,于是可以老老实实答这些题,而把其余流量转给更便宜的地方。节奏摊开能隐藏运行发生的时间;题目一旦躺在公开仓库里,就没有什么能隐藏它问了什么

所以真正决定判决的评分题,是在我们这一侧按每次运行的服务端随机种子现场生成的——多步推导、答案唯一且可校验,由我们本地算出而非查表得到。卖家看到的是一道他从没见过、也不会再见到第二次的题。一份固定的私有题库不过是延迟公开的公开题库;用生成而不是手写,是为了让轮换不必依赖有人记得去做。种子会写进报告,因此有争议的判决可以逐题复现。

题目刻意不是常识问答。常识问答测的是训练语料,一个语料很大的便宜模型也能过。现实中值得抓的欺诈不是把噪声当 Opus 卖——那第一道身份探测就露馅了——而是把中档模型或量化镜像当旗舰卖。这两者都能正确回答「你是谁做的」。真正区分它们的,是最难那一档他们能做对多少。

每条通道还会和同侪比

市场有一个独立工具没有的优势:它同时看到很多条在卖同一个模型的通道。于是它不必抽象地回答「这是不是 Opus」,而可以回答「这条通道的表现,和另外三十九条 Opus 通道一样吗」——后者要容易得多,也稳定得多。

只跟踪那些能穿过中继依然成立的数字:这条通道写多长、开始生成后有多快、各难度档的正确率。不涉及任何提示内容,也不包含任何能指认卖家的信息。一个模型至少要有八条通道,它的群体画像才被允许说话;偏离三个标准差以上的通道会被安排一次更深的取证式复检——而不是被拒绝。某个模型的第一个卖家、某个地区唯一的卖家、家里网特别快的那个卖家,都是离群点,但没有一个是骗子。

计费准确性

价格以上游服务商上报的 usage 为准。围绕它的一切,都是为了保证进入结算的就是那个数:

  • 网关自己也数一遍同一个请求并做对照。偏差超过 25%(且请求大于 200 token——低于这个量级估算器自身误差就占了主导)会记入卖家信誉,但不改变价格。
  • 输出以派单签名里的预算封顶。卖家报不出比平台授权更多的输出。
  • prompt 以网关自身估算的三倍封顶。超出的部分,所有计数按比例同时缩小,以保持各类 token 之间的比例。

这里的坑并不玄乎,而且错了没有声音。Anthropic 的 input_tokens 不含缓存 token,OpenAI 的 prompt_tokens 和 Gemini 的 promptTokenCount ——把两者映射到同一个字段,缓存部分就会被收两遍,而且正好收在 agent 类 prompt 最大的那一块上。Gemini 的 thoughtsTokenCount 按输出价计费,却不包含在 candidatesTokenCount 里。GPT 家族的工具列表,计费的是它被改写成的 TypeScript 声明,而不是你发过去的 JSON。一张 1024×1024 的截图在 Claude 那边是一千多 token,不是朴素估算器以为的 85。

完整细节

计量与结算逐步讲了交叉核对、封顶和结算事务。

两个项目都已开源

验证引擎和 token 计量并没有埋在平台内部。它们是独立的 crate,Apache-2.0,发布在 crates.io 上,可以对着任何端点跑——包括我们自己的。

llm-verify

面向任意 LLM 端点的黑盒真实性、计费与性能验证。七组共 40 个探测——协议契约、流式、计量与计费、通道来源、性能、模型身份、跨请求一致性——在两个相互独立的轴上打分,输出一份用浏览器打开的 HTML 报告。你可以拿它去检验自己的供应商,也可以拿来检验我们。

token-meter

覆盖 Claude、GPT 家族与 Gemini 的跨服务商 token 计量与成本核算。每一个计数都带着自己的来源,因此你永远知道手里拿的是实测还是估算——而且钱从不经过浮点数。

llm-verify 可以直接当命令行用(cargo install llm-verify,或用安装脚本),分数不及格时以非零码退出,因此拿来当 CI 门禁盯自己的供应商是开箱即用的。本平台以库的形式内嵌同一个 crate,这也是它的结果和公开工具的结果能够对得上的原因。

这套东西证明不了什么

黑盒行为检测给出的是概率,永远不是「哪套权重回答了你」的证明。直说:

  • 分辨率止于档位。同一档里相邻的版本区分不出来。
  • 一次运行只描述一个时刻。逐渐降智靠反复重跑发现,不靠单次判决。
  • 提供高于所声称档位的服务不算欺诈,不计任何风险权重。只有测出低于声称值才算。
  • 公开的题目,被探测的端点同样读得到。私有题库抬高了自适应作弊的成本,但没有把它堵死。

这是一层,而且它被设计成只是一层——上面还有给检测留出时间窗的收益释放延迟、基于日常真实流量的信誉评分,以及一个会去看离群点的人。它不是让这些变得不必要的那样东西。