什么是护栏
安全与质量关卡。
什么是护栏 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。
防护栏定义
防护栏是围绕 LLM 设置的程序化检查,用于强制执行安全、规则和质量要求。它们在输入阶段(用户输入)和输出阶段(模型输出)运行,控制哪些内容可以到达模型以及哪些内容可以到达用户。
模型具有概率性;防护栏则是在其之上分层实现的确定性规则执行机制。
为何仅靠提示词并不够
诸如“绝不泄露机密”这样的系统提示词指令属于软性约束:它们可能被越狱攻击覆盖,在很长的上下文中逐渐失效,或在分布偏移时被忽略。防护栏属于硬性约束,因为它们是模型之外的代码,模型无法通过争辩改变其行为。
采用深度防御:既提示模型,又用独立检查将其包裹起来。
输入与输出防护栏
两种位置承担不同职责:
- 输入防护栏会在产生令牌费用之前,阻止提示注入、不允许的请求和 PII。
- 输出防护栏会在内容交付之前,拦截不安全内容、泄露的数据、幻觉内容和模式违规。
输入检查节省成本;输出检查保护用户。
阻止、编辑、重新生成、升级处理
防护栏触发时必须决定采取哪种操作:
- 阻止——拒绝请求并返回安全消息。
- 编辑——移除违规片段后继续。
- 重新生成——说明违规情况后重新提示模型。
- 升级处理——转交人工或更严格的模型。
正确的操作取决于严重程度和用户信任。
def on_violation(severity):
if severity == 'critical': return 'block'
if severity == 'pii': return 'redact'
if severity == 'quality': return 'regenerate'
return 'escalate'防护栏流程
请将防护栏组合成有序流程;首次出现严重违规时立即失败。
def guarded_generate(user_input):
for g in INPUT_GUARDS:
verdict = g.check(user_input)
if verdict.block:
return safe_refusal(verdict)
output = call_model(user_input)
for g in OUTPUT_GUARDS:
verdict = g.check(output)
if verdict.block:
return verdict.handle(output)
return output确定性防护栏与基于模型的防护栏
有两种实现方式:
- 确定性防护栏——正则表达式、模式、允许/拒绝列表,以及使用固定阈值的分类器。速度快、成本低且便于审计。
- 基于模型的防护栏——由审核模型或 LLM 评审器评估细致的规则。灵活,但速度较慢,而且自身也可能出错。
硬性规则使用确定性防护栏,需要判断的情况使用基于模型的防护栏。
延迟与成本预算
每个防护栏都会增加延迟。保持速度的策略包括:
- 并行运行相互独立的输出防护栏。
- 将廉价的确定性检查排在昂贵的模型检查之前。
- 首次遇到硬性阻止时立即短路。
- 流式传输输出,但在关键防护栏通过之前暂缓交付。
verdicts = await asyncio.gather(*[g.check(out) for g in OUTPUT_GUARDS])
if any(v.block for v in verdicts):
return handle(verdicts)误报确实会产生成本
过于激进的防护栏会阻止合理请求并使用户感到沮丧(即使是良性查询也得到“我无法帮助您处理该请求”)。请使用带标签的数据集调整阈值,并将误报率作为一等指标进行跟踪,而不只是关注针对攻击的召回率。
流式传输使输出防护更加复杂
如果您将令牌流式传输给用户,后来才出现的违规内容可能已经显示在屏幕上。可选方案包括:
- 完整缓冲、完成防护后再释放(最安全,但延迟更高)。
- 在流式传输过程中按句子边界进行防护。
- 先乐观地流式传输,但在出现违规时撤回或替换。
请根据泄露的部分输出可能造成的危害程度进行选择。
可审计性与日志记录
防护栏属于合规凭证。请记录每次判定的输入哈希、防护栏标识符、严重程度和采取的操作,同时注意不要记录敏感内容本身。这些记录可以在审计期间证明规则得到执行,也能用于调整系统。
audit.log({'guard': g.id, 'verdict': verdict.label,
'action': verdict.action, 'input_hash': sha256(inp)})防护栏不能替代设计
防护栏可以降低风险,但无法消除风险。无法访问机密的模型不可能泄露机密。请优先采用架构控制措施(最小权限、限定作用域的工具,以及不将敏感数据放入上下文),并将防护栏作为最后一层,而不是唯一一层。
快速检查
将防护栏放置在哪个位置,主要可以减少对不允许请求的令牌消耗?
回顾
防护栏基础:
- 在概率性模型周围分层设置确定性规则。
- 输入防护栏节省成本;输出防护栏保护用户。
- 可采取的操作:阻止、编辑、重新生成、升级处理。
- 结合确定性检查和基于模型的检查;并行运行它们。
- 跟踪误报;记录判定;优先采用架构控制,而不是打补丁。
下一步:深入学习输入和输出过滤。
常见问题解答
「什么是护栏」课时是免费的吗?
是的 — 「什么是护栏」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。
「什么是护栏」这节课中我会学到什么?
安全与质量关卡。 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Prompt Engineering 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「什么是护栏」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Prompt Engineering 课中编写并运行代码吗?
能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。