打开网易新闻 查看精彩图片

你有没有想过这样一件事:你在某个第三方平台上调用了一个号称是"DeepSeek"或者"Kimi K2"的API,付了钱,拿到了回复,但你有没有办法知道,服务器那头跑的真的是官方原版模型,还是一个被悄悄换成低精度、甚至完全不同的替代品?

这不是杞人忧天。

大模型的开源权重现在越来越多,但开源不等于好部署。腾讯朱雀实验室这篇论文里提到一个很扎实的例子:Kimi K2的官方部署指南写得清清楚楚,就算用FP8这种压缩过的精度、128K的上下文长度,跑在H200或者H20这样的顶级显卡上,最小部署单元也要16块GPU。这已经不是普通公司能承受的门槛了。于是大量开发者选择走第三方推理API这条路,把模型执行这件事,交给了一个自己看不见、摸不着的黑箱。

问题就出在这个黑箱上。

你请求的是模型A,但服务器背后跑的可能是模型A的旧版本、便宜的替代品、量化压缩过的版本,甚至完全是另一个模型。你能看到的,只有一段返回的文字和厂商自己写的一些元数据。这就好比你在网上订了一份"澳洲和牛牛排",送到手里的东西看起来也是牛肉,也是煎的,但你没法用眼睛判断这到底是不是真的和牛,还是普通牛肉经过厨师的技巧处理冒充的。如果没有一种独立于卖家的检验手段,你唯一能做的就是相信标签。而这篇论文要做的,就是给这份"牛排"配一套第三方检测方法。

核心问题:黑箱里到底藏着什么

这篇论文提出的问题很直接:能不能只靠黑箱式的API查询,就测出一个第三方部署和官方原版之间的行为差异?

这里有个概念要先说清楚。

> 部署验证(deployment verification):不是去证明谁拥有模型的所有权,而是测试一个托管的API端点,在声称的配置下,是否表现得和一个可信的参照部署一样。

这个问题之所以难,在于黑箱测试有天然的局限性。你只能看到输出的文字,看不到模型内部到底用了什么精度、什么解码策略、走的是哪条服务器路由。而供应商完全可以在你看不见的地方做手脚,从良性的工程优化,到恶意的偷工减料,中间的灰色地带非常宽。

论文把供应商可能存在的问题行为分成了五个层次,一层比一层更难对付。

最温和的一种叫做操作性偏差,厂商确实用了声称的模型权重,只是在推理引擎、批处理方式、数值计算内核这些细节上和官方不完全一致。再往上一层是未声明的量化,厂商把模型压缩成了更省资源的低精度版本,比如FP8甚至更激进的FP4,却没有告诉你。

> 量化(quantization):把模型内部原本用高精度数字(比如32位浮点数)表示的参数,压缩成更省内存和算力的低精度数字(比如8位甚至4位)表示的技术,会在效率和精度之间做取舍。

再往上是间歇性的质量退化,这种情况更狡猾。厂商可能维护了一堆配置不完全一致的服务器副本,大部分时间用的是接近官方效果的机器,但偶尔会切换到一个明显缩水的配置上去。这种情况下,你如果只测一次平均效果,很可能完全发现不了问题,因为大部分请求还是正常的,只有少数几次踩到了那台"缩水机器"。

第四层是模型替换或者元数据伪造,厂商干脆用了另一个模型来处理你的请求,但在返回的元数据里依然写着你请求的那个模型名字。第五层,也是最难缠的一层,叫自适应选择性路由

> 自适应选择性路由(adaptive selective routing):厂商在后台部署一个分类器,先判断进来的这个请求像不像是审计探测,如果像,就老老实实用真模型服务;如果不像,就悄悄换成便宜的替代模型。

这一层之所以致命,是因为它直接打破了固定题库审计的有效性。论文里给出一个很简洁的数学表达:如果你的审计只用一个公开的、固定的问题集合S,供应商只要建一个"字典分类器",判断请求是否落在S里,就能完美绕过你的检测。你换个思路用隐藏的题库?没用,只要这些题目被泄露过、被反复观察过,或者被对手用某种方式重建出来,隐藏集合迟早会变成已知集合。已经有研究证明,这种基于指纹识别的检测方法,是可以被专门训练出来的模仿模型给"钓鱼"绕过的。

这就好比你想抽查一家工厂的产品质量,如果你每次都是提前打电话预约、亮明检查员身份再进厂检查,那工厂完全可以在你来之前把生产线切换成最好的那条。真正有效的抽查,得让工厂猜不到你什么时候来、以什么身份来。而这篇论文老实承认了:目前没有任何黑箱审计方法能彻底解决这个"猜不到"的问题,包括他们自己的方法。这是个诚实但残酷的结论。

Ventor-QTest:两把不同的尺子

面对这么复杂的威胁模型,研究团队没有指望用一个数字就把所有问题概括清楚,而是设计了两套互补的检测机制,分别叫AFL和EFL。

先说AFL这一路,它对应的是"平均水平"这个维度。

> AFL(Average Fidelity Loss,平均保真度损失):把同一个冻结的上下文重复发送给目标API很多次,统计返回文本落在各个预设类别中的比例,重建出目标模型的输出分布,再和可信参照模型的输出分布做对比,得出的一个经过统计偏差校正的KL散度指标。

这里有个关键的工程巧思:整个AFL的计算只需要目标API返回普通文本,完全不需要目标API暴露内部的对数概率(logprob)。

> 对数概率(logprob):模型在生成每个词的时候,对候选词汇打出的概率分数的对数值,很多商业API出于成本或安全考虑,根本不对外提供这个数据。

为什么要坚持只用文本?因为如果审计方法依赖对方主动暴露内部概率,那这个方法从一开始就注定用不上大多数商业API,大部分厂商压根不会给你这种数据。这就好比你想验证一家餐厅用的是不是新鲜食材,但你不能指望厨房主动把库存清单摆在你面前给你看,你只能通过反复点同一道菜、观察它每次的味道、颜色、分量有没有变化,来推断后厨到底发生了什么。

具体怎么把重复请求的返回文本变成一个统计量呢?论文的做法是先向可信参照模型问一次,拿到该问题下各个类别答案的真实概率分布,作为"标准答案"的概率基准。然后向目标API发送同样的问题50次,统计每种回答出现的次数,重建出目标模型实际的回答分布。这两个分布之间的差距,用一种叫Dirichlet后验校正的统计手法算出一个"偏差校正后的KL散度",这就是AFL的核心。

这里之所以要做"偏差校正",是因为哪怕目标模型和参照模型完全一致,因为样本量有限(只测了50次),统计上也会天然产生一个大于零的虚假差异,如果不校正,会冤枉一个完全正常的模型。研究团队专门用两万次模拟计算出这个虚假基线,再从实际观测值里减掉。这就像你去称体重,秤本身有个零点误差,你得先站上去看看空秤读数是多少,再把这个数从后面每次称重结果里扣掉,不然你永远搞不清楚到底是你真的胖了还是秤本身不准。

AFL回答的是"平均而言这个模型偏了多少",但它有个天然的盲区,如果一个模型99%的时候表现正常,只有1%的时候严重跑偏,平均下来这个偏差值可能小到根本看不出来。这就是EFL要解决的问题。

> EFL(Extreme Fidelity Loss,极端保真度损失):通过让目标模型独立生成多段完整的长序列文本(每段500个位置),用可信参照模型对每个位置重新打分,计算出一种叫"中心化惊奇度"的偏差指标,然后观察这些偏差值里最极端的那些(也就是分布的"上尾"),来捕捉平均值掩盖不了的偶发性严重偏离。

EFL的核心统计量叫做"中心化参照惊奇度",公式看起来复杂,但道理很朴素:在每一个生成的位置上,参照模型会告诉你"如果是我来生成,我觉得下一个词应该是什么,各种可能性的概率分别是多少"。目标模型实际生成的那个词,如果落在参照模型认为极不可能的区域,这个位置的"意外程度"就很高。把整段500个位置的意外程度求平均、取绝对值,就得到这一次完整生成的偏差分数。跑20次独立的生成过程,你就得到20个偏差分数,这20个数字的分布,尤其是最大的那几个,就是EFL要报告的内容。

这就好比你要判断一个出租车司机开车靠不靠谱。如果只看他一年下来的平均车速,可能完全正常,毕竟大部分时间都在正常巡航。但如果你把他每一次急刹车、每一次危险变道的记录单独拎出来看,你会发现有那么几次险些出事故的瞬间,这些瞬间才是真正决定乘客安全与否的关键,而不是那个看起来人畜无害的平均车速。如果只报告平均值,那种偶发性但代价极高的偏差就会被完全掩盖掉。

论文特意强调,AFL和EFL的单位不一样,衡量的东西也不一样,绝对不能把两者加权求和变成一个综合分数。这个设计决策背后的逻辑其实挺深刻:如果你强行把两个物理意义不同的量捏合成一个数字,你就永远没法回答"这个模型到底是平均水平差,还是偶尔抽风"这种关键问题,而这两种问题对应的补救措施可能完全不同。

实测结果:三家平台联手验证一致性,七条线路测出差异

方法讲完了,数据说话。

研究团队先做了一个内部一致性检验:在三个同时支持暴露对数概率的路由条件下(官方自检、StreamLake、DigitalOcean),把纯文本重建出来的AFL指标,和直接用对数概率算出来的KL散度对比值放在一起看,两者相关性有多高。

结果显示,去除上下文本身差异之后,两者的皮尔逊相关系数达到0.971,这是一个非常强的线性一致性。如果按路由先做平均再比较,相关系数更是达到0.989,且排序完全一致。不过论文很诚实地指出,因为符合条件的路由样本量太少(只有3的阶乘等于6种排列组合),这个结果只能算描述性的证据,还谈不上统计学意义上的确证。这种严谨态度值得点个赞,很多论文喜欢把描述性的相关性包装成"证明了什么",这篇没有这么做。

接下来是核心的七路由审计。用12个固定的问题上下文,对官方自检和六个第三方路由(阿里云、火山方舟Ark、百度千帆、StreamLake、DeepInfra的FP8版本、DigitalOcean)分别测了AFL。

| 路由 | AFL值(越接近0越好) | 95%置信区间 | 是否被拒绝一致性假设 |

| 官方自检 | **-0.0007** | [-0.0144, 0.0193] | 否,符合预期 |

| 阿里云0731 | 0.5704 | [0.4710, 0.6765] | 是 |

| 火山方舟0731 | 0.1591 | [0.1129, 0.2071] | 是 |

| 百度千帆0731 | 0.1875 | [0.1456, 0.2365] | 是 |

| StreamLake | 0.2950 | [0.2364, 0.3533] | 是 |

| DeepInfra FP8 | 0.1185 | [0.0782, 0.1611] | 是 |

| DigitalOcean | 0.1250 | [0.0789, 0.1766] | 是 |

结果很清楚:官方自我检测的AFL值几乎为零,符合预期,毕竟自己测自己应该没有偏差。而全部六个第三方路由,在经过多重比较校正之后,全部拒绝了"和官方一致"这个原假设。也就是说,这六家第三方部署,在这12个固定问题上,行为都和官方存在统计学意义上的显著差异。

论文很谨慎地补充了一句:这只能说明在这12个具体问题、这个具体的采样窗口下存在不一致,并不能证明是哪个环节出了问题,可能是量化,可能是解码策略不同,也可能只是无害的工程差异。这种克制其实是这类审计工具应有的态度,因为黑箱测试天生没法告诉你"为什么",只能告诉你"有没有"。

EFL这边的结果更有意思,因为它揭示出一个AFL完全看不到的现象。

| 路由 | 中位数D500 | 标准差 | 95%分位数 | 最大值 |

| 官方自检 | 0.00545 | 0.00835 | 0.02484 | 0.03498 |

| 阿里云0731 | 0.00754 | 0.00819 | 0.02190 | 0.02924 |

| 火山方舟0731 | 0.00679 | 0.00881 | 0.02633 | 0.02901 |

| 百度千帆0731 | 0.00612 | **0.00534** | **0.01693** | **0.01975** |

| StreamLake | **0.00409** | 0.01390 | 0.04817 | 0.04969 |

| DeepInfra FP8 | 0.00517 | 0.00806 | 0.01996 | 0.03497 |

| DigitalOcean | 0.00876 | 0.01676 | 0.05414 | 0.05960 |

看这张表你会发现一件很反直觉的事:StreamLake的中位数是所有路由里最低的,看起来是最"稳"的一个,但它的标准差和上尾分位数却是全场第二高,仅次于DigitalOcean。这意味着StreamLake绝大多数时候表现得比谁都规矩,但一旦它抽风,抽得比大部分对手都狠。

这就是论文反复强调"AFL和EFL不能混为一谈"的原因所在。如果你只看AFL或者只看中位数,StreamLake和DigitalOcean看起来是完全不同性质的问题,一个像是持续性的轻微偏差,一个像是路由不稳定导致的间歇性大偏差。这两种问题,运维排查的方向完全不一样。

DigitalOcean在这张表里的四项EFL指标(中位数、标准差、95分位数、最大值)全部是七个路由里最高的,论文还额外做了一个探索性复测:又单独跑了四批DigitalOcean的AFL,得到的数值是0.12505、0.13667、0.12092、0.14797,均值0.13265。虽然样本量只有4,不足以下结论,但这个数字已经足够引出下一个更有价值的发现。

下游任务:极端偏差在长任务里现出原形

前面所有的AFL、EFL都是在"文本生成"这个抽象层面测出来的指标,那它们跟实际干活的能力有没有关系?

论文拿两个基准测试来做交叉验证。一个是GPQA-Diamond,198道研究生水平的高难度选择题;另一个是Terminal-Bench 2.1,89个需要多步骤操作命令行完成的真实任务,用到的执行代理是Terminus-2。

> GPQA-Diamond:一个专门筛选出"谷歌搜不到答案"的高难度学术问答题库的最高质量子集,用来测试模型的知识和推理能力。

> Terminal-Bench:一套评估AI智能体在命令行环境里完成复杂任务能力的基准,任务通常涉及多轮操作、文件读写、程序调试等,属于长链条、需要连续正确决策的场景。

在GPQA-Diamond上,七个路由的准确率范围是69.7%到74.7%,区间高度重叠,AFL和EFL跟准确率之间几乎测不出统计学上的关联(皮尔逊相关系数只有0.347,还不显著)。这个结果初看有点让人意外,既然模型行为都偏了,为什么答题能力没受影响?

但转到Terminal-Bench上,画风完全变了。

DigitalOcean,也就是EFL最极端的那个路由,在Terminal-Bench上的整体通过率只有37.1%,是七个路由里最低的。更关键的是研究团队做的一个探索性分析:他们按照"同一个任务在其他五个匹配路由上平均需要多少次模型请求"给89个任务划分了难度分区,从最短的Q1到最长的Q4。

| 任务复杂度分位 | DigitalOcean通过率 | 对照组通过率 | DigitalOcean超时次数 |

| Q1(最短任务) | **82.6%** | 76.5% | 4 |

| Q2 | 31.8% | 62.7% | 10 |

| Q3 | 18.2% | 37.3% | 16 |

| Q4(最长任务) | 13.6% | 28.2% | 17 |

这张表看得人很有感触。在最短的任务上,DigitalOcean的表现甚至比对照组还要好一点点,82.6%对76.5%。可是一旦任务变长,需要更多轮次的模型决策,它的通过率就断崖式下跌,到最长的那批任务只剩13.6%,是对照组28.2%的一半都不到。而且它失败的56个任务里,有47个(84%)都是超时错误,不是答错了,是压根没跑完。

这背后的道理其实不难理解。一个任务需要模型连续做10次正确决策才能成功,如果每一次决策都有一个很小的概率遭遇"极端偏差"(也就是EFL捕捉到的那种偶发性大幅跑偏),那么任务越长,累积遇到至少一次跑偏的概率就越高。这就好比你在玩一个闯关游戏,每一关都有1%的概率因为系统卡顿直接判负。如果只闯一关,你几乎感觉不到这个风险的存在;但如果要连续闯十关才能通关,那种"总有一关会踩坑"的概率会指数级放大。GPQA-Diamond是一次性回答,相当于只闯一关,EFL的影响被稀释到看不见;Terminal-Bench是连续多轮操作,相当于闯十几关连续通关,EFL的杀伤力就被放大出来了。

论文用一个很严谨的统计检验支撑了这个观察:Q4分区里失败任务的模型请求次数中位数是36.5次,而成功任务只有11次,单边曼-惠特尼检验的p值是3.87乘以10的负7次方,这是个极小的数字,意味着"失败任务往往涉及更多轮请求"这个关联几乎不可能是巧合。同时,Q4分区相对Q1分区的通过率差距,经过两万次自助法重采样验证,95%置信区间落在负36.0到负4.5个百分点之间,单边显著性检验的p值只有0.0059。

不过论文也非常克制地承认,这只是一种"巧合性观察",因为审计探测和基准测试是分开两个时间窗口跑的,没有做到时间同步采集,所以没法百分之百确定是同一批服务器状态导致的因果关系。这种老老实实的边界感,在很多急于炒作结果的论文里是看不到的。

写在后面

读完这篇论文,最让我意外的其实不是方法本身,而是那个GPQA和Terminal-Bench表现分道扬镳的现象。

一个模型的服务质量出了问题,你以为它会在所有任务上都表现得差一点,但实际情况是它在短任务上几乎看不出异常,只有在长链条任务里才现出原形。这提醒我们一件容易被忽略的事:如果你只用一次性问答类的评测去验收一个第三方API的质量,你很可能会漏掉它在真正需要多轮协作、长时间运行的智能体场景下的隐患。而现在越来越多的AI应用恰恰是往这个方向走的,写代码、跑测试、多步骤操作系统。

另一个值得琢磨的细节是论文对"自适应选择性路由"这个终极威胁的坦诚态度。他们没有假装自己的方法能解决这个问题,反而花了大段篇幅讨论固定题库审计如何被"字典分类器"攻破,隐藏题库如何随时间推移变成公开题库。这种承认自身局限的写法,比很多号称"完美检测"的论文要靠谱得多。

一个开放的问题是:如果第三方厂商真的具备完美识别审计流量的能力,那这场攻防游戏是不是注定没有终点?还是说,真正的解法根本不在黑箱测试这个层面,而要靠密码学层面的远程认证机制才能一劳永逸?

Q&A

Q1:Ventor-QTest是什么?

A:Ventor-QTest是腾讯朱雀实验室提出的一套黑箱审计方法,用来检测第三方托管的大模型API是否和官方声称的模型行为一致,它不需要目标API暴露内部概率数据,只靠重复请求返回的文本就能完成检测。

Q2:AFL和EFL有什么区别?

A:AFL衡量的是模型平均层面的偏差,通过重复发送同一个问题多次统计出来;EFL衡量的是模型偶发性的极端偏差,通过多次独立生成长文本并观察最坏情况捕捉出来。两者衡量的维度不同,不能合并成一个数字。

Q3:为什么第三方API在简单问答上表现正常,但在复杂任务上会失败?

A:论文发现EFL指标越高的路由(比如DigitalOcean),在需要连续多轮操作的Terminal-Bench任务上通过率下降明显,任务越长下降越厉害,而在一次性问答的GPQA-Diamond上几乎看不出差异,这可能是因为长任务需要连续多次正确决策,偶发的极端偏差会随任务链条变长而累积影响。