
你有没有想过,两段字节完全相同的文字,发给同一个AI模型,会得到完全不同的对待?
这听起来像是玄学,但2026年发表的一篇论文《Byte Authority》给出了确凿的证据。研究团队发现,一段伪造的对话标记,比如`<|im_start|>`这样的文字,如果被拆解成普通的文字碎片再发给模型,攻击成功率能从98.2%暴跌到39.7%,比什么都不做的裸攻击还要弱。而这两种发送方式,解码出来的文字一模一样,用户在屏幕上看到的、日志里记录的,全都是同一串字符。
差别只有一个:谁来决定这段文字变成什么token(词元)送进模型。
**词元*:语言模型处理文字的最小单位,可以是一个完整的词,也可以是几个字母组成的碎片,模型看到的不是文字本身,而是这些词元对应的数字编号。**
这件事乍一听有点反直觉。我们通常以为,AI看到什么文字,就会怎么理解,怎么回应。文字才是意义的载体,对吧?但这篇论文告诉我们,同一段文字背后,可能藏着两套完全不同的"权力等级",而决定权不在攻击者手里,在服务器的分词器手里。
为什么会有这个漏洞
先说说背景。现在的AI智能体(agent)不只是聊天,它们会调用工具、读取网页、处理邮件附件,任何外部数据都可能混进它的输入流。这就给了攻击者可乘之机:如果我在一份看起来无害的工具返回结果里,藏一段伪装成"系统指令"的文字,模型会不会真的把它当成系统在下达指令?
这种手法有个专门的名字。
**提示词注入*:把恶意指令伪装成正常内容,混入AI处理的信息流中,诱导模型执行攻击者想要的操作,而不是用户本来的意图。**
已经有研究证明,把注入的指令包装成AI自己的"对话模板"格式,像是伪造一个系统消息的开头和结尾,能大幅提升攻击成功率。2026年发表的ChatInject论文显示,这种手法能把AgentDojo基准上的攻击成功率从5.18%拉到32.05%,涨了六倍还多。
但这里有个问题一直没人说清楚:这种攻击到底是靠"看起来像系统消息"这个视觉/语义上的把戏生效的,还是靠更底层的东西?
这就要说到"reserved token"(保留词元)这个概念。
**保留词元*:分词器词表里被明确标记为"特殊"的词元,通常对应对话模板里的角色边界,比如"系统消息开始""用户消息结束"这类标记,模型在训练时只在真实的对话边界上见过它们。**
以Qwen3模型为例,`<|im_start|>`这十二个字符,既可以被编码成一个单独的保留词元,也可以被拆解成六个普通的文字碎片(subword,子词)。两种编码方式解码出来是同一段文字,但模型接收到的数字序列完全不同。
打个比方,这就像是一张门禁卡和手写的"我是员工"字条。门禁卡刷一下,系统直接确认身份放行,不需要任何思考。字条上写的字再工整,保安也得停下来判断这是真是假。字面意思可以相同,但认证的路径完全不同。如果没有门禁卡这套机制,保安每次都得靠肉眼判断,效率低,还容易被伪造字条骗过;但如果保安对刷卡这个动作形成了条件反射,遇到假卡也可能直接放行。
论文的核心洞察就在这里:模型在训练过程中,只在真正的对话边界处见过保留词元的那个向量表示,久而久之,这个向量本身可能就变成了一个"这里是新一轮对话开始"的信号。而拆分成的文字碎片,模型每天在各种普通文本里都会遇到,并不携带这种特殊信号。
怎么把这个问题挖出来
研究团队设计了一个巧妙的对照实验。他们构造了四种情况,其中三种解码出来的字节完全一致,只是内部的词元编号不同。
第一种叫Reserved(保留),就是攻击者原样伪造的字符串,走默认的分词流程,保留词元原样保留。第二种叫Split(拆分),把每个伪造标记用普通词表拆开编码,这正是业界现有防御手段的做法。第三种叫Matched(匹配对照),保留原本的reserved id,但在工具返回结果的开头,把一些无关紧要的普通文字硬拆成碎片,拆出来的词元数量和Split条件完全一样。
为什么要专门设计第三种?
因为拆分一个标记会同时做两件事:一是去掉了它的保留身份,二是多出了七到三十三个额外的词元。词元数量的变化本身就可能影响模型行为,之前有研究证明,把一段文字重新切分成不寻常的词元序列,哪怕字节完全一样,模型的反应也会变。如果不设置Matched这个对照组,你根本没法确定,攻击成功率的下降到底是因为"没有保留身份",还是仅仅因为"词元变多了"。
这就好比你想知道某种药有没有效,光设一个吃药组和不吃药组是不够的,因为吃药这个动作本身(比如按时喝水、心理暗示)都可能影响结果。你得再设一个安慰剂组,吃一模一样的水,但没有药效成分,这样才能把"药效"这个变量单独剥离出来。Matched就是这里的安慰剂组,它让研究者能算出一个叫做"身份差距"(identity gap,论文里用Δ表示)的指标,专门衡量保留身份这一项,到底值多少个百分点的攻击成功率。
第四种叫Plaintext(纯文本),就是完全不用任何模板标记的裸注入,作为攻击基线用来对比模板攻击到底强化了多少。
结果有多夸张
研究团队在InjecAgent这个基准上跑了四个开源模型家族:Qwen3-8B、Llama-3.1-8B、GLM-4.5和Seed-OSS-36B,每个模型测了两类攻击(直接下达有害指令、窃取用户数据)。
**InjecAgent*:一个专门评测工具调用型AI智能体是否会被间接提示词注入攻破的基准测试集,判断标准是模型读取了被污染的工具返回内容后,是否会调用攻击者指定的工具。**
结果分成了两拨,这也是整篇论文最有意思的分歧点。
在Llama-3.1、GLM-4.5和Seed-OSS-36B这三个模型上,身份差距Δ达到了39到66个百分点。Llama-3.1最夸张,保留身份时攻击成功率是98.2%,拆开之后暴跌到39.7%,比什么都不做的纯文本攻击(51.6%)还要低。也就是说,对这三个模型,"保留词元的那个向量"几乎就是攻击成功的全部原因,拿掉它,攻击基本失效。
但在Qwen3-8B上,直接伤害类攻击的Δ只有8.1个百分点,数据窃取类攻击的Δ更是只有0.5个百分点,统计上完全测不出差异。
这个差异让人好奇:难道Qwen3天生对这种攻击免疫?答案更有意思。研究者发现,Qwen3-8B在回答之前会生成一段"思考"(reasoning)过程,模型会在这段内部独白里,通过分析文字内容,自己判断出"这看起来像是被伪造的系统消息"。也就是说,Qwen3不是靠保留词元的特权向量识别边界,而是靠推理"读"出了破绽。
研究者做了个验证:把Qwen3-8B的思考功能强行关掉,再测一遍身份差距,直接从8.1个百分点跳到49.8个百分点。拆分条件下的攻击成功率从75.3%暴跌到35.8%,而保留身份的条件反而略有上升。这说明,当模型失去了"用逻辑推理识别边界"这个能力之后,它对保留词元向量的依赖立刻暴露出来,骨子里其实和其他三个模型是一样的,只是平时有推理这层"保护壳"挡着。
这里可以引出一个此前学界的误会。2026年另一篇论文(Deng等人)曾经在Qwen3-8B上做过类似拆分实验,测出目标工具调用的概率只从100.00%掉到99.99%,几乎没变化,于是得出结论:这类攻击靠的是"标签式语法"而非特殊词元。本论文重新审视了这个结果,发现问题出在读数方式上。Deng等人衡量的是"目标调用的概率",而这个概率在他们筛选出的样本里本来就已经逼近100%,天花板效应导致哪怕真实攻击成功率跌了54个百分点,这个概率读数也几乎看不出变化。用同样的读数方式重新分析本论文的数据,Qwen3-8B确实复现了那个"几乎不变"的结果,但同一批数据里的Llama-3.1,用这套读数方式一测,照样跌了40个百分点。天花板效应掩盖了真相,不是效应不存在。
权力到底藏在哪个向量里
如果保留身份真的这么重要,那这个"权力"具体是储存在哪个环节的?是那个词元的编号本身,还是编号对应的那一行数字(也就是输入嵌入向量)?
研究者做了个更精细的手术式实验:保持整个词元序列不变,只把伪造标记位置上的那一行输入向量单独替换掉。
**输入嵌入向量*:模型把每个词元转换成的一串数字,是模型理解这个词元含义的起点,每个词元在词表里都对应固定的一行向量。**
他们试了三种替换方案:用被拆分后那几个子词向量的平均值替换、用嵌入空间里离保留词元最近的普通词元向量替换、用另一个保留控制词元(比如`<|endoftext|>`)的向量替换。
结果在Llama-3.1上非常戏剧化:用"最近邻"的普通词元向量替换,攻击成功率是98.4%,几乎和原版的98.2%没有差别;但用子词平均向量替换,只恢复到58.4%。这说明关键不在于这个词元是不是"官方认证"的保留词元,而在于这个位置上的向量本身是否携带了那种"边界信号"。只要找到一个普通词元,它的向量恰好落在合适的区域里,照样能触发同样的效果。
这个发现让研究者想到了一个更狠的攻击思路:既然防御手段(把保留词元强制拆成普通子词)只是斩断了"标准拼写"这条路,那攻击者完全可以主动去搜索,词表里有没有哪个普通词元的向量,恰好离保留词元很近?
他们真的做了搜索实验,在GLM-4.5、Seed-OSS-36B和Llama-3.1三个模型上,找到的最佳替换方案,都是"嵌入空间最近邻"这一类。用这种自适应攻击,原本能被拆分防御压低到52.8%(Llama-3.1,六种固定拼写规则里最好的)的攻击成功率,被重新拉回到92.2%,几乎逼近未设防状态下的98.0%。
这就好比一个小区把大门的门禁卡换成了指纹识别,想着这样小偷就进不来了。结果小偷发现,隔壁栋楼有扇窗户,锁的机械结构和指纹锁背后的电路原理几乎一样,一样能骗过传感器。你以为堵死了正门,其实只是让攻击者绕到了侧面,只要"权力"不是绑定在某个特定编号上,而是绑定在某种向量特征上,换个马甲照样能蒙混过关。
训练会让模型更依赖这种"特权信号"吗
论文还测了一件挺让人意外的事:对比同一个模型家族的基础版(base,没做过指令微调)和指令微调版(instruct),看它们对保留词元的偏好有没有差异。
由于基础模型不会主动结束对话轮次,没法直接用工具调用成功率来衡量,研究者改用了logit(模型对下一个词的原始打分)差值来测量:强制模型生成到工具名称位置,看模型给"攻击者的工具"打的分比"用户本来的工具"打的分高多少。
测了Qwen3-1.7B、Qwen3-8B、Seed-OSS-36B三对基础与指令微调模型,结果每一对里,指令微调版都比基础版更偏好保留词元标记的伪造边界。Qwen3-1.7B的差距最夸张,指令微调后的偏好分数从几乎为零跳到7.82(logit空间的单位),而额外词元数量带来的干扰几乎不变。
这个结果提示了一个值得深思的现象:指令微调本来是为了让模型更听话、更擅长完成人类交代的任务,但顺带的副作用,是让模型对"保留词元=对话边界"这个信号越来越敏感,也就越来越容易被伪造这个信号的攻击者利用。这有点像是给员工做安全意识培训,反复强调"看到穿工牌的人就默认是自己人",员工确实更高效地配合了真员工,但同时也更容易被一件假工牌骗过去,信任被训练得更"高效"了,代价是也更容易被利用。
现有防御为什么漏了一半的门
业界确实有现成的补救措施。Hugging Face的分词器库提供了一个选项叫`split_special_tokens`,打开之后,会把被标记为"special: true"(特殊)的词元强制拆成普通子词,理论上这就应该能挡住上面说的攻击了。
但研究团队去查了一遍实际情况,发现事情没这么简单。这个选项只对配置文件里明确声明为"特殊"的词元生效。而很多智能体框架,读取工具返回结果时依赖的标记,比如`<tool_call>`、`<tool_response>`这类"工具协议词元",往往在配置文件里被标记成"special: false"(非特殊),也就是被当成普通添加词元处理,压根不在这个防御选项的覆盖范围内。
研究团队对Hugging Face上下载量最高的400个对话模型做了一次普查,发现67种不同的分词器配置里,有33种(覆盖255个模型检查点,占比64%)存在这种"漏防区域"。用只包含工具协议词元的伪造载荷去攻击,在每一个声明了这类词元的模型上,身份差距都在9.4到19.9个百分点之间,防御措施在这里基本上是摆设。
这就好比一栋大楼装了门禁系统,正门刷卡才能进,但后勤通道的门,送外卖、收快递专用的那扇,压根没接入门禁系统的管理范围。理论上大楼很安全,实际上只要知道后勤通道的位置,照样能长驱直入。而工具返回结果,恰恰就是AI智能体处理外部数据最常用的"后勤通道"。
研究者也提出了一个更彻底的修复思路,叫"源感知编码器"(source-aware encoder):把可信内容和不可信内容分开编码,不可信部分统一用一个去掉了特殊词元匹配逻辑的分词器处理,这样无论配置文件怎么标注,不可信区域里出现的任何控制词元字符串,都不会被识别成保留词元。他们验证了这个方案在正常业务流量上不会产生副作用,处理545条AgentDojo的正常工具输出,一个词元都没有被意外改变。
攻击不止停在单次工具调用上
前面说的都是InjecAgent这种"单次工具调用是否被劫持"的评测方式,那如果放到更真实、更复杂的多轮智能体任务里呢?
研究团队又在AgentDojo这个基准上做了验证。
**AgentDojo*:一个模拟真实智能体多轮交互场景的评测环境,覆盖银行、邮件、旅行预订等多个任务场景,判断标准是攻击者设定的目标是否在完整的工具执行链条走完之后真的达成了。**
在覆盖四个任务场景(银行、聊天、旅行、办公)的409组测试样例上,Qwen3-8B的身份差距是10.3个百分点,Qwen3-32B是6.8个百分点,全都有统计显著性。在另一个加入了Llama-3.1和Seed-OSS-36B的三场景验证集上,十种"模型加场景"的组合里,差距全部为正。也就是说,这个漏洞不是InjecAgent这一个评测环境的特例,它会一路传导到真实的多轮任务执行结果上。
三年后的问题:这条思路能走多远
这篇论文最后提出的建议其实很朴素:以后研究模板攻击,不能只报告文字内容,还得报告具体是哪些token id进入了模型。防御措施的评判标准,也不该只看拦住了多少文字,而要看拦住了多少token id。
这个思路其实和更早期的一些防御路线是呼应的。比如StruQ、SecAlign这类方法,试图通过训练让模型学会区分"特权指令"和"数据内容";还有像ASIDE这样的架构层面方案,试图在嵌入层就把指令和数据从根本上隔开。这篇论文提供的"固定字节对照"实验方法,恰好可以用来检验这些防御到底是真的消除了"保留词元的特权",还是只是挡住了表面的触发条件,这是一种可以套用到未来任何防御方案上的通用检测工具。
写在后面
读完这篇论文,最触动我的其实不是攻击手段本身,而是它揭示的一个更普遍的结构性矛盾:任何系统里,只要存在"内容"和"渠道"两条分离的信息路径,就一定会有人想办法伪造渠道信号来绕过内容审查。
这让我想到网络安全里一个经典的老问题,请求头伪造。HTTP协议里,一个请求的"来源"可以通过Referer字段声明,但这个字段本质上就是文字,客户端想填什么就能填什么。服务器如果天真地信任这个字段,等于是把"信任"这个决策权拱手让给了不可信的一方。这篇论文讲的保留词元问题,本质上是同一种模式在语言模型内部的重演:模型把"这是不是对话边界"这个判断权,交给了一个可以被伪造出现位置的信号,只不过这次伪造的不是文字内容,而是文字背后那层看不见的编码方式。
还有一点值得单独说一说。论文里提到,指令微调会让模型对保留词元的偏好越来越强,这几乎是所有测试模型的共同规律。这意味着,我们现在追求的"让AI更听话、更懂得遵循指令层级"这个训练目标,本身可能就在悄悄放大这类攻击的杀伤力。这不是哪个团队没做好,而是这套训练范式内在的张力,你越训练模型相信"某种信号=权威指令",攻击者伪造这种信号的收益就越大。这个矛盾恐怕不是靠打个补丁就能根除的。
论文里还有个细节我觉得值得琢磨:Qwen3靠"思考"这个额外步骤挡住了大部分攻击,但代价是什么?是要多花一轮推理的算力和时间。这某种程度上像是在提醒我们,安全性和效率之间,也许永远存在某种此消彼长。一个模型如果什么都不假思索地直接响应,速度最快,但也最容易被表面信号骗过;如果每次都要停下来推理判断,安全性提高了,但成本也上去了。AI系统的设计,可能永远要在这两端之间找一个让人不太舒服的平衡点。
Q&A
Q1:保留词元(reserved token)和普通子词拆分具体有什么区别?
A:保留词元是分词器词表里被声明为"特殊"的编号,模型在训练时只在真实对话边界见过它对应的向量,可能因此携带了"新一轮对话开始"的信号;普通子词拆分是把同样的文字用普通词表切成好几段,字节内容完全一样,但模型接收到的数字编号不同,不携带那种特殊信号。
Q2:为什么Qwen3-8B在这个实验里表现得和其他模型不一样?
A:Qwen3-8B在生成回答前会输出一段内部思考过程,能通过分析文字内容自己判断出对话边界是否可疑,所以它不太依赖保留词元的特权向量。研究者把这段思考功能关掉后,Qwen3-8B的身份差距立刻从8.1个百分点跳到49.8个百分点,说明它平时是靠推理这层保护壳挡住了漏洞,本质上和其他模型是一样的。
Q3:现有的分词器防御选项能完全解决这个问题吗?
A:不能。Hugging Face的split_special_tokens选项只对配置文件里声明为"特殊"的词元生效,但很多工具协议相关的标记(比如工具调用、工具返回结果的标记)常被声明为"非特殊",不在这个选项覆盖范围内。研究团队查了400个热门模型,发现64%的分词器配置都存在这种漏防区域。
好文章,需要你的鼓励
GeoVerse融合几何潜在扩散模型与Wan2.2视频生成先验,并引入全局空间记忆机制,实现了跨视角一致、生成质量高且推理速度快的新视角合成,在多个数据集上大幅超越现有方法GLD。
本文解读TT-VidT,一种通过分离外观锚点与动作令牌、结合Diff Compression训练目标的视频自监督方法。在24种架构目标组合的受控实验中,仅TT3D与Diff Compression搭配才能进入强动作敏感区,且计算量比同类方法降低近一半。
Q&A Q1:Imprint Reader是什么? A:Imprint Reader是上海人工智能实验室团队开发的模型,通过SMaRT训练方法学会读取另一个模型冻结的权重更新,把参数层面的变化翻译成自然语言描述,判断这次更新到底注入了什么知识或诱导了什么行为习惯。 Q2:MetaEdit能做什么? A:MetaEdit能把Reader对目标行为的梯度信号迁移到原始模型上,不需要任何目标任务的训练数据,只用一句行为描述就能定向调整模型参数,已经在安全性拒绝率调节、数学推理风格转变和工具调用能力提升上验证过效果。 Q3:Imprint Reader读权重更新的准确率高吗? A:目前还不高,知识类目标的Pass@100只有2%,行为类目标是16%,说明自由生成描述的可靠性有限,但相比原始模型完全答不出来的0%基线,已经证明了权重更新的自然语言读取是可行的。
统一多模态模型能看也能画,理论上该会自我修正。本论文提出UMM-Reflection,用整条轨迹的强化学习联合训练诊断和修图能力,GenEval提升12分,且迁移到多个未训练基准,揭示RL提升的是选择可靠性而非新能力。