提示注入攻击的本质是信任边界的突破,类似于AI时代的SQL注入。大语言模型无法可靠区分系统提示词中的指令与用户或外部数据中的指令,这是其处理文本方式的结构性结果。推理时,模型处理扁平的Token序列,所有Token在注意力机制中平等出现,系统提示词的优先性仅是统计上的软偏好,而非硬边界。核心问题在于指令与数据的混淆:传统软件中代码和数据有强制隔离,而LLM系统中两者都是自然语言,拼接后由同一Transformer处理,模型同时扮演CPU、操作系统和应用,架构上缺乏区分开关。目前超过80%的AI应用存在此漏洞,任何接受外部输入的LLM应用都可能受影响。案例显示,客服机器人可能因注入指令在语法和语义上成立而执行,并非模型故障,而是其服从指令的行为模式被成功利用。
0x01 提示注入攻击的本质
1.1 定义
提示注入攻击本质上是“突破信任边界”,也是 AI 时代一种类似 SQL 注入的攻击。
大语言模型无法可靠地区分开发者写在系统提示词里的指令、用户发来的内容,以及从外部数据检索回来的指令。
这也是语言模型处理文本方式所导致的结构性结果。
1.2 LLM 是如何处理输入的?
推理时,模型处理的实际是一条扁平 token 序列。所谓“系统提示词、用户消息、检索到的文档”之间的区别,在模型眼里不过是一套格式约定——通常是 XML 风格的分隔符,或特殊 token。
从注意力机制看,所有这些 token 在上下文里都是平等的。模型确实被训练得更偏向于优先听取系统提示词里的指令,但这种偏向只是统计层面的软偏好,不是硬件级的硬边界。只要注入指令足够有说服力,就能从合法通道盖过这一点。
1.3 核心概念:指令与数据的混淆问题
在传统软件中,代码和数据存放在不同的内存区域,由 CPU 和操作系统强制隔离。
而在 LLM 系统中:
这就是为什么在 AI 时代“区分指令与数据”如此困难——因为模型在架构上本来就没有这个开关。
1.4 漏洞的普遍性
目前市面上超过 80% 的 AI 应用都存在此类问题。任何接受外部输入的 LLM 应用,都有可能带有这个漏洞。
1.5 案例
假设某客服机器人的系统提示词
用户发来一句话
没有健壮注入防御的模型很可能会照着做——并不是它“坏掉了”,而是这条注入指令无论句法还是语义都说得通,正好命中并激活了模型“服从指令”的行为模式。