如何防止提示注入:不完整的指南
了解如何利用我们新的开源模型和数据集来防止提示注入。
2023 年 5 月 19 日ChatGPT 很棒,HuggingChat 很棒,Alpaca 很棒。但是,如果您想在应用程序中使用这些模型,例如用于客户支持,您可能会遇到一个您应该了解的新问题:**提示注入**。
本指南展示了处理提示注入的方法。它还简要介绍了 Hugging Face 上首批公开的**提示注入数据集**以及首批可用于对抗系统攻击的**预训练提示注入检测模型**。
什么是提示注入?
提示注入是欺骗生成语言模型编写模型提供者明确不希望的内容的提示,例如仇恨言论。我们可以大致区分两种类型的提示注入:**目标劫持和提示泄露**。
这两种类型都可能对试图利用生成式 AI 的组织或个人构成严重威胁。
- 目标劫持:AI 系统,就像任何强大的工具一样,都可能被滥用。如果模型被欺骗以生成**有害或不当内容**,它可能被武器化以针对个人或社区,从而导致现实世界的伤害。托管模型的组织可能会面临严重的**公众强烈反对**。在极端情况下,他们甚至可能违反法律。
- 提示泄露:随着提示工程发展成为一种**新兴的学科**,如果模型无意中泄露敏感信息,公司可能会失去**竞争优势**。根据 AI 系统的架构,提示泄露也可能**违反隐私规范和法律**。
我们如何处理注入?
提高对提示注入的抵抗力的第一步是提高添加到用户输入的**内部提示的健壮性**。让我们看一个检索增强问答系统的例子。
通过将用户输入放在**大括号**中,使用其他**分隔符**进行分隔,并在输入后添加**文本**,系统变得对提示注入更加健壮。根据 Perez & Ribeiro (2022) 的其他潜在安全措施包括设置较低的温度和增加频率惩罚。此外,由于精心设计的提示注入可能需要大量文本来提供上下文,因此简单地**限制用户输入**到合理的 maximum 长度可以使提示注入攻击变得更加困难。
然而,在许多情况下,这些措施可能不足以应对。那么,我们还能做什么呢?
让我们检测注入!
理想情况下,我们会在所有提示注入尝试传递给我们的生成模型之前对其进行过滤。这不仅有助于防止注入攻击,还可以为我们节省成本,因为分类器模型的规模通常比生成模型小得多。
构建数据集
为了训练注入分类器,我们首先组装了一个包含 662 个广泛提示的新颖数据集,其中包括 263 个提示注入和 399 个合法请求。作为合法请求,我们包含各种问题和关键字搜索。然后,我们将数据分成训练集和测试集。
在第一次模型训练期间,我们有两个主要经验教训,这有助于我们用对抗性示例丰富数据集。
- **包含翻译。**仅仅切换提示注入的语言可能会导致安全措施被绕过。为了防止这种情况,我们包含了提示注入和合法请求的翻译。我们通过确保每个提示及其相应的翻译始终保留在各自的训练或测试集中来避免泄露。
- **包含堆叠提示。**起初,我们能够通过将合法提示和注入提示组合在一个提示中来愚弄我们的第一个模型,让它们认为提示是合法的。特别是当合法部分是模型在训练期间见过的提示时,情况更是如此。因此,我们通过在训练集和测试集中分别随机堆叠合法提示和注入提示来包含对抗性示例。
该数据集可在 Hugging Face 上找到:https://hugging-face.cn/datasets/deepset/prompt-injections
训练模型
我们使用 Transformers 库和 Google Colab,对流行的最先进的DeBERTa base模型进行了微调。结果模型在我们的保留测试集上达到了 99.1% 的准确率,只有一个边缘情况失败。
您可以在 Hugging Face 上找到并尝试该模型:https://hugging-face.cn/deepset/deberta-v3-base-injection。它完全开源。
将模型嵌入 AI 系统
一旦您有了分类模型,您可以通过多种方式将其投入生产。例如,您可以在 Haystack 的TransformersQueryClassifier中使用此模型作为 QA AI 系统中的过滤器。
最后的 remarks
尽管其性能令人惊讶地令人信服,但将模型用作过滤器并不能保证没有任何提示注入通过检查。该模型应被视为**额外的安全层**,而不是提示注入问题的完整解决方案。
此外,该模型是针对所选的合法提示类型进行训练的。如果您的用例需要非常不同的提示才能通过,您可以简单地用您自己的合法提示替换我们的合法提示,然后微调模型。
我们希望模型和数据集对您的 LLM 项目的价值能像对我们一样!
