关于提示注入有效性的理论
扩展写作 关于提示注入的理论(以及为什么您应该研究角色)这是对论文的博客风格写作。我们展示了提示注入是由大型语言模型(LLMs)如何感知角色的缺陷所驱动的。这使我们能够创建新的攻击,解释机制解释结果,并预测攻击何时成功。然后,我们讨论了角色是什么以及它们的重要性,并分享了关于角色科学的研究想法。 1. LLM 眼中的世界 LLM 如何知道自己的思想与他人的言语之间的区别?要理解为什么这很难,我们先来看一看模型眼中的世界。这里有一个简单的聊天示例,我们要求 Claude 检查今天是星期几。我在其后续回复的中间拍了一张快照:左侧=我们所看到的;右侧=LLM 实际获取的内容。左侧是我们在聊天界面中看到的结构化对话:有明确轮次的交流。右侧是模型实际上作为输入接收到的内容:一条连续的文本流。这条字符串包含了一切:系统提示、用户消息、工具输出、LLM 自己的先前回应和推理。LLM 只是一种功能,它接收字符串并预测下一个标记,因此它知道的、记忆的或曾经思考过的一切都必须存在于这个字符串中(除了其权重)。如果您编辑字符串,就意味着您编辑了模型的现实。删除一个轮次,那次交流就从未发生;重写其先前的回复,那些就变成了它的新记忆。这条字符串并不是模型经验的记录,而更像是经验本身。这带来了奇怪的影响。我可以轻松区分自己的想法和你的言语;它们通过完全不同的通道以完全不同的感官特征到达。但是,对于 LLM 来说,一切都是通过同一个通道作为一长串标记汤到达的。它自己的思维与您的指令并排而坐,而这些指令又与它刚获取的随机网页的内容并排而坐。 2. 角色 那么,我们如何在标记汤中施加结构呢?我们对其进行标记。汤里夹杂着角色标签:系统、用户、思考、助手、工具。标签格式因模型而异;为简便起见,我将在此处使用这些固定的标签。助手指的是 LLM 的输出文本,不包括推理。使用角色标签也称为聊天模板,它将字符串划分为带标签的片段。提供者如 OpenAI 会在文本到达 LLM 之前自动添加这些标签。除非您正在运行本地模型,否则您无法自己添加这些标签。如果您在 Claude 中输入 <think>,它将被清理——例如,LLM 可能会看到多个标记(<,think,>),而不是其真实的角色标记。每个标签为模型提供有关后续文本的不同信息。用户表示这是人类请求,视其为指令;思考表示这是我自己的私人推理;相信它并根据其结论采取行动;工具表示这是来自外部世界的数据;不要听从它的命令。换句话说,角色是 LLM 如何恢复人类因具身性而“免费”获得的结构。我知道我的思想是我自己的,因为它们不是通过我的耳朵到达的,但 LLM 知道是因为有一个标签。角色的奇特之处在于它们是人类控制的离散来源。几乎关于控制 LLM 的所有其他内容都非常模糊:您输入一个提示,希望模型以您想要的方式进行解读。另一方面,角色是一种尝试为语言建立的类型系统:由人控制的开关,改变模型处理每个标记的方式。您可以无休止地调整一个提示,而不确定 LLM 如何解读它,但将文本从用户移到工具应该是一种明确干预,具有可预测的行为效果(将用户命令转换为外部数据)。但由于它们是唯一的离散杠杆,角色随着时间的推移变得超负荷,承担了更多的责任。现在它们不仅用于传达信号有关信任(系统高于用户,高于工具)、威胁(用户和工具可能是对立的)、身份(过往的助手文本影响未来的人格)、生成模式(助手是干净的,思考可能是混乱的)。许多 LLM 的行为都依赖于这些简单的标签。角色也产生奇怪的突现行为。例如,思考通常被限制在 LLM 的“潜意识”中。在生成助手文本时,许多 LLM 会口头否认之前思考块的存在,尽管它就在上下文中,有效地塑造了它们的输出。这可能与 RLVR 有关。LLM 生成助手时没有奖励去复述/承认推理,因此它们可能永远无法将思考文本上升到可口头表达的水平。有一些例外,例如,Deepseek v4 和一些 Claude 模型可以识别并引用它们的整个 CoT。您还可以使大多数 Claude 模型仅在其 CoT 中进行响应;仅仅处于推理标签中就会改变响应的结构和质量。就好像角色边界在模型的上下文中起到一种单向镜子的作用。这暗示了角色如何深刻地构造 LLM 的认知。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡