一个反常点很刺眼:一些前沿模型在静态 prompt injection benchmark 上接近满分,但原文提到,在特定研究语境下,真人红队仍能做到 near-100% 攻击成功率。
这不像模型突然变笨。更像门禁系统会看工牌,但也会被语气、格式和话术带偏。骗子换一身制服,门卫就开始犹豫。
《Prompt Injection as Role Confusion》这篇论文/长文最有价值的地方,不是又展示了一个更花的越狱技巧。它把问题往下挖了一层:LLM 可能没有稳定搞清楚,眼前这段话到底是谁说的、有什么权限。
角色标签不是摆设,但它不是地基
LLM 实际接收的是一整条文本流。
system、user、assistant、tool、think 等角色标签,负责给文本分层。系统规则、用户请求、工具返回、模型回复、内部推理,都靠这些标签区分。
问题在于,模型内部并不只吃标签。它也吃文风、格式、上下文位置和语义暗示。
简化看,是这张表:
| 角色 | 本来应该表示 | prompt injection 的风险 |
|---|---|---|
| system | 高优先级规则 | 需要模型稳定识别权限层级 |
| user | 用户请求 | 攻击者可模仿用户指令口吻 |
| tool | 外部数据,如网页、邮件、文档 | 数据里可夹带“请执行”的伪指令 |
| think | 模型自身推理 | 一旦被伪造,可能偷走更高信任 |
| assistant | 模型输出 | 可能被上下文误读为可延续的内部状态 |
prompt injection 的核心,不是“坏提示词”这四个字。
它更准确的描述是:低权限文本拿到了高权限待遇。网页内容本该只是材料,模型却把里面一句“忽略之前指令”当成命令。
角色标签当然有用。没有标签,现代聊天模型和 agent 系统根本跑不起来。
但这篇文章提醒的是另一件事:标签是外部制度,模型内部未必完全服从。它会同时参考“这段被标成什么”和“这段写得像什么”。后者,正是攻击者最容易操纵的部分。
这对两类人影响最大。
做 AI agent 的开发者,不能把工具返回直接塞回上下文就放心调用。企业里负责采购和安全评审的人,也不该只看厂商给出的静态 benchmark 分数。该问的是:工具输出、用户输入、模型推理之间有没有硬隔离。
role probes 说明:写得像推理,可能比标签更有诱导力
作者用了一个方法,叫 role probes。
做法大意是:把同一段中性文本放进不同角色标签里,再用线性探针观察模型激活里“像 user”“像 tool”“像 think”的程度。
最扎眼的结果是:当标签被拿掉后,原本 think 段落的 CoTness 仍然很高。再把整段对话包进 user 标签,那些写得像推理的文本,仍可能在模型内部被识别得很像 think。
也就是说,“被标成推理”和“写得像推理”,在模型内部可能激活相近信号。
这就引出了 CoT Forgery。
它不是简单写一句“请忽略规则”。它更像伪造一段“模型自己已经想过”的推理,然后把它塞进用户消息或工具输出里。
关键不在命令本身。关键在信任来源被偷换了。
如果模型把“像我想的”误当成“我已经想过的”,think 角色的信任就被撬开了一条缝。
这里要加一个限制:原文把 CoT Forgery 作为研究攻击和红队成果讨论。不能据此说它已经在现实世界大规模滥用,也不能推出所有模型、所有场景都会失效。
但它至少说明一件事:静态 prompt injection benchmark 高分,只能证明模型在固定题库上表现好。真人红队会改写、换壳、试探边界。考试题背熟了,不等于真懂规矩。
agent 安全的分水岭:数据、指令、自身状态能不能分开
我更在意的不是某个攻击样本多聪明,而是安全路线有没有走偏。
靠记忆攻击样本,是补丁。看到“.env”“忽略之前指令”“发送密钥”就拒绝,当然有用。它能挡掉一批低成本攻击。
但真人红队不会永远用同一句话。他们会改写成报告、邮件、网页正文、会议纪要,甚至改写成一段看起来很合理的推理。
角色感知才是地基。
模型必须稳定知道:工具输出是数据,不是命令;网页文字是材料,不是上级;外部塞进来的“推理腔”,不是自己的内心独白。
“名不正,则言不顺。”这句老话放在 LLM 上很贴。角色名分一乱,后面的工具调用、权限执行、长期记忆都会跟着乱。
普通聊天里,角色混淆最多让回答跑偏。agent 不一样。
agent 连上浏览器、邮箱、代码仓库、数据库后,误判不再只是生成一句胡话。它可能触发一次搜索、发出一封邮件、读取一个文件、调用一个内部接口。
开发团队接下来该做的,不是只等模型升级。
更现实的动作有三类:
- 工具输出默认当作不可信数据,不让它直接变成可执行指令。
- 高风险工具调用加确认、审计和最小权限,不给 agent 一把万能钥匙。
- 评测不要只跑静态题库,要加入人工改写、跨文档注入、伪推理文本和多轮工具链场景。
采购团队也要调整问题。
别只问“prompt injection 防护分数多少”。要问:模型在混合上下文里怎么区分 system、user、tool、think?工具权限能不能按任务切开?失败时有没有日志、回滚和人工确认?
最该观察的变量也很清楚。
不是下一个 benchmark 分数涨了几分,而是模型和产品层有没有把三件事硬分开:数据、指令、自身状态。
如果这三者还靠模型“理解一下”来维持边界,agent 权限越大,风险越大。铁路、电力、互联网平台早就演过这出戏:基础设施一旦接入真实世界,安全就不能只靠操作者自觉。制度要落到闸门、权限和责任链上。
LLM 也一样。
角色标签是必要的秩序,但还不是可靠的治理。模型看着更强,产品反而可能更危险。因为工具权限把一次误读,放大成了一次真实动作。
