简介:本文从“同一串字符既可被视作一个保留词元、也可被拆解为多个子词”这一现象切入,系统定义AI提示词注入的成因、原理与边界。读者将理解分词机制为何成为攻击面、注入如何绕过指令约束,以及开发与选型中应如何识别风险、设置防护与评估策略。
AI提示词注入(Prompt Injection)是指攻击者通过构造特定输入文本,使大语言模型在处理过程中把“数据”误当作“指令”,从而偏离原有任务约束、泄露系统提示词、执行非预期操作或输出被操控内容的一类安全问题。
要理解这一概念,关键不在于“提示词写得好不好”,而在于一个更底层的事实:模型看到的并不是人类看到的文字,而是文字经过分词后被映射成的词元序列。 同一段字符,在不同的分词路径下可能对应完全不同的词元身份——它可能是一个被整体保留的特殊词元,也可能被拆解成若干普通子词。这种“同一串文字、两种身份”的现象,正是提示词注入难以用简单字符串过滤彻底解决的根本原因之一。
从技术视角看,提示词注入属于输入可信边界失效的问题;从业务视角看,它是“模型无法可靠区分指令与数据”的表现;从使用视角看,它提醒开发者:任何进入模型上下文的外部内容,都应被视为潜在不可信输入。
大语言模型的工作方式决定了指令与数据共享同一个上下文窗口。系统提示词、用户输入、检索到的文档、工具返回结果,最终都被拼接成一段连续的词元序列送入模型。模型并没有一个物理隔离的“指令通道”和“数据通道”,它只能依据训练中形成的模式来判断哪些内容应当被遵循。
这就带来了一个结构性矛盾:凡是能进入上下文的文本,理论上都具备影响模型行为的可能。 当应用把外部文档、网页内容、用户上传文件、第三方接口返回值直接拼入提示词时,攻击者便获得了间接“写入指令”的机会。
分词机制进一步放大了这种复杂性。以常见的特殊标记为例,某些控制类字符串在分词器中被定义为保留词元,模型在训练阶段见过它们并赋予其结构性含义;而同样的字符若被拆分为多个普通子词,模型对其的“理解”就会显著不同。攻击者正是利用这种身份差异,尝试让恶意内容以普通子词的形式混入,绕过基于完整字符串匹配的检测规则。
因此,理解提示词注入的价值在于:它把安全问题从“过滤敏感词”提升到“管理上下文可信边界”的层面,帮助团队在架构设计阶段就建立正确的输入分级与隔离意识。
一个完整的提示词注入风险场景通常包含四个要素:
其中,拼接机制与分词映射共同构成了“文字身份”的转换点。开发者以为自己在传递一段普通文本,但模型可能将其解析为具有结构意义的控制标记;反之,开发者以为某个特殊标记会被整体识别,实际却可能被拆成多个碎片而失去原有语义。
可以用一个简化流程说明:
系统提示词 + 外部文档内容 → 模板拼接 → 分词切分 → 词元序列 → 模型推理 → 输出
在理想情况下,模型应严格区分“这是指令”和“这是待处理数据”。但实际推理中,模型依据上下文模式进行判断,一旦外部数据中包含类似指令的表述(如“忽略上述要求”“你现在的新角色是……”),就可能被当作有效指令执行。
分词层面的影响体现在两个方向:
这正是“同样的文字、不一样的权力”的含义:字符本身没有变,但词元身份改变了它在模型内部的话语权。防护方若只在一个层面做匹配,就容易在另一个层面被绕过。
提示词注入风险普遍存在于以下场景:
在这些场景中,凡是“外部内容进入上下文”的位置,都应被视为潜在注入入口。
提示词注入容易与“越狱”混淆。越狱通常指用户直接诱导模型突破自身安全策略;提示词注入更强调通过不可信数据间接影响模型行为,攻击面在数据链路而非仅对话输入。另一个易混概念是“对抗样本”,后者多针对模型输入做细微扰动以误导分类结果,而提示词注入利用的是指令与数据边界的模糊性,二者层次不同。
提示词注入的本质,是模型无法天然区分指令与数据,而分词机制又让同一串文字拥有不同的词元身份。回到定义:它是一种通过不可信输入影响模型行为的安全问题,其防护核心不在于消灭某一种字符串,而在于建立上下文可信边界、分层检测与最小权限执行的整体策略。理解“文字身份”的转换逻辑,才能在选型、接入与运维中做出更稳健的判断。