趋近智
如我们所知,输入提示词 (prompt)是与大型语言模型交互的主要接口,因此也是一个重要的攻击面。恶意构造的输入可以诱骗大型语言模型泄露敏感信息、生成有害内容,甚至在连接到其他系统时执行意外操作。本节侧重于第一道防线:在用户输入抵达大型语言模型之前对其进行校验和清洗。这些做法是构建更安全、更可靠的大型语言模型应用的根本所在。
尽管常被互换使用,输入校验与输入清洗在大型语言模型系统防御中扮演着独特但互补的功能。
输入校验是指在数据进一步处理之前,检查用户或外部系统提交的数据是否符合一组预设规则的过程。这些规则可以涉及数据类型、长度、格式、范围,或是否符合特定模式。如果输入未能通过校验,通常会直接拒绝,并常会向发起者返回错误消息。对于大型语言模型,校验可能包括检查:
输入清洗更进一步。它并非仅仅拒绝不符合要求的输入,而是试图清理或中和输入中潜在的恶意元素。这涉及通过移除、替换或编码可能有害的部分来修改输入。目标是使输入安全,以便大型语言模型和任何下游组件进行处理。对于大型语言模型,清洗对于处理以下情况特别重要:
实践中,校验与清洗通常一起实施。输入可能会首先进行基本符合性校验,如果通过,随后进行清洗以移除任何潜在威胁。
一个典型的流程,用户输入在抵达大型语言模型之前会经过校验和清洗。
保护大型语言模型从严格审查喂给它们的内容开始。以下是一些既定策略:
白名单(优先允许): 这种方法确切定义了可接受的输入。任何未明确列入白名单的内容都会被拒绝。例如,一个与非常特定的API交互的大型语言模型可能只允许与严格架构匹配或包含特定命令的输入。
黑名单(优先阻止): 这种方法定义了什么是不可接受的输入。输入会对照已知恶意模式、关键词或字符列表进行检查,然后这些内容会被阻止或清洗。
对于大型语言模型,混合方法通常更具实用性:对结构元素或API参数 (parameter)进行严格校验(更像白名单),同时结合使用黑名单来应对自然语言提示词 (prompt)中已知的恶意文本模式。
实施有效的输入防御涉及一系列技术。以下是一些常用于大型语言模型系统的技术:
正则表达式是识别文本中特定字符序列或结构的有力工具。对于大型语言模型输入,正则表达式可用于:
示例: 捕捉常见注入短语的简单正则表达式(不区分大小写):
/(ignore|disregard).*(previous|above).*(instructions|prompt)/i
尽管有用,但仅仅依赖正则表达式是脆弱的。攻击者可以使用混淆技术(例如,拼写错误、同义词、字符编码)来绕过简单模式。
这涉及维护关键词或短语列表,这些关键词或短语表明恶意意图、违反策略或要求有害内容。
像一般性的黑名单一样,关键词列表需要随着语言和攻击方法的演变持续更新。
限制输入提示词 (prompt)的长度有助于预防:
设置合理的提示词长度上限(例如,几千个令牌)是一种好做法。复杂性也可能是一个因素,尽管对于自然语言来说更难直接量化 (quantization)。
攻击者可能使用非标准字符编码或Unicode技巧(例如,同形字、零宽度空格)来混淆恶意载荷。
对于更复杂的交互,特别是当大型语言模型是更大系统的一部分或期望结构化输入时(即使该结构嵌入 (embedding)在自然语言中),分析输入结构可能是有益的。
这种技术涉及在实际系统提示词(你提供给大型语言模型以引导其行为的提示词,而非用户输入)的前缀或后缀添加一个难以猜测的、独特的字符串(“金丝雀”或“哨兵”)。
一种更高级的技术涉及一个独立的、受信任的过程(也许是另一个具有更严格控制的大型语言模型),在将用户的查询发送给主要大型语言模型之前,将其转述或重构成更安全的形式。
尽管这些技术有价值,但有效实施输入校验与清洗也伴随着一系列挑战:
有效校验和清洗输入是确保你的大型语言模型应用安全的重要一步。它是在数据有机会影响大型语言模型行为之前,创建一个严格审查每一条数据的检查点。正如你将在本章后面的实践练习中看到的,即使是基本的清洗程序也能显著提升安全性。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造