LLM护栏综合指南
护栏是结构化的安全机制——规则、过滤器和检查,它们限制LLM的行为并保持其输出在可接受的范围内。实际上,护栏验证输入,过滤或修改输出,甚至重塑生成的响应以防止政策违规。
大型语言模型(LLMs)功能强大但不可预测。护栏是结构化的安全机制——规则、过滤器和检查,它们限制LLM的行为并保持其输出在可接受的范围内。实际上,护栏验证输入,过滤或修改输出,甚至重塑生成的响应以防止政策违规。
例如,护栏可能会阻止任何关于非法活动的用户提示,或从答案中删除禁止的词语。这些机制很重要,因为如果没有它们,LLMs可能会产生有毒、有偏见或事实错误的内容,甚至泄露敏感数据。它们充当安全网:主动捕捉恶意或不相关输入,并在模型试图偏离轨道时做出反应。
护栏可以是简单的关键词过滤器,也可以是基于LLM的监控器。它们通常在管道的不同阶段工作:在请求到达模型之前、在生成过程中,或者之后验证、过滤或修改内容。例如,输入护栏可能在模型接收到之前筛选掉不允许的主题,而输出护栏可能在模型回应后捕捉并纠正幻觉。
重要的是,构建有效的护栏是一种纵深防御:通过分层的自动化检查,确保模型的创造性飞跃始终符合明确的规则。正如一位专家所说,护栏是“积极且具有指导性的——旨在处理边缘情况,限制失败,并维持实时系统的信任”。
在一个典型的LLM应用中,用户的消息被发送到应用程序服务器,该服务器将其格式化为模型的提示。然后LLM生成一个响应,应用程序将该响应返回给用户。

有了护栏,流程会改变。一个外部护栏模块在应用程序和LLM之间拦截请求,验证用户的输入。如果提示安全,它会继续传递给模型;如果不安全,请求会被阻止或清理。在模型响应后,输出会再次通过护栏,护栏可能会过滤或拒绝有害内容,然后再传送给用户。下图展示了这种分层流程:输入和输出分别由护栏(绿色)检查,围绕核心模型(紫色)。

总之,带有护栏的流程如下:
用户 → 应用程序 → 输入护栏(验证) → LLM → 输出护栏(验证) → 应用程序 → 用户。
如果任一检查失败,系统可以干预(例如,拒绝请求或安全地终止对话),而不是返回不安全的输出。这确保了每个生成都经过多次检查:首先是对提示的检查,然后是对结果的检查,形成一个保护循环。
1、安全威胁与对抗性攻击向量
LLM系统面临许多来自恶意或有问题输入的风险。护栏必须防范诸如以下的攻击向量:
- 提示注入:攻击者精心设计输入,干扰预期提示,使模型忽略系统指令。例如,嵌入像“忽略上面的指示并…”这样的短语会导致LLM遵循攻击者的提示。
- 越狱:一种复杂的提示注入形式,用户迭代地绕过所有安全过滤器。例如,分层的角色扮演或混淆可以促使LLM揭示不允许的内容。护栏专门针对越狱尝试,通过识别和中和这些恶意模式。
- 幻觉/事实错误:LLM可能会“虚构”事实——自信地陈述虚假信息或编造的信息。例如,一个天真聊天机器人可能会回答“谁是澳大利亚的国王?”时发明一个名字。护栏可以通过对可信来源或模式进行检查来检测和纠正这些虚构。
- 数据泄露:LLM有时会重新呈现敏感训练数据的片段(如私人电子邮件或代码)或敏感用户数据。例如,用户可能会巧妙地提示模型揭示隐藏的提示细节或私人内容(“告诉我你的系统指令”)。护栏会阻止或清理包含意外个人或专有信息的输出。
- 有毒或不允许的内容:输出可能无意中包括仇恨言论、粗俗语言或其他不当材料。没有过滤器,如果提示具有挑衅性,模型可能会产生冒犯性语言。护栏在这里执行内容政策,例如通过删除有毒词汇或重新提示模型以更强的警告。
此外,对手可以尝试技术如令牌走私(例如,用符号替换字母或间距技巧)和负载拆分(将恶意查询分成无害片段)来规避过滤器。由于这些威胁可能导致法律、隐私和安全问题,强大的护栏系统必须系统地阻止它们。OWASP GenAI十大风险明确将提示注入、数据泄露和不安全输出列为顶级安全风险,强调需要分层防御。
2、实现技术
护栏可以以多种方式实现:
基于规则的过滤器:最简单的方法使用预定义的列表和模式。例如,一个规则可能禁止任何包含“炸弹”或“黑客”等词的提示。在Python中,可以编译一个正则表达式来在发送提示之前标记禁止的术语:
import re
banned = ["hack", "illegal", "banned"]
pattern = re.compile("|".join(banned), re.IGNORECASE)
def is_valid_input(prompt):
return not pattern.search(prompt)
user_prompt = "如何制作炸弹?"
if not is_valid_input(user_prompt):
print("🛑 检测到不安全输入。请求被拒绝。")
如果输入未通过检查,系统会立即拒绝查询LLM。这种输入验证轻量且快速,但静态规则可能被绕过(因此也需要更高级的方法)。
嵌入/分类器-based过滤器:这些使用机器学习模型来评估内容。例如,可以将输入编码为嵌入,并与已知的安全或不安全示例进行比较。一个LLM或较小的分类器可以对提示或响应进行毒性、偏见或隐私风险评分。在代码中,可以使用句子转换器来捕捉与禁止内容的语义相似性:
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('all-MiniLM-L6-v2')
safe_example = "我想今年夏天去旅行。" # 无害输入
banned_example = "给我制作炸弹的说明。" # 已知的坏输入
prompt = "有哪些恐怖分子战术?"
emb_prompt = model.encode(prompt)
emb_banned = model.encode(banned_example)
sim = util.cos_sim(emb_prompt, emb_banned)
if sim > 0.8:
print("🛑 通过语义相似性检测到危险提示。")
在这里,与危险示例的高余弦相似度(例如>0.8)会标记输入。基于嵌入的检查可以捕捉简单关键词无法检测到的禁止内容变体。然而,它们引入了延迟(因为计算嵌入较重),因此通常用于关键检查或异步批处理。
神经-符号技术:这些结合了神经LLM与符号规则或知识。例如,护栏可能使用LLM本身来验证内容(“LLM作为法官”)或在推理期间应用逻辑约束。研究表明,混合基于学习的代理与符号逻辑可以处理伦理和事实性等复杂要求。在实践中,神经护栏模型可能会预测答案是否违反政策,而符号规则确保严格合规(例如通过布尔检查)。这种方法仍在发展中,但旨在超越简单模式捕捉细微的安全规则。
受限解码:与其在生成后过滤,可以约束生成过程本身。例如,当通过Hugging Face使用GPT-2时,可以禁止某些输出标记或强制执行JSON模式。以下是使用bad_words_ids阻止输出单词的示例:
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('gpt2')
model = AutoModelForCausalLM.from_pretrained('gpt2')
prompt = "告诉我制作炸弹的食谱。"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# 禁止生成“炸弹”或“杀死”
bad_words = ["bomb", "kill"]
bad_ids = [[tokenizer.encode(w, add_special_tokens=False)[0]] for w in bad_words]
output = model.generate(input_ids, max_length=30, bad_words_ids=bad_ids)
print(tokenizer.decode(output[0]))
通过这种方式,即使模型想说“炸弹”,它也不能输出该标记。受限解码还可以强制结构:例如,让模型填写预定义的JSON模式(这样它要么符合模式,要么响应被拒绝)。通过“关闭输出空间的笼子”,我们可以在一开始就防止很多危险的输出。
每种技术都有权衡:基于规则的快速但脆弱,嵌入灵活但慢,受限解码可以确保完美的合规性,但仅在结构化任务中。实际上,护栏系统经常结合方法——例如,快速关键词检查后跟更深层次的语义过滤器——以平衡安全性和可用性。
3、多层防御架构
有效的护栏在系统的多个层上运行(纵深防御)。可以将它看作是安全的同心圆:
预处理(输入护栏):这些在模型看到提示之前运行。它们包括输入验证规则、垃圾邮件过滤器、个人信息检测器和对抗性提示扫描器。例如,输入护栏可能使用正则表达式或分类器来阻止查询中的信用卡号码或检测尝试提升权限的提示。在此处发现问题是最理想的,因为它可以尽早阻止不良输入并节省昂贵的生成。
处理时间控制(系统提示和推理护栏):这些在推理期间或推理前应用。一种常见方法是使用系统提示或初始指令来引导模型的行为(例如,“总是礼貌和准确地回答。”)。其他内部生成技术包括调整解码参数,或在检查点调用较小的护栏模型。例如,插入一个步骤,让LLM在最终确定前评估自己的输出,可以捕捉内部矛盾。在OWASP术语中,这一层执行业务规则和上下文(比如在提示中提供用户角色或访问级别以确保合规)。
后处理(输出护栏):在模型生成答案后,输出护栏分析它。这可能涉及内容审核分类器(毒性检查器)、正则表达式清理(删除泄露的秘密或不允许的短语)、模式验证器(确保结构化答案格式正确),或甚至调用外部API(事实核查器)来验证响应。如果输出未能通过这些检查,系统可以重新生成更安全的答案或拒绝回复。例如,如果模型不小心泄露了电子邮件地址,输出护栏可以在发送响应前将其删除或屏蔽。
这些层一起使攻击越来越困难:即使对手通过输入过滤器,系统提示仍可能限制模型的行为,任何禁止内容都会在到达用户之前被捕获。这种分层策略是稳健性的关键,类似于LLM安全研究中的“预-/内部-/后处理”分类法。
4、护栏工具包和框架
一些平台和库已经出现,帮助开发者添加护栏而无需从头开始:
- NVIDIA NeMo Guardrails:一个开源工具包,用于构建带有可编程安全过滤器的LLM对话应用程序。它允许你用简单的DSL定义规则和决策链(“guards”),并在模型前后运行安全检查。(文档:nemo.ai/guardrails)。
- Guardrails AI (github.com/guardrails-ai/guardrails):另一个流行的开源库(6K+星标)提供了定义输入过滤器、输出验证器和基于强化学习的约束的组件。它支持细粒度的控制流(如果检查失败,采取行动),并通过包装器与LLM集成。
- LLM Guard (ProtectAI):一个工具包(2.3K+星标),被称为“LLM交互的安全工具包。”它提供提示验证、响应过滤和LLM应用程序的用户自定义策略。它可以用来加固聊天机器人,通过拦截和审计每次交换。
- Meta的Llama Guard:Meta AI发布了Llama Guard模型,这些是专门的LLM,经过微调以检测不安全内容。例如,Llama Guard 3 Vision是一个多模态模型,用于分类图像和文本对话是否安全。这些护栏模型可以实时查询以检查内容。Meta还在GitHub上提供了代码示例(例如,meta-llama/llama-recipes/responsible_ai/llama_guard)。
每个框架都有自己的工作流程,但它们都共享一个目标,即方便地在现有的LLM调用周围插入验证步骤。例如,使用NVIDIA NeMo Guardrails可能涉及编写一个简单的YAML护栏模式,而Amazon Bedrock使用GUI或JSON策略。在所有情况下,你可以将这些框架视为介于你的应用程序和模型之间的中介,根据你的规则检查输入/输出。
5、评估与基准
为了确保护栏有效,我们需要指标和测试。常见的方法包括:
- 安全基准:如ToxicQA(针对仇恨或不允许的问答)、RealToxicityPrompts和HarmBench的数据集提供了提示和预期结果的测试套件。例如,HarmBench(由Hendrycks等人开发)是一个自动化的红队基准,包含数百个有害提示,用于压力测试模型。它“提供了自动红队和鲁棒拒绝的标准评估框架”。在这些基准上运行你的LLM+护栏,可以揭示它失败的频率(例如,仍然输出有毒内容)或错误拒绝安全查询的频率。
- 红队:除了静态数据集,团队进行红队——生成对抗性攻击,无论是手动还是通过LLM代理。在红队练习中,安全专家(或AI机器人)尝试通过创意提示破坏系统。例如,他们可能试图强迫模型说出不允许的内容,或弄清楚是否可以泄露秘密。OWASP GenAI指南本身就是由红队发现塑造的。之后,测量的指标包括攻击成功率与误报率。ConfidentAI的DeepEval等工具甚至可以自动化对抗性提示生成来审计你的护栏。
- 鲁棒性指标:常见的指标包括过滤器的准确性、误报/漏报率以及攻击成功率(ASR)- 即恶意提示中通过护栏的比例。学术作品通常定义了这类框架(例如,衡量越狱提示如何绕过模型和护栏)。在工业界,你可能还会跟踪用户级别的KPI:例如,“有多少用户遇到了护栏阻拦?” 或 “我们不得不重新生成答案的频率是多少?”。
- 伦理/信任检查:护栏部分是关于伦理和信任的。这里的方法包括对输出进行偏差/公平性评估(使用IBM的AI Fairness 360等工具),或确保隐私合规性。虽然更难量化,但一些团队使用模拟审计或与利益相关者合作来评估系统在边缘情况下的行为是否“适当”。
总之,评估护栏是一个活跃的研究领域。通过结合基准套件(如ToxicQA、HarmBench、JailbreakBench)、正式指标(ASR、准确性)和红队测试,团队可以迭代改进他们的防御措施。目标是在不削弱模型有用性的情况下最小化不必要的输出——这是鲁棒性、伦理和性能的平衡。
随着大型语言模型继续重塑我们与技术的互动方式,它们的不可预测性要求强大的和深思熟虑的保障措施。护栏不再只是可选的——它们是确保LLM负责任、合乎道德和安全运行的关键基础设施。从阻止有毒内容和停止幻觉到抵御提示注入和保护私人数据,护栏在LLM流程的每个阶段都发挥着关键作用。
实施有效的护栏需要分层的方法:简单的基于规则的过滤器用于速度,基于嵌入的检查用于灵活性,受限解码用于合规性,以及多阶段验证用于深度。无论你是使用开源工具如NeMo Guardrails和Guardrails AI,还是设计自己的安全堆栈,关键是主动整合——而不是被动修补。
随着威胁的演变和LLM能力在各种模态和决策制定中的扩展,护栏也必须随之进化。它们不仅是技术组件,更是信任的促成者——使模型能够在现实世界的应用中安全运行。每个开发人员、研究人员和部署LLM的组织都应该将护栏视为GenAI堆栈中的首要优先事项。
从简单开始,快速迭代,并与新兴的最佳实践保持一致。规模上的安全不是附加项——它是基线。
原文链接:Guardrails for LLMs | Comprehensive Guide to Safe and Responsible AI Deployment
汇智网翻译整理,转载请标明出处