你在中转站选的模型可能被偷偷调包:输入一个随机数,就能验明正身

同一个模型两次采样的指纹距离中位数是 0.140;一个被宣传为自研专有旗舰的接口,与开源 Qwen 的距离是 0.141。意思是:它跟开源 Qwen 根本分不出来。
作者:arXiv07-20 · 11 分钟⚑ 研究论文
🎧 听播客版0:00 / --:--
0:00 / --:--
研究解读 · 小互解读
一分钟速览
  • 你从中转商或聚合平台买 AI,点的是一个名字,收到的是一段文字,中间没有任何东西能证明回答你的就是你选的那个。已经有人查过 31 个卖 Llama 的商用接口,11 个的输出跟厂商放出来的模型对不上。
  • 验它的办法只要一句话:反复让它「说个 1 到 100 的随机数」,它翻来覆去就说那几个数,而且各家偏爱的数字都不一样。这张答案分布表就是身份指纹,问一次只花一个输出 token。
  • 这招为什么躲不过:跑分测的是模型答得对不对,指纹测的是它在几个都说得过去的答案之间怎么分配概率。悄悄换压缩版这类操作,恰好会扰动指纹所读的那层概率分配,瞒不住。
  • 多准、多便宜:40 道题验一个接口,判错率 7.3%,差不多每 14 次错一次;只用 8 道题(约 120 次查询)也能到 10.6%。一次审计只要几分钱,同一个接口可以天天复检。
  • 最扎眼的发现:布拉格经济大学的 Tomáš Bruckner 把 165 个模型全测了一遍,总共只花 34.44 美元。一个号称自研专有旗舰的接口(writer/palmyra-x5),指纹跟开源 Qwen 近到分不出来(数字见导语),细节在「体检结果」那节。
问题在哪

你付钱点的模型,未必就是回答你的那个

你花钱点的是顶级模型,真正回答你的却可能是个便宜货。像 OpenRouter 这样的聚合商,一个入口接入几百个模型,确实省事。但你点的只是一个名字,请求最后落到哪台机器、上面跑的是什么,你完全看不见,也没有任何凭证。

你 点名要「模型 X」 按这个名字付钱 聚合商 如 OpenRouter 替你挑一家发过去 服务商 A 服务商 B …几十家 机器上实际跑的是? 真的模型 X 压缩过的量化版 更小的模型 旧版本 回来的只有一段文字,不带任何身份凭证 换便宜货的账天生划算: 省下的差价进服务商口袋,被抓的概率一直很低 而且不是假想: 此前有研究查了 31 个提供 Llama 的商用接口,11 个的回答分布对不上厂商原版
从你到真正干活的机器隔着两层转手;聚合器自己也承认,上游服务商之间的压缩程度并不统一。「31 个接口 11 个对不上」出自论文引用的前作实测
← 图可横向滑动 →

想查也真不好查:你是外人,拿不到权重(模型本体的那一大包参数文件),也拿不到 logits模型给每个候选答案打的原始分数。很多生产接口只把最终文字返给你,这个分数根本不给;水印、后门那类办法(都得预先在模型里埋暗记)只有模型主人自己玩得转,帮不了你;而且你得盯着几十个接口反复查,每查一次还得足够便宜。

已有的几种办法,分别卡在哪里

办法它要什么卡在哪
文本归因分类器完整的长篇生成文本能把整段聊天回复归到来源模型,五选一准确率 97%,但分类器要吃掉长输出,一次审计的账就上去了
精心构造的探针
LLMmap / TRAP
专门设计或对抗优化过的提示词LLMmap 用八条查询就能认出 42 个模型版本,可这类提示词的辨识度本身就是弱点:服务商一眼认出来,单独放行给真模型就行了
查概率排位的统计检验
基于秩的均匀性检验
模型返回的 log 概率专攻压缩版检测,但很多接口只返回文字,这个前提就不成立
统计等价检验完整的采样字符串,加同一模型的参照部署做校准最接近这篇论文的场景,但要消耗完整生成结果,而且只能对着单一参照部署校准
单字答案分布
本文
一个输出 token,不要权重、不要 logits、不要模型方配合代价是问一次不算数,得重复问几十上百次才读得出分布
← 表格可横向滑动 →

上面 LLMmap 那类办法琢磨的是「该发什么特制问题过去」。这篇论文反过来:问题就用最普通、最无害、随便怎么改写都行的那种,看的是模型怎么答:身份就藏在答案的分布里。

方法与机制

让模型说个随机数,答案分布就能认出它是谁

布拉格经济大学的 Tomáš Bruckner 想出了一个巧办法:让 AI 说个随机数,光看它怎么答,就能认出它是谁。

这招利用的是 AI 一个出了名的毛病:它说不出真正的随机数。你让它 1 到 100 随便挑,它翻来覆去就挑那一两个,而且每家模型的「口头禅数字」还不一样:GPT-4o 最偏爱 42(37 和 57 也常说),Claude Sonnet 5 几乎只说 47,Llama 3.3 认准了 53,Qwen3-Max 更绝,30 次采样每一次都答 42。以前大家都把这当缺陷、研究怎么修,这篇论文反过来,把它当成了指纹。

核心做法

问它「说一个 1 到 100 之间的随机数」,要求只回一个词(上限 16 个 token),关掉思考模式,温度设 1.0(就是让它按心里的概率随便抽,别每次都挑最稳的那个),然后反复问几十次。答案不管写成「四十二」「٤٢」还是「42」,都算成 42,数数每个数各出现几次,就得到一张分布表。

这张分布表就是指纹。每问一次,只消耗一个输出 token。

四家的分布画出来长这样:

四个模型对「1 到 100 随机数」的答案分布
同一个问题,四个模型的答案分布(英语,温度 1.0,各 30 次采样)。GPT-4o 的概率散在 42、37、57 几个数上,42 最高约 0.44;Claude Sonnet 5 几乎全压在 47;Llama 3.3 几乎全压在 53;Qwen3-Max 每一次都答 42。图源:arXiv:2607.10252 Fig.1

这种偏科程度能算出来。把 165 个模型 × 40 道题拆成一格一格,答够 10 次有效的有 6572 格;这些格子里,答案的中位熵答案有多难猜。1 bit 差不多相当于答案基本在两个选项之间摇摆只有 1.00 bit,而真随机应该到 6.64 bit(按「1 到 100」这道题算)。每格里模型最爱的那个答案(不只数字题,随机词/颜色/城市也一样),通常能占掉七成回答(中位占比 0.71)。

这个差距有多大

6.64 bit 相当于 1 到 100 每个数都有份、你完全猜不到它会说哪个。1.00 bit 相当于它心里其实只在两个数之间打转,你猜对的机会接近一半。模型嘴上答应了随机,实际上给的是它的口头禅。

同一份权重,在目录里会挂着好几个名字

动手之前得先掰扯清楚:测的到底是什么。聚合器目录里,名字和权重是多对一的:同一份权重会顶着好几个名字同时挂在那儿:滚动更新的 -latest、带日期的快照、免费档、思考档、快速档、长上下文档。

所以论文分三层说话:检查点是一份具体的权重,指纹按的是它;接口是一条「自称通向某个检查点」的服务路径;家族是同一个祖先传下来的一串检查点。核验查的是「接口给的是不是它自称的那份权重」,认亲查的是「这份权重出身哪家」。你买的那个名字,本身什么都不保证。

一个字里为什么会有身份信息

这张分布同时叠着四层东西,每一层都在往里写自己的痕迹。

1分词器怎么切字

同一个候选答案,在各家词表里被切成的块数和切法不一样,切法一变,它和别的候选之间的赔率就跟着变。论文对这层只点了名(候选答案的分词差异),没展开例子。

两个模型的词表不同,起跑线就不同,这一层的差异跟模型能力无关。
2训练语料里的词频

为什么偏偏是 42、47、53?因为人被要求「随便说个数」时也不随机,这些偏好全写在网上的文本里,模型照单全收。上面图里那几个尖峰,读的就是这一层。

论文没有逐个数字做归因,它引的四项前作正是研究人和模型的伪随机偏好的。
3指令微调与偏好优化

同一个底座、同一个词表的两个模型,为什么还分得开?靠的就是后期调教:它会把整张答案分布往一边推。

反过来,后面会看到一个有据可查的 Llama 衍生品跑到了 Qwen 邻域,干这件事的也是这一层。
4解码的具体实现

温度 0 本来该完全确定:同样的问题,每次都答同一个字。实测同一家服务商里 90.4% 的题确实如此,可跨服务商一汇总就掉到 84.5%。差的这 5.9 个点,就是各家机房在数值实现上的差异。

这一层最不属于模型本身,它也正是同一个模型换家服务商后指纹会偏移一点的原因。

看到这你可能想问:既然温度 0 下同一家服务商 90.4% 的题每次答案都一样,干嘛不直接比温度 0 的答案、问三次就完事?三个原因:各家的「保险答案」爱撞车(都答 42 就分不出谁是谁);跨服务商温度 0 的确定性掉到 84.5%,单点本身就不稳;而一整张分布的信息量远大于一个点。所以必须让它「随机」起来,反复问。

为什么压缩和蒸馏躲不过这类问题

量化是把权重四舍五入到更低精度;蒸馏是让大模型当老师、教出个小模型来顶班。先说量化:模型有把握的题,这点误差改不了它挑哪个答案,所以跑分基本看不出事。但几个候选答案咬得紧的时候,这点误差就够把它们的排位搅乱。

而「说个随机数」恰好就是这种题:几个口头禅数字都说得过去,谁多谁少没有对错,全看那点微妙的概率分配。指纹读的正是这个配比。

这套方法的支点

跑分测的是答得对不对,指纹测的是几个都说得过去的答案之间怎么分。压缩权重动不了前者,一定会动后者。

论文原文对这点只有一句话:量化和蒸馏扰动的,恰好是这些题采样的那层概率分配。上面的大白话是按这句展开的。

建立刻度

怎么把「像不像」变成一个能比的数

光一道题不保险:两个模型完全可能恰好都爱说 42。所以题库是 10 道题、各用 4 种语言问,共 40 道。

题目英俄中阿答案空间
1 到 100 随机数封闭 · 100
1 到 10 随机数封闭 · 10
最喜欢的数开放 · 数字
随机字母封闭 · 字母表
随机词开放
随机颜色开放 · 同义合并
最喜欢的颜色开放 · 同义合并
随机动物开放
随机城市开放
抛硬币封闭 · 2

为什么要问十道题、还要问四种语言

论文对这三条设计各给了一句理由,下面是按这几句展开的解释。

封闭题和开放题各干各的活。抛硬币只有两个答案、1 到 10 只有十个,所有模型都在同一组选项里挑,比的是精细配比。但再怎么不同,硬币也就俩选项,差异有上限。开放题(随机词、城市、动物)答案没有边界,两个模型可能一个都不重合,距离直接顶到头。一类负责在近亲之间抠出细微差别,一类负责把不相干的模型一把推开。

「随机」和「最喜欢」是两道不同的题。问随机数,是让它当抽签机;问最喜欢的数,是问它的人设,而人设是后期调教捏出来的。两个模型可能随机数撞车、最喜欢的数分开,这一对题等于白赚一个维度。

换种语言问,问到的是另一片记忆。中文语料里「随便说个城市」的常见答案,跟英文里的不一样。所以四种语言等于从四个不同的切面各采一份信号。反过来说,想冒充的人得把四套语言习惯全对上。

两张分布表差多远,用一个数表示

两张分布表差多远,用 Jensen-Shannon 散度衡量两张答案分布表差多远,取值 0 到 1。对称,而且两张表连一个共同答案都没有时照样算得出来折成一个 0 到 1 的数。选它有个实际原因:哪怕两个模型答的城市一个都不重样,它照样算得出有意义的距离,开放题正需要这个。两个模型的总距离,就是在双方都有足够样本的题上取平均。

单道题层面,同一个模型自己跟自己比是 0.075,两个不同模型之间是 0.489(注意口径:这是一道题的数,跟下面 40 道平均后的尺子别直接对着比)。平均之后,就是这把尺子。

按题平均后的指纹距离(Jensen-Shannon 散度,0 到 1) 同模型中位以下 0 0.2 0.4 0.6 0.140 同一个模型(噪声地板) 0.227 换一家服务商 0.463 两个不同的模型 0.141 palmyra-x5 对 qwen3-235b 0.303 nemotron 对 qwen 0.392 gpt-4 走 Azure 对走 OpenAI 0.716 llama-3.2-3b 两家服务商
轴上方是三个参照刻度,下方是普查中查出的四个异常,性质各不相同:有身份存疑的、有血统被后期训练盖掉的、也有同一个模型在两家服务商之间差太远的。0.140 和 0.141 几乎重合的那一处,是这次普查最强的一例。数据来自 arXiv:2607.10252 各节
← 图可横向滑动 →

换一家服务商,指纹还认得出吗

这里有个致命问题得先回答:换一家服务商,指纹会不会就变了?要是会,那测的就是机房,不是模型。OpenRouter 正好送了个天然实验:165 个模型里有 31 个同时挂在两家以上服务商、样本又够,凑出 34 对能直接对比,每对至少 15 道共同题。

0.227
换一家服务商后的中位距离,高于同一部署的噪声地板(同一个模型反复测自己也躲不掉的天然抖动)0.140,但远低于不同模型之间的 0.463
70.6%
这些服务商对当中,有 70.6% 比 95% 的「不同模型」组合都更接近,仍然认得出是同一个模型
0.880
参照采自另一家服务商时的核验 AUC(1.0 是完美,0.5 等于瞎猜);参照和被测同一家时是 0.971

结论:指纹基本扛住了换服务商这一关。没扛住的共 10 对,最扎眼的两对,后面「体检结果」那节细说。

算账

一次身份体检要花多少钱

查一次「这个接口背后是不是真货」,总共四步。

示意场景 · 非论文原文案例

假设你给自己的产品接了某家中间商的接口,点的是 Llama 3.3 70B。

1
登记参照:去一个你信得过的部署(比如模型厂商官方直营的接口),把 40 道题各问若干次,存下这份参照指纹。
2
现场抽样:从题库里随机抽 16 道,对中间商那个接口每道问 15 次,一共 240 次单字查询,约 1.6 万输入 token。
3
算距离:在这 16 道题上,分别算参照分布与实测分布的 JSD,取平均。
4
比门槛:落在 0.14 附近算通过,0.2 上下多半是换了家服务商、还算同一个模型,越往 0.4 走越可疑。论文没有给推荐门槛值,只给了「距离小于等于某个门槛就接受」的形式和整条 ROC 曲线。这里的 0.14 与 0.4 是照它测出的同模型中位数与不同模型区间反推的示意值。另外注意:这个场景里参照采自官方直营、被测是另一家,准确度对应的是跨服务商的 0.880 档,不是同源采集的 0.971,判断时门槛要相应放宽(这一档的判错率论文没单独给)。门槛往哪边拧要看你怕哪种错:做例行体检的审计方可以放松些,准备公开点名的人要收紧。

打分方式跟指纹门禁一个思路:「真身测试」拿同一个模型的两半样本互相比,「冒充测试」拿 A 模型的一半跟 B 模型的一半比。165 组真身、27060 组冒充跑下来,全套 40 道题 AUC 0.971,等错误率把门槛调到「冤枉好人」和「放过坏人」一样多的位置,此时的错误比例。7.3% 约合每 14 次判断错一次 7.3%。

核验 ROC 曲线,AUC 0.971
核验的 ROC 曲线。看法是:曲线越往左上角贴越好,中间那条对角线代表瞎猜的水平。这条线几乎贴着左边墙直上去,曲线下面积 0.971。图源:arXiv:2607.10252 Fig.3

少问几道题,准确率会掉多少

等错误率随题目数变化的曲线
等错误率随题目数量的变化,竖线是随机抽取子集造成的波动范围。曲线在 16 到 24 道之后基本走平,再加题换不到多少准确度。图源:arXiv:2607.10252 Fig.4
用几道题148163240
等错误率23.3%13.2%10.6%9.5%8.4%7.3%
波动带14 到 40%9 到 18%8 到 14%8 到 12%7 到 10%—
← 表格可横向滑动 →

只问一道题就已经比瞎猜(50%)强出一大截。按 16 道题、每道 15 次算:一次审计 240 次查询、约 1.6 万输入 token,普通定价的模型花不到一美分,旗舰模型也就几美分。

这两个数字要连起来读

单次核验 14 次会错 1 次,光凭一次下不了结论。但一次才几分钱,就可以对同一个接口天天查、反复查。真正管用的是长期累积的证据,单次只是其中一格。

成本上也有个参照:同样的重复次数,这套办法比靠长文本归因的路子便宜大约一千倍。

点开看:整轮普查的账,和 165 个模型是怎么筛出来的

整轮普查收到 326047 条响应,合 2330 万输入 token、116 万输出 token,总花费 34.44 美元,平均每个模型 0.21 美元。失败的请求会隔越来越久再重试(指数退避),重试件不进数据。回答的整体有效率 97.6%,单模型中位 99.6%,最低的那个 60.6%(它经常整句作答)。每条响应都被分成有效、无效、拒答、空四类,什么都不静默丢弃;而拒答率和有效率本身也带一点身份信息,却被刻意排除在指纹之外,为的是让指纹对安全策略的改动保持稳健。

模型是从 2026 年 7 月 6 日的目录快照(342 个条目)里筛的,排除掉:非纯文本对话模型(多模态输出、嵌入、音频、图像、视频、审核与护栏模型、未做指令微调的底座、上下文不足 2048 token 的);窄领域专用模型(代码、数学、医疗、角色扮演);不构成单一稳定检查点的条目(滚动的 -latest 别名、会变的预览版和已弃用接口、元路由器、多 Agent 或接了搜索的管线、已在目录中的检查点的免费档或思考档重复项);带强制隐藏思考阶段的接口;以及只有免费档的接口(账号级的每日请求上限让完整采集无法进行)。另有一个人工排除项有记录在案(输入每百万 token 150 美元、输出每百万 token 600 美元的模型)。规则清单随数据一起公开,每个被排除的条目都带着它的排除理由。剩下 165 个模型,横跨 19 个家族标签和 53 家服务商。

采样上,每个模型的每道题在温度 1.0 下采 30 次、温度 0 下采 3 次;输入定价在每百万 token 5 美元以上的旗舰模型减到 15 次。题目按带种子的洗牌顺序执行,所以限流造成的缺失会大致均匀摊到一个模型的所有题上,而不会把某道题或某种语言整块打空。正式跑之前先用 14 个模型(覆盖七组同家族的大小模型配对)做了预实验,把所有设计和分析选择按四条预设标准定死:每个模型有效率至少 80%、同服务商内温度 0 的确定性至少覆盖 90% 的题、家族间与家族内的散度差异过了统计显著性检验(p=0.0008)、以及成本外推。假设和分析计划在正式采集前做了预注册(提前公证、事后不能改口),预实验数据不进正式分析。

认亲

指纹还能看出这个模型是从谁那儿来的

同一个模型的指纹挨得近,那同一家族的模型呢?把 165 个模型两两算距离、让机器把挨得近的自动归堆(聚类),答案是:也近,但没那么可靠。这是论文里偏弱的一组结果,主要价值是给下一节那几个案例当参照。

165 个模型按指纹距离做的层次聚类树
165 个模型按指纹平均距离聚出的树,叶子标签按有据可查的家族着色。大片同色聚在一起的地方,就是指纹认出的家族。图源:arXiv:2607.10252 Fig.2

算法是「藏一个猜一个」:把每个模型轮流藏起来,看离它最近的邻居是谁家的,就猜它是谁家的。在 163 个有同家族同伴的模型上,猜对率 59.5%,瞎猜的基线是 18.4%,高出 3.2 倍。

弱的那面也摆在那儿:想让这棵树自动分出 19 个界线分明的家族圈?分不出来。这多半怪不着指纹:标签里有个装着 17 个互不相关厂商模型的「other」大杂烩,还有一堆单例家族,天生聚不成块,论文自己也说这在预期之内。看「谁离它最近」能认出血统,看整体分块认不出。

家族模型数精确率召回率
glm121.000.83
llama120.880.58
mistral160.870.81
gpt210.700.90
claude120.540.58
qwen300.500.73
deepseek80.460.75
gemini110.430.55
other(互不相关的厂商)170.200.06
← 表格可横向滑动 →

精确率是「被判进这个家族的,有多少真是」;召回率是「这个家族的成员,有多少被找了出来」。GLM 那行精确率 1.00:凡是判成 GLM 的全判对了。Llama 那行值得多看一眼:精确率 0.88 不差,召回率只有 0.58,等于 Llama 家快一半的成员没待在自家地盘上。下一节就有其中一个。

另外,59.5% 是个保底数:打分的标准答案来自公开文档的家族标注,文档标错了,就算指纹其实找对了亲戚也要扣分;反方向的错不存在。所以真实水平不低于 59.5%。

体检结果

这次体检查出了什么

把尺子架到真实生态上,出来几组对不上的接口。先说清楚:这些是统计上的对不上,不是谁在欺诈的指控。权重更新了、拿到许可的量化、缓存层,都可能是无辜的解释。

有几个接口的指纹,对不上它自称的身份

最强的一例

writer/palmyra-x5 的指纹,距开源的 qwen/qwen3-235b-a22b-2507 只有 0.141,而同一个模型自己跟自己的中位距离是 0.140(两个不同模型之间是 0.463)。意思就是:从答案分布上看,它跟一个开源 Qwen 部署根本分不出来。而这个接口卖的时候,说法是「Writer 自研的专有内部模型」。

Writer 是一家面向企业客户的 AI 公司,把 Palmyra 系列作为自研模型线在推,X5 主打 100 万 token 上下文,已经上架 Amazon Bedrock(这段产品背景来自 Writer 官方发布材料,不在论文里)。

无辜的解释也真实存在:拿 Qwen 底座训自己的模型,本身完全合法。紧接着就有一个清白的例子。

deepcogito/cogito-v2.1-671b 白纸黑字写着自己是从 DeepSeek V3 底座训的,它指纹上最近的三个邻居恰好全是 DeepSeek 检查点(0.268 到 0.308),指纹跟公开血统对上了。xiaomi/mimo-v2.5-pro 和 inclusionai/ling-2.6-1t 也稳稳落在 Qwen 邻域里。

把这两组数摆在一起看才见分晓:白纸黑字的合法衍生品,离底座的距离在 0.27 上下,是「亲戚」的距离;palmyra 的 0.141 贴着 0.140 的噪声地板,是「本人」的距离。一个高出地板一大截,一个贴地。论文保持不指控的口径,数字放在这儿,怎么读你自己定。

还有一种情况是痕迹被抹掉了:nvidia/llama-3.3-nemotron-super-49b-v1.5 有文档记载是 Llama-3.3 的衍生品,可它的指纹离 Qwen(0.303)比离任何一个 Llama 都近。后期训练下手够重,出身就被盖住了。上一节 Llama 召回率只有 0.58,这就是其中一个来源,也是指纹认亲的天花板。

同一个模型,两家服务商差得比两个模型还大

34 对「同一个模型、两家服务商」里,有 10 对(29%)的差距已经掉进「两个不同模型」的区间:同一个模型从两家机房出来,差得跟换了个模型似的。

接口两家服务商指纹距离
meta-llama/llama-3.2-3b-instructCloudflare 对 Parasail0.716
openai/gpt-4Azure 对 OpenAI 官方直营0.392
参照:两个不同模型之间的中位距离0.463
参照:同一个模型自己的中位距离0.140
← 表格可横向滑动 →

第二行那个数单独看一眼:同一家厂商、同一个模型名、两条都算官方的路径(Azure 和 OpenAI 一方接口),距离都快赶上「两个不同模型」的中位数了。第一行为什么能差到 0.716?论文没下定论;聚合平台自己倒是承认过,上游各家的压缩程度并不统一。

顺手还撞见了三件不对劲的事

有些猫腻光看回答内容根本发现不了,按 token 一笔笔记账才露馅。这三条不是花絮,它们直接决定了哪些接口被踢出样本。

token 去哪了
40 到 60 个

一些旗舰聊天接口,为了吐出一个词的可见答案,消耗了约 40 到 60 个输出 token,中间不暴露任何思考痕迹。你按 token 付费,等于为看不见的东西付了几十倍的钱。

开关没生效
0.76%

326047 条响应里有 2486 条无视了关闭思考的标志,带着思考痕迹回来,集中在 14 个模型与服务商的组合上。这批响应被单列成一类,从不进入指纹。

见数字就崩
1 个模型

有一个模型的唯一服务商,对所有数字类问题一律返回服务器错误,其他问题都正常作答。

第一条直接变成了排除标准:既然没法证明那几十个 token 不是一段藏起来的思考,就只能把这类接口全踢出去。判断只认实测行为、不认接口的自我声明,因为声明已经被证明靠不住了。

这些发现没走「先私下通知厂商」的流程。作者的理由:这不是等着修补的安全漏洞,公开也不会让谁多出一种攻击手段。问责靠的是把原始数据全公开:每次请求的时间戳、服务商、生成 ID 都在里面,被点名的和任何旁观者都能自己去复核、去反驳。

边界

服务商要是学乖了,这方法还管用吗

服务商要是学乖了、开始反制呢?能做的事分三档,这套办法对每一档的效力不一样。

T1 无意识
闷头替换

不看流量,换了就换了。对这一档完全有效。

T2 过滤
认出审计流量

识别已公开的审计问题,把它们单独路由给真模型。设计上针对的就是这一档。

T3 模仿
复现答案分布

试图在任意低熵问题上复现目标模型的分布。做到这一步,等于就在老实跑那个模型了。

对付 T2 的底气是:题库里没有固定暗号。「说个随机颜色」「说个随机城市」是一类话,不是一句话:能无限改写、无限翻译(四种语言已经各来了一遍),审计时现场随机抽,还能混进正常流量里发。

想把审计流量筛出来,服务商就得从海量普通消息里,把所有「让模型说个什么」的小问题一条不漏地认出来、单独路由给真模型。筛严了会放跑审计流量、照样被抓;筛松了等于把一大片日常流量都交给真模型跑、白花钱。两头都亏。论文的说法是「在检测上代价很高」,具体多高没测。另外还有个口子没堵:同一类题换个说法问,指纹还稳不稳,实验留给了后续工作。

T3 的账卡片里已经算完:模仿到那个程度等于老实跑真货,钱省不下来。所以这套办法给不了数学铁证,它干的是把「换货还不被抓」变得不划算,跟「靠硬件出证明」(让芯片在硬件层面签字担保,跑的确实是那份权重)那条路线正好互补。

重复问同一个问题,会不会命中缓存把结果搞坏

反复问同一句话必然撞缓存:13.4% 的请求命中了提示词缓存,覆盖 10.1% 的输入 token。这会不会把测量搞坏?得分清是哪种缓存。

前缀缓存
不影响测量

复用的是这段问题之前已经算过的中间结果,省的是时间和钱,不改变模型最后怎么挑答案。重复采样仍然是独立抽样。

响应级缓存
会毁掉测量

直接回放存好的旧答案,会让温度 1.0 下观察到的分布人为塌缩。在这套审计的语境里,这本身就是一种作弊。

所以作者专门查了一遍响应级缓存,判据是:答案塌缩成一个 + 延迟异常低还特别稳。温度 1.0 下只出一个答案的题有 2040 道(分布集中本来就常见),其中延迟低于平时一半的只有 14 道。而这 14 道都还在正常的亚秒级范围,更像服务商负载波动,完全不像真缓存那种瞬间回放。这一轮没查出响应级缓存。

这套办法有六件事做不到

局限具体是什么
指纹会漂移模型更新之后指纹会变,参照必须定期重新登记。短期稳定性测过,几个月尺度的漂移没测
需要可信参照整套核验的前提是存在一个你信得过的参照部署
样本够不着低流量服务商每家的样本太少;5 个接口整个采集窗口都没采到(1 个已下线,2 个所属服务商持续宕机,2 个是「未知模型」占位条目),另有 1 个模型的唯一服务商系统性失败
标签有噪声闭源厂商的家族标签依赖公开文档。标签噪声只会压低而不会抬高血统结果
一类接口测不了强制隐藏思考的接口被整体排除:思考阶段之后吐出的答案,采样的是另一个生成过程,混进来会按输出格式抱团,而不是按血统抱团
只测了一个聚合器整轮普查只覆盖 OpenRouter。方法本身与聚合器无关,但生态层面的发现未必能外推到别处
← 表格可横向滑动 →

最后一件实用的事:这套东西不用自己重写。提示词原文(config/prompts.json)和带完整服务元数据的原始响应在公开数据包里,整套采集分析管线(Node.js 和 R)单独归档,两个包都挂在尾注的 Zenodo 链接下。拿下来,把「算账」那节的四步对你在用的接口跑一遍就行。

模型身份从最廉价的那条通道漏了出来:模型被问到一个无聊问题时吐出的那一个 token。 One Token Is Enough,结论章
来源
One Token Is Enough: Fingerprinting and Verifying Large Language Models from Single-Token Output DistributionsTomáš Bruckner(布拉格经济大学信息学与统计学院,唯一作者)·arXiv:2607.10252·2026-07-11
延伸
原始数据·采集与分析管线·预注册论文致谢载明:研究设计、数据采集、结果处理与初稿撰写使用 Claude Code 辅助,全部输出经作者本人核验与修正;接口额度由作者个人出资。
本站说明
文中四张图表均出自该论文。Writer 与 Palmyra X5 的产品背景来自 Writer 官方发布材料,已在文中标注。第四节的核验流程为按论文参数搭的示意场景,其中门槛数值为示意,论文未给推荐值。
↑ 正文结束
✓ 本篇全文免费开放

会员可复制、下载全文 Markdown,还能让你的 AI 订阅和提问。

阅读原文 ↗
📮 新解读第一时间进邮箱

读完觉得有用?留个邮箱,每篇新解读发布就送达,随时退订。