InsightsTosea Team11 MIN READ

把 Claude Code 的提示词灌进 GPT,它「掷骰子」的习惯变得像另一个模型

隐藏系统提示词能把模型指纹推移到 JSD 0.46——「换了个模型」的量级。5660 条受控实验实测:什么会漂、哪些探测题扛得住、中转站偷加的 1447 个 token 到底是什么,以及 50 倍 token 掺水怎么被抓包。

把 Claude Code 的提示词灌进 GPT,它「掷骰子」的习惯变得像另一个模型

上一篇《AI 为什么说不出随机数》发出后,收到最多、也最扎实的一个质疑是:

「中转站在我的请求前面偷偷垫一段自己的系统提示词,你这指纹不就废了?」

与其嘴上争论,不如动手测。我们抓来了编码 Agent 们真实下发的系统提示词——Codex CLI 的 3252 个 token、Claude Code 完整的 6651 个 token——在受控条件下灌进干净的模型,然后盯着「随便说个 1 到 100 的数」这类探测题的答案分布,看指纹到底会不会被带跑。

先说结论:会,而且能跑到「像换了一个模型」的程度。把 Claude Code 的系统提示词整段垫在探测题上方,GPT 的指纹相对它自己的干净基线漂移了 JSD 0.46——而论文口径下,两个真正不同的模型之间的平均距离也就是 0.463。

但更有价值的是后半句:这种干扰不是玄学,它随模型、随任务、随注入类型呈现出可测量、可排序、可防御的规律。这篇文章把 5660 条受控请求跑出来的证据摊开讲:什么会漂、什么扛得住、以及如果你在用中转站或聚合平台,这些数字对你意味着什么。

先立好刻度尺

下文所有数字都是答案分布之间的 Jensen-Shannon 散度(以 2 为底),来自论文 《One Token Is Enough》(arXiv:2607.10252)的口径。三个公开基线让数字有意义:同一个模型自己跟自己比,约 0.14;同一个模型经由不同服务商,约 0.23;两个不同的模型之间,约 0.46。所以,如果某个操作能把一个模型的指纹推离自己基线 0.46 远——行为学意义上,它已经变成了别人。(还不了解这套方法?建议先读方法篇,本文是它的压力测试篇。)

实验一:灌入真实 CLI 提示词,看骰子怎么变

实验设计忠实还原了「反代转卖」的做法:你的一词探测题原封不动,但上方被前置了一大段隐藏上下文。我们取两个干净且锁定来源的端点——经主流聚合平台锁定官方来源的 GPT‑5.5,和官方直连的 gpt-4o-mini——各自在四种条件下探测:极简基线提示词、真实的 Codex CLI 指令全文(+3252 token)、真实的 Claude Code 系统块全文(+6651 token,从真实客户端会话的请求体里抓下来的原文),以及一段等长的无意义填充文本(+3240 token)——用来把「内容的干扰」和「单纯变长的干扰」拆开。每条件 4 个探测题 × 40 次采样,temperature 1.0,禁用推理。

相对各自干净基线的漂移:

前置的隐藏上下文GPT‑5.5gpt-4o-mini
Codex CLI 提示词(+3252 token)0.1610.107
Claude Code 提示词(+6651 token)0.4620.441
等长无意义填充(+3240 token)0.3550.066

两个发现值得展开说。

第一,Claude Code 的提示词把两个模型都推进了「不同模型」带,而且方式很戏剧化:GPT‑5.5 的「随便说个颜色」从健康的多样分布(熵 1.97 bit)塌缩成 40 次里 40 次都答 blue,熵归零;「随便说个动物」有 30/40 直接改用中文回答。(诚实标注:我们抓到的这份 Claude Code 提示词里带有客户端真实写入的用户语言偏好,语言翻转有一部分来自这个本地配置——但颜色塌缩和数字偏好的改变与语言无关,结论不受影响。)gpt-4o-mini 同样:颜色塌缩到 blue 37/40,动物答案跨语言漂移。如果你不知道注入的存在、只看指纹,会得出一个行为学上完全正确的结论:你对话的已经不是你以为的那个模型

第二,光是「变长」就能改变骰子,而且因模型而异——这是我们自己都没料到的结果。对 gpt-4o-mini,3240 个 token 的无意义填充几乎没有影响(0.066,稳稳落在同模型区间):它只对内容语义起反应。GPT‑5.5 却光靠填充就漂了 0.355,连它最出名的习惯都反转了——那个基线下 40 次里 39 次都答 47 的模型,在问题上方多了一段废话之后,改答 42(24/40)。同样的问题、同一个模型,骰子却换了一副——只因为上下文变长了。

这个不对称性在方法论上很重要:你不能用一个模型的抗干扰测试结果去外推另一个模型。所以我们跑了第二轮更大的实验。

实验二:给提示词干扰排一张「烈度阶梯」

第二轮:3 个模型(GPT‑5.5、deepseek-chatglm-4.5,全部锁定固定服务来源)× 6 个探测任务 × 6 种上下文条件,从人畜无害到明确对抗,共 3900 条请求。按条件对任务取平均,烈度阶梯如下:

你的请求上方被垫了什么指纹漂移(跨模型范围)
一句短人格("You are a helpful assistant.")0.07 – 0.33
约 90 词的通用助手说明0.09 – 0.18
整段 CLI 系统提示词(约 3.3K token)0.12 – 0.30
换成中文的系统提示词0.23 – 0.30
「请均匀等概率地随机选择」0.53 – 0.63

三条结构性规律:

  • 干扰是「模型 × 任务 × 条件」的三重耦合。同一句短人格,GPT‑5.5 几乎无感(0.069),deepseek-chat 却漂移 0.325。不存在「注入小 = 漂移小」的通用规则。
  • 换语言是重量级扰动。中文系统提示词让每个受测模型都稳定漂移 0.23–0.30——量级不小,而且是非常现实的场景:面向中文市场的中转站,隐藏包装层常常就是中文写的。
  • 对抗性指令完全是另一个物种。命令模型「均匀随机」不是在轻推分布,而是发动模型反抗自己的习惯:GPT‑5.5 的最爱数字从 47 翻到 73,颜色逃向 chartreuse 这种冷门色,动物变成 axolotl、aardvark 这类生僻词。在这个条件下,对 176 个参考模型做最近邻归属,我们测的每一个模型都归属失败。这是方法的硬边界,文末再谈。

哪些探测题扛得住:抗干扰排行榜

既然干扰有规律,就可以反过来挑「天生抗干扰」的探测题。把每个任务的跨模型区分力(来自论文公开数据集)除以实测的提示词敏感度,得到一个「稳健比」——排名和直觉不太一样:

探测任务提示词敏感度一句话评价
1–10 随机数0.037超稳但没用——所有模型都答 7
1–100 随机数0.143稳健比全场第一(3.18)
随机字母0.276第二名(2.01)
随机颜色0.361区分力强但脆
随机动物0.392区分力强但脆
随机单词0.481区分力最强,也最脆

高熵的「有趣」探测题——随机单词、随机动物——恰恰是隐藏提示词最先掰弯的;而这项研究的起点、最朴素的「1 到 100 随机数」,反而是稳定性与信号量之间最好的折衷。

结论可以量化:把默认探测集换成按稳健性挑选的三件套(数字 + 字母 + 动物),在良性隐藏提示词干扰下,「真模型被误判为假」的概率从 25% 降到 8%,同时冒充者的漏放率仍只有约 5%。更反直觉的是,把区分力最强的「随机单词」加回来反而变差——它的脆弱抵消了它的信号。有时候,最强的特征恰恰是该舍弃的那个。

还有一个值得公开的否定性结果:我们测试过「形状特征」——只比众数、只比熵、只比 Top-3 集合——期望它们比完整分布更抗注入。结果是全军覆没:干扰之下,完整分布的 JSD 打赢了所有形状特征。一句良性的人格提示词经常直接换掉「哪个答案是第一名」、却保留分布的整体轮廓,所以「众数一致」恰恰是最不该信的判据。

野外实录:每条请求都被垫了 1447 个 token 的端点

受控注入告诉你「可能发生什么」,下面是我们在一个商业中转端点上实际测到的东西(隐去名称——我们的发现是统计学观察,不构成对任何主体的指控)。

我们发出的一词探测题,每条约 30 个 prompt token。而该端点 usage 字段报告的却是每条约 1470 个 prompt token——每一次调用都被持续性地前置了约 1447 个 token 的隐藏前缀,响应正文里看不见,对这种小请求而言约等于 50 倍的计费掺水。同时它的指纹距离它声称的官方模型约 0.39,落在「不同模型」带。

那垫的到底是什么?这里是取证最有意思的部分,因为 token 算术可以证伪假设。圈内对这类端点最流行的猜测是「拿编码 Agent 的订阅做反代转卖 API」。但尺寸对不上:Codex CLI 系统提示词 3252 token、Claude Code 6651 token,轻量级 Agent(Aider、OpenCode)在 1.3–1.6K 一带;1447 跟哪个主流 CLI 都不吻合。更关键的是反向验证:我们把真实的 Codex、Claude Code 提示词灌进候选的底层模型,得到的指纹距离该端点的实测分布更远了而不是更近。假设证伪——真相更接近于:一段自研的精简包装提示词,垫在一个行为上并非其所声称的模型之上

另一个受审计的端点则展示了完全不同的作弊姿势:prompt token 干干净净,但一词回答的 completion_tokens 上报为 1(官方同款回答计 4–5 个 token),延迟是官方的 3.5 倍。少报用量、慢速转发——是「账本造假」而不是「提示词注入」。同一轮指纹检测,抓出两种完全不同的病,全都写在大多数人从不细看的元数据里。

(还有个细节:某端点 200 条响应里有 4 条是完全干净的——同一个模型名背后挂着多个上游、随机路由。这正是「分半自检」能抓住的模式:一份指纹连自己都对不上自己。)

我们的检测工具怎么防这些花样

这些实验不是为了发论文,它们直接决定了免费工具 LLM API 真伪检测器的默认设计:

  • 两端强制同一条极简系统提示词。参考端和待测端在完全相同的提示词条件下采样,比对本身绝不制造漂移。(阶梯表的推论:如果你拿别人在不同提示词设置下采的参考来比,你测的是设置差异,不是端点。)
  • prompt token 配准。工具把端点上报的 prompt_tokens 和实际发送量做差。上面那个野外案例的 +1447 会当场亮灯;任何超过约 100 token 的包装层都逃不掉。一句 +6 token 的短人格确实抓不到——所以默认探测集才特意选了对它天然低敏的任务。
  • 稳健优先的默认探测集 + 完整分布 JSD。默认数字 + 字母 + 动物三件套;脆弱但高信号的探测题保留为「模型家族归属」的辅助证据。
  • 体检加项。分半自检(抓多后端轮询)、completion token 掺水检测、缓存怀疑、延迟画像。
  • 显式弃权。当证据模式吻合「被要求均匀随机」的对抗场景——分布被摊平到没有任何已知模型能自然产生的程度——诚实的输出是无法判定,而不是一个自信的错误结论。

你也可以先看看「没被动过手脚的模型」长什么样:指纹数据库把论文公开的 167 个模型参考分布整理成了每模型一页,随便翻。

边界,明明白白写出来

我们做这组实验就是为了找到方法在哪里失效,所以边界如实列出:

  • 对抗性的「请均匀随机」能击败一切基于输出分布的指纹。答案流里没有任何信息能区分「被命令摊平的真模型」和「另一个模型」。独立研究结论一致:LLMmap 作者自报在强化系统提示下准确率显著下降;2026 年一项 Agent 时代的稳健性实测里,限制性提示词让精确识别率从 61.5% 崩到 17.9%。对策是配准(token 差额至少能告诉你「有东西被注入了」)加弃权——而不是幻想一道更聪明的探测题。
  • 光是基础设施就能移动指纹。同一个模型名路由到不同的服务来源,我们实测漂移可达 0.20——量化方案与推理栈是真实存在的混淆源。锁定参考来源之后,再谈怀疑别人。
  • 有些模型天生难归属。英文探测题下答案极度低熵的模型(我们研究中有一个模型 100% 答 42),它的众数和半个模型圈重合,即便完全无干扰也可能被认错。解药是加探测单元、上非英文题——而不是换度量。

一次「不匹配」是值得复测的证据——换参考、加单元、去问服务商——它本身不是对任何生意的判决书。

一个做 PPT 的团队为什么持续发 API 取证文章

交代下我们是谁:Tosea.ai 的主业是把 PDF 文档变成可编辑的幻灯片,这条流水线的产出质量和背后那个模型一一对应。这组实验对我们同时是一次质量工程研究:如果上游在我们精心设计的生成提示词上方再垫 1400 个 token 的隐藏包装,那不只是计费问题——它会和我们的指令打架,让大纲结构变糊、页面还原失真,正是我们在零幻觉 AI 幻灯片指南里最花力气对付的那类退化。指纹检测就是我们验证「买到的算力就是付钱的那份算力」的日常手段,与我们在论文转幻灯片工作流里坚持的「信,但要验证」是同一件事。这个检测器和这组研究,就是把内部实践公开出来。

参考来源

本文另有英文版:We Fed Claude Code's System Prompt to GPT — Its Fingerprint Drifted Like a Different Model

Continue Reading

All Insights