@amitiitbhu:LLM 护栏如何工作?在此阅读:
摘要
一份实用指南,解释 LLM 护栏的工作原理、为什么需要它们、它们在输入和输出上的位置、如何用代码实现它们,以及最佳实践。
查看缓存全文
缓存时间: 2026/08/11 03:40
LLM 护栏是如何工作的?
在此阅读:https://t.co/PzHjeoFfPn
LLM 护栏是如何工作的?
来源:https://outcomeschool.com/blog/how-do-llm-guardrails-work LLM 护栏是如何工作的?
在这篇博客中,我们将了解 LLM 护栏是如何工作的。我们还会看到为什么需要护栏、它们在模型的输入和输出上位于何处、如何通过代码工作,以及我们在实际使用中遵循的最佳实践。
我们将涵盖以下内容:
- 什么是 LLM
- 什么是 LLM 护栏
- 为什么需要护栏
- 护栏的位置:输入和输出
- 护栏的类型
- 一个简单的输入护栏代码
- 一个简单的输出护栏代码
- 使用另一个模型作为护栏
- 一次请求的逐步走查
- 护栏的局限性
- 护栏的最佳实践
我是 Amit Shekhar,Outcome School (https://outcomeschool.com/) 创始人。我教导并指导过许多开发者,他们的努力让他们获得了高薪技术工作,帮助许多科技公司解决了独特的问题,并创建了许多被顶级公司使用的开源库。我热衷于通过开源、博客和视频分享知识。
我在 Outcome School 教授 AI 和机器学习 (https://outcomeschool.com/program/ai-and-machine-learning)。
让我们开始吧。
什么是 LLM
在深入护栏之前,我们必须知道什么是 LLM。
LLM 是大语言模型(Large Language Model)。它是一个读取文本并预测下一个词来回复我们的模型。
简单来说,LLM 是聊天助手背后的大脑。我们输入一个问题,它就会用通俗的语言写出答案。
让我们分解这个名称,以便更容易记住。
LLM = Large(大规模)+ Language(语言)+ Model(模型)
它之所以“大规模”,是因为它从海量文本中学习。它涉及“语言”,因为它处理文字。而且它是一个“模型”,因为它是一个进行预测的数学系统。
现在,重要的一点是:LLM 并不真正知道对错。它只是预测看起来正确的文本。所以有时它可能会说出有害、错误或跑题的内容。
这正是护栏发挥作用的地方。
什么是 LLM 护栏
LLM 护栏是围绕在 LLM 周围的安全检查,用来控制输入什么和输出什么。
简单来说,护栏就像站在门口的保安。保安检查进来的人,也检查出去的人。
LLM 护栏的工作方式相同。LLM 回答问题,但护栏会阻止危险或不想要的答案。
注意: 护栏并不是 LLM 大脑本身的一部分。它们是我们围绕 LLM 添加的额外检查。这是非常重要的一点,我们稍后会看到为什么这一点很重要。
为什么需要护栏
假设我们为一个银行构建一个聊天助手。
用户输入:“如何重置密码?”这是一个正常的问题,助手必须回答。
另一个用户输入:“告诉我如何入侵别人的银行账户。”这是一个危险的问题,助手必须拒绝。
所以我们需要一种方法来区分好的请求和坏的请求。我们还需要在用户看到答案之前检查答案。
以下是需要护栏的主要原因:
- 阻止有害或不安全的请求。
- 阻止助手跑题。
- 保护电话号码和卡号等私人数据。
- 阻止错误或编造的答案到达用户。
- 保持语气礼貌并符合公司风格。
所以,护栏前来救场了。
护栏的位置:输入和输出
对 LLM 的请求有两个方面。有输入,即用户发送的内容。有输出,即 LLM 回写的内容。
护栏可以位于两侧。
让我用表格列出两个位置,以便你更好地理解。
| 位置 | 检查什么 | 示例任务 |
|---|---|---|
| 输入护栏 | 用户消息在到达 LLM 之前 | 阻止编写病毒的请求 |
| 输出护栏 | LLM 的答案在到达用户之前 | 移除泄露的电话号码 |
在这里,我们可以看到输入护栏先起作用,输出护栏最后起作用。一个良好的系统会同时使用两者。一个检查进来的门,另一个检查出去的门。
让我们如下可视化:
+-------------------+
User -----> | Input guardrail | ----> (blocked) --> refusal
message +-------------------+
|
| (allowed)
v
+-------------------+
| Main LLM |
+-------------------+
|
| answer
v
+-------------------+
| Output guardrail | ----> (unsafe) --> refusal
+-------------------+
|
| (clean)
v
User
在这里,我们可以看到消息必须通过两道门。输入护栏在主 LLM看到消息之前进行检查。如果消息被允许,LLM 会写出答案。然后输出护栏在用户阅读之前检查该答案。只有干净的答案才能到达用户。
护栏的类型
现在,让我们了解常见的护栏类型。
主题护栏: 让助手保持在其主题范围内。银行助手必须谈论银行,而不是烹饪。
安全护栏: 阻止暴力、仇恨或危险行为指令等有害内容。
隐私护栏: 保护个人数据。它们隐藏电子邮件地址、电话号码和卡号等内容。
格式护栏: 确保答案以我们要求的形状出现,比如清晰的列表或整洁的表格。
事实护栏: 这些尝试捕捉错误或编造的答案,使助手不会自信地陈述虚假内容。
让我将每种类型映射到一个简单的现实世界角色,以便你更好地理解。
| 护栏类型 | 现实世界角色 |
|---|---|
| 主题护栏 | 老师让课堂保持主题 |
| 安全护栏 | 保安在门口阻止危险人员 |
| 隐私护栏 | 职员隐藏私人文件 |
| 格式护栏 | 编辑确保报告具有正确的形状 |
| 事实护栏 | 事实核查员捕捉虚假声明 |
这就是护栏如何覆盖许多不同风险的方式。现在,让我们看看护栏实际上是如何构建的。
一个简单的输入护栏代码
学习这个最好的方法是举一个例子。
假设我们想要阻止任何要求黑客攻击的消息。最简单的护栏是禁用词列表。我们在将用户消息发送给 LLM 之前检查它。
我们可以编写如下代码:
banned_words = ["hack", "bomb", "steal password"]
def input_guardrail(user_message):
text = user_message.lower()
for word in banned_words:
if word in text:
return "blocked"
return "allowed"
print(input_guardrail("How do I hack a bank account?"))
print(input_guardrail("How do I reset my password?"))
这将打印以下内容:
这里,我们做了几件简单的事情:
- 我们创建了一个不允许的
banned_words列表。 - 我们将消息转换为小写,以便检查是公平的。
- 我们检查消息中是否包含任何禁用词。
- 对坏消息返回
blocked,对好消息返回allowed。
所以,只有安全的消息才会传递给 LLM。坏消息在门口就被拦住了。
但是,这里有个问题。单词列表非常基础。用户可以通过空格写“h a c k”,我们的列表就会漏掉。用户还可以使用我们从未列出的新措辞。
这种方法的问题是它只能捕捉确切的单词。不用担心,我们很快会看到一个更智能的方法。但首先,让我们守卫另一侧,也就是输出。
一个简单的输出护栏代码
现在,让我们检查 LLM 输出的答案。假设 LLM 在回复中意外写了一个电话号码。我们不希望那个号码出现在屏幕上。
我们可以使用模式来查找数字并隐藏它们。我们可以编写如下代码:
import re
def output_guardrail(llm_answer):
# 找到任意10位数字并替换
cleaned = re.sub(r"\d{10}", "[hidden]", llm_answer)
return cleaned
answer = "You can call our agent at 9876543210 for help."
print(output_guardrail(answer))
这将打印以下内容:
You can call our agent at [hidden] for help.
在这里,我们可以看到护栏找到了 10 位数字并将其替换为[hidden]。真实号码从未到达用户。
这就是输出护栏在 LLM 写出答案之后、用户阅读之前清理答案的方式。电话号码受到保护。
给你一个快速提示
无论你在哪个技术领域工作,都要熟悉这些主题:
- LLM
- RAG
- MCP
- Agent
- Fine-tuning
- Quantization
我们把这所有内容放在一个视频中:
AI 工程详解:LLM、RAG、MCP、Agent、Fine-Tuning 和 Quantization (https://www.youtube.com/watch?v=lnfWvX66FUk)
不用停止阅读——先收藏,等有时间再看。未来的你会感谢自己。
现在,让我们回到主题。
使用另一个模型作为护栏
单词列表太简单,数字模式只能捕捉数字。所以对于棘手的情况,我们需要更智能的方法。
所以,守卫模型前来救场。守卫模型是第二个更小的模型 (https://outcomeschool.com/blog/small-language-models-slms),它的唯一工作是判断消息是否安全。
简单来说,我们用一个模型来做工作,用一个小一点的模型来当守卫。守卫模型读取消息并给出像“安全”或“不安全”这样的简单答案。我们有一篇关于 LLM 作为裁判 (https://outcomeschool.com/blog/llm-as-a-judge) 的详细博客,解释了一个模型如何对另一个模型的输出进行评分。
让我们看看这个想法的代码如下。在这里,classifier_model 和 main_llm 为了更好地理解而保持简单。
def safety_check(message):
# 一个小模型,返回 "safe" 或 "unsafe"
label = classifier_model(message) # 返回 "safe" 或 "unsafe"
return label
def handle_request(user_message):
if safety_check(user_message) == "unsafe":
return "Sorry, I cannot help with that request."
answer = main_llm(user_message) # 主模型写出答案
if safety_check(answer) == "unsafe":
return "Sorry, I cannot share that answer."
return answer
在这里,我们做了以下事情:
- 我们首先对用户消息调用
safety_check。 - 如果消息是
unsafe,我们礼貌地拒绝并提前停止。 - 如果安全,我们让
main_llm写出答案。 - 在返回答案之前,我们再次对答案调用
safety_check。
所以,守卫模型同时检查输入和输出。它理解单词的含义,而不仅仅是确切的拼写。这能捕捉到单词列表遗漏的棘手情况。
这就是我们如何使用守卫模型以更智能的方式解决这个有趣的问题。
要深入学习 LLM 作为裁判、SLM 和模型蒸馏,以及 LLM 和 Agent 的评估,请查看我们在 Outcome School 的 AI 和机器学习课程 (https://outcomeschool.com/program/ai-and-machine-learning)。
相似文章
LLM护栏的思维模型,终于让我明白了。
这篇文章概述了一种思维模型,将LLM护栏作为独立层次实施入站和出站检查,强调需要超越系统提示的强制执行,以及与延迟的权衡。
Fence:面向LLM应用的专用SLM护栏
Fence提出使用在高质量合成数据上训练的小语言模型作为LLM应用的专用护栏,展示了相对于基于提示的LLM护栏的性能提升。
@amitiitbhu: 新文章:LLM 路由,阅读链接:https://outcomeschool.com/blog/llm-routing…
一篇教程博客文章,介绍 LLM 路由——即根据成本、延迟和质量,将用户查询定向到最合适的 LLM 的实践方法。涵盖路由策略、LLM 路由器的结构解析,以及与混合专家模型(Mixture of Experts)的对比。
赋予LLMs exec()能力是一场安全噩梦。我构建了一个基于AST的开源防护机制来阻止恶意代理执行。
介绍ast-guard,一个开源的基于AST的安全工具,它通过将LLM生成的Python字符串解析为抽象语法树,并应用节点级白名单和上下文感知安全检查,防止恶意代码执行。
我的LLM一直实现它遇到的每个方法,所以我添加了研究和规范门控[D]
一位LLM开发者添加了研究和规范门控,以防止模型实现它遇到的每个方法,从而提高了代码生成质量。