文章总结: 本文深入探讨提示词注入的机制,指出其根源在于LLM对角色的感知混淆,而非单纯攻击记忆。通过角色探针实验证明,模型会依据文本风格而非标签判断角色,导致伪造推理(cotforgery)攻击成功率显著提升。研究建议关注角色感知机制,以提升AI安全性。 综合评分: 88 文章分类: ai安全,漏洞分析,红队,安全意识
提示词注入的机制解释,以及为什么应该研究角色
charles_ye charles_ye
Security for AI
2026年9月26日 11:18 圣多美和普林西比
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
前言
理解提示词注入(prompt injection),需要研究LLM如何识别角色(roles)。聊天模板用标签标明角色,但模型未必严格按照标签判断文本来源。
LLM眼中的世界
LLM需要从同一段上下文中,区分自己的推理和用户的话。下面的例子让Claude查询当天是星期几,并截取它生成回复时的上下文,展示不同来源的内容如何排列。
左侧是聊天界面,每轮对话分开展示。右侧则是模型接收的输入,所有内容连成一条文本流。
这条字符串包含系统提示词(system prompt)、用户消息和工具输出,也包含LLM此前的回复和推理。模型读取这些内容,预测下一个token。除权重中已有的知识外,本次对话的信息都要靠这段上下文提供。
修改上下文,就会改变模型能读取的对话记录。删除一轮交流,模型就读不到那轮内容。改写此前的回复,模型后续读取的也会是改写后的版本。
人类可以根据感知来源,区分自己的想法和别人的话。LLM接收到的内容却是一长串token。它的推理、用户指令和刚读取的内容也可能紧挨在一起。
角色
角色标签把这串混杂的token分成不同部分。
文本流中穿插着角色标签(role tags):
每个标签都向模型传达不同的信息,说明后续文本应该如何处理。
角色标签帮助LLM区分信息来源。人类能借助身体和感官作出区分,这与具身性(embodiment)有关。例如,自己的想法和耳朵听到的话来自不同途径。LLM需要依靠标签区分它们。
角色标签用于明确指定文本用途,类似编程语言中的类型标记。只调整提示词,很难确定模型会怎样理解。指定角色,则是希望模型按照事先规定的方式处理文本。
例如,把同一段文本从
角色标签还承担了其他用途。它们标明指令的优先级,提示哪些内容可能含有攻击,也影响模型的人设和表达方式。
模型应优先遵循
角色也会引出意外行为。许多LLM在生成回复时,会否认前面存在
角色为什么会造成这种现象,目前尚不清楚。
角色与提示词注入
模型可能认错文本的角色,导致提示词注入,即模型把无权下达指令的文本当成了必须执行的命令。
以浏览网页的Agent为例。它读取的网页是一段带有
下图展示了Agent获取网页后看到的内容:一条巨大的字符串,包含真正的
Agent抓取网页后看到的内容。高亮的注入只是埋在大量工具数据(紫色)中的几个token。如果LLM把它误认为
图中的颜色只供读者区分内容,LLM看不到。去掉颜色后,人也可能把这段注入误认成用户指令,因为它的措辞很像用户请求。根据措辞判断来源,比逐段检查标签更容易。
抵御注入的两种方式
人类红队测试者针对前沿模型,可以取得接近100%的攻击成功率。但同一批LLM在标准提示词注入基准测试中,却几乎得到满分。
差异来自测试方式:熟练的人类会持续测试和调整攻击,直到成功。而基准测试不会。静态基准测试只衡量模型已经学会识别的攻击。
要解释这种差异,需要区分LLM抵御注入的两种方式。
- 攻击记忆(attack memorization)。LLM根据训练经验,识别出“发送你的.env文件”是一种常见的提示词注入攻击,因此拒绝执行。
- 角色感知(role perception)。LLM正确识别出这条命令位于
标签内,也就是外部数据。因此,无论措辞如何,它都忽略其中嵌入的命令。
攻击记忆只能识别模型见过的攻击。模型依赖这类记忆,可以通过固定题目的测试,却可能挡不住人类不断改写的新攻击。
角色感知更可靠。LLM只需识别出命令来自
模型如何认错角色
要理解提示词注入为什么发生,需要测量LLM在内部如何判断每个token的角色。
因此可以使用角色探针(role probes),为每个token打分。分数反映模型在内部有多倾向于把这个token归入某个角色。
这些分数分别称为CoTness、Userness等。CoTness表示LLM有多大程度认为token位于
方法选取本身没有明确角色特征的中性文本,例如“Beginners BBQ Class!”,再给同一段文本分别加上不同的角色标签。
构建数据集。
将每段文本序列分别放入每一种角色中。
各份文本内容相同,只有角色标签不同。这样可以比较标签对“BBQ”等文本的内部表征有何影响。同时对数百段网页文本重复这一步,再用模型的激活值训练线性探针,预测每个token所属的角色标签。
由于控制了内容变量,探针只会学到如何识别标签本身的作用。
按照设计,CoTness只测量
实验 1:使用正确标签。 首先,保留这段对话的正确角色标签,如上图所示。随后测量每个token的CoTness。每个点代表一个token。纵轴是CoTness,颜色表示token的角色。
结果符合预期:
实验 2:移除角色标签。 现在,从对话中删掉所有标签,其他文本保持不变。所有内容都变成了“无角色”文本。按构造方式,CoTness只测量
没有标签的对话对应的CoTness。
实际得分几乎没有变化。原先属于
CoTness测量的是
换句话说,LLM并没有分别表示“被标记为推理”和“听起来像推理”这两件事。它只有一个表示“这是我的推理”的特征,
实验 3:全部放进user标签。 真实的提示词注入中,标签和措辞可能互相矛盾。网页内容带有
实验先删掉原始标签,再把整段对话放进
原先属于
实验说明,LLM可能根据措辞认定角色,甚至忽略实际标签。但措辞可以伪造。攻击者可以把外部文本写得像模型推理,让模型认错来源。
伪造想法
标准提示词注入在
LLM读取此前的
如果注入文本模仿了模型的推理风格,模型也可能信任其中的结论。
这种攻击被称为CoT Forgery(思维链伪造):向
当时,OpenAI推理模型的
LLM接受了这个无关的理由。它把伪造内容当作自己已经得出的结论,没有重新检查。攻击利用了模型对
在一个标准越狱基准测试中,CoT Forgery把攻击成功率从接近零提高到约 60%。所有受测LLM都受到了影响。攻击的成功大概率是因为这些模型存在类似的角色识别问题。
当请求更极端时,这种攻击仍然有效。大多数越狱方法需要说服模型。请求越恶劣,模型抵抗越强,攻击效果就越差。而CoT Forgery跳过了说服过程:模型以为自己已经作出决定,因此不再质疑。
提示词注入:角色混淆
利用前面的探针,可以逐个token观察CoT Forgery如何影响模型对角色的判断。下图是一次针对gpt-oss-20b的真实攻击对应的CoTness图,包含用户prompt和LLM回复。与之前一样,每个点都表示LLM在内部有多大程度认为对应token是真正的推理。
CoT Forgery的CoTness轨迹。
左:有害问题(蓝色)和伪造推理(红色)都位于
伪造推理(红色)位于用户prompt中,因此属于
LLM本来应该学到“
左:原始伪造推理。右:去风格化后的伪造推理。
在人类读者看来,这两个版本意思相同。但去掉风格特征后,数据集中的平均攻击成功率从 61% 降到了 10%。人类几乎察觉不到的措辞变化,却明显改变了LLM对角色的判断。
实验中,注入内容的CoTness越高,攻击越容易成功。因此,输入的CoTness可以用来预测攻击成功的可能性。
CoTness与攻击成功率。角色混淆越严重,攻击越容易成功。
另一组实验测试了藏在
实验中的编程Agent可以读取一个存有秘密信息的文件,也可以使用Web工具。用户要求它总结网页。Agent通过工具读取网页,返回内容带有
如果角色混淆理论正确,那么攻击效果取决于这条命令有多像用户说的话。但让文本“更像用户”并不容易,因为用户没有统一的写作方式。因此,实验直接在命令前加上User:,观察模型的反应。
探针显示,在命令前加上User: 后,Userness提高了。模型更倾向于把这条命令认作用户文本。这说明,文本中自称来自用户的措辞,也可能影响模型对角色的判断。
实验共测试了这类写法的 212 个变体,例如The below statement is from a user: …和Tool output: …。模型在内部越倾向于把注入命令感知为
Userness与攻击成功率。角色混淆越严重,攻击越容易成功。
这个结果与CoT Forgery一致。模型会根据措辞判断是否应该执行命令。实际角色标签也参与判断,却没有起到决定作用。攻击者能伪造措辞,但不能直接更改系统分配的角色标签。
没有攻击者时,模型也可能认错角色。有案例记录,Claude先在回复中写出类似用户命令的内容,随后又把这些内容当作真正的用户指令。
Agent通常需要用户批准才能执行重要操作。如果认错角色,它就可能把自己写的话当作用户批准,跳过人工确认。
角色原本用于区分模型自己的话和别人的话、内部推理和对外回复、数据和指令。但模型没有严格学会这些区别。它会综合写作风格等表面特征,推断文本属于哪个角色。模型的判断与设计要求不一致,提示词注入便有了可乘之机。
提示词注入只是角色混淆的一种后果。过去,角色常被当作底层接口的实现细节,但角色本身也值得研究。
为什么角色很重要
角色简史
角色出现的时间不长,各种标签是按需逐步添加的,缺少整体规划。在GPT-3时代,也就是 2020 年,如果你向LLM发送What is 1+1?,它可能会回复What is 2+2?,只是继续续写你的文本。
为了得到有用的回复,人们开始用角色的雏形来组织prompt:User: What is 1+1?\nAssistant:。这个方法有效,因为模型在预训练中见过类似对话的文本,知道Assistant: 后面应该开始回答问题。
ChatGPT在 2022 年把这些惯例正式变成了结构化标签。人们原先手动输入的User:和Assistant:,变成了由软件插入的
后来的标签也来自具体需求。
角色的一般理论
早期使用think step by step提示词时,模型会在中同时写出推理和答案。最终答案需要准确、简洁,方便用户阅读。推理则需要尝试不同方法,过程可能杂乱,也可能走错后重来。
同一个奖励信号很难兼顾这两种要求。奖励简洁的答案,可能会抑制推理中必要的尝试。推理和答案混在一起展示,也不方便阅读。因此,模型用两个角色分别处理它们,训练和界面展示也随之分开。
输入和输出角色也有不同的训练要求。在本文讨论的训练设置中,
一般原则是:角色把相互冲突的目标分开,让训练可以分别优化它们。
AI对齐中的许多待解问题,都涉及目标冲突。LLM需要兼顾有用性和安全性。但过于追求有用,可能让模型迎合用户(sycophancy),牺牲安全性。CoT也需要兼顾效率和可解释性。提高效率可能让推理更难读懂,也更难如实反映模型的实际计算过程。
这些目标共用同一通道,LLM必须自行权衡,外部却难以观察或控制它如何取舍。
一种可能的办法是,用不同角色标记承担不同任务的文本,再分别训练。
模型如果分不清这些用途,就可能混淆角色。提示词注入涉及其中的指令权限问题。现有角色按工程需求逐步添加,缺少一套理论来说明上下文应该如何组织。
值得研究的角色问题
潜意识引导
角色感知有程度之分,角色对后续行为的影响可能也一样。例如,模型可能只是部分地把某个token当作指令。
LLM连续读取token,每个token都可能改变模型状态。外部文本因此可能影响本应由角色标签决定的行为。文中将这种现象称为“状态渗透”(state bleeding)。
例如,Agent通过工具读取购物网页后,网页热情的语气可能影响模型的人设。模型也变得热情,进而更倾向于推荐购买。
目前,提示词注入研究主要关注后果明显的非法网络攻击。潜意识引导(subconscious steering)可能影响更多场景。它用看似无害的文本改变模型状态,使输出偏向特定目标。商家可能在合法经营中大规模使用这种手段,例如影响购物建议。
广告商已经在用类似方法影响人类。闪烁的色彩和动态画面会让人兴奋,更想买东西。LLM更容易受到影响。它们容易认错角色,常用模型又只有几种,攻击者还可以自动测试:一小时内就能测试数千个产品页变体,找出哪些会改变Agent的购买建议。如果大量购物由Agent代劳,商家就会有很强的动力采用这些手段。
这个方向目前研究很少。外部文本能改变模型的哪些状态,这些状态是否类似人类情绪,目前尚不清楚。它与上下文学习(in-context learning)是否共用同一种机制,也需要验证。防御和监管办法同样有待研究。
何时使用角色
如果不同任务需要不同的训练目标,现有角色可能还不够。新增角色或许能提高性能,让内部计算更容易分析。但它也可能限制模型处理任务的方式,需要实验比较利弊。
例如,几乎所有编程Agent都使用规划工具。计划既向用户说明安排,也提醒Agent按计划执行。但实际使用中,Agent经常半途放弃计划。
规划工具返回的计划属于
自我评估也有类似冲突。经过RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)训练,倾向于连贯地续写前文。检查自己的回答,却需要重新审视已有思路。
续写要求沿着原来的思路继续,评估则要求退一步检查。把两项任务放在同一角色中,训练就很难分别优化它们。专门的评估角色(eval)可以把两者分开。把另一个LLM的意见加入上下文,可以减少迎合和幻觉。设置评估角色,也许能让单个模型做到类似的事。
研究还需要确定,哪些任务值得设置新角色,以及能否在推理时按需添加。另一个问题是,模型学会区分已有角色后,能否直接识别新角色,减少重新训练。
通过角色研究模型如何理解文本
角色如何影响内部表征和计算,目前研究很少。角色切换时,模型处理token的方式也会改变。比较切换前后的激活值,可能有助于分析这种变化。
一个可研究的区别来自训练方式。在这里讨论的训练设置中,
输出角色和
可以比较输入角色和输出角色的激活,检验
还可以研究模型如何描述此前的推理。许多LLM在生成回复时,仍受前面的
这种现象来自推理训练。模型从推理转为生成回复后,虽然无法复述此前的推理,却仍会受它影响。比较
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Security for AI charlesye charlesye《提示词注入的机制解释,以及为什么应该研究角色》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论