welclaiAI·TREND·DIGEST
工具

护栏:在 LLM 周围过滤输入与输出

光有模型并不是一个安全的产品。护栏就是那些输入与输出的过滤器,把 LLM 约束在你真正需要的边界之内。

tools2026-06-16 12:31 KST·主编·7 分钟

语言模型会乐呵呵地去做你从未想让它做的事。它会回答职责之外的问题,会复述用户带敌意的措辞,会泄露被告知要保密的指令,或者产出你下游代码根本无法解析的内容。这些都不意味着模型坏了。它意味着一个原始模型是一种能力,而非一个产品。护栏就是把前者变成后者的那一层:你对进入和产出之物所做的检查,好让系统留在你站得住脚的边界之内。

护栏到底是什么

剥去营销话术,护栏就是一个附带了决策的过滤器。某样东西——一段文本、一个请求、一个生成的答案——通过一道检查,检查随后要么放行它,要么拦截它,要么改写它。这道检查可以是一条简单规则、一个分类器,或者另一次模型调用。关键在于那个决策:一个发现了问题却什么都不做的护栏,只不过是日志。

护栏分两大家族,这个区分是最值得你牢记于心的:

  • 输入护栏位于用户和模型之间。它在请求抵达生成之前先行检查。
  • 输出护栏位于模型和用户(或下一个系统)之间。它在任何人据此采取行动之前,检查模型产出了什么。

大多数真实系统两者都需要,因为这两个家族捕获的是不同的故障。过滤输入并不能保证输出安全,而一个看起来干净的输出,也可能来自一个根本就不该被服务的请求。

过滤输入

输入护栏回答一个问题:我们究竟该不该把这个送进模型?有几道检查在这里站得住脚。

第一是内容审核——筛查那些你已决定根本不予理会的内容。这是最适合用专门分类器、而非手写规则的情形,因为类别是模糊的,而对抗性用户会不断试探边界。

第二是对提示注入的警觉。当你的应用从外部引入文本——一个网页、一份上传的文档、一封邮件——这些文本可能包含针对你模型的指令,而非供它处理的内容。输入护栏无法彻底解决注入,但它能标记可疑模式,而且关键在于,它提醒你把不可信的输入与你自己的指令清晰地隔离开。

第三是范围。许多产品只为做一件事而生。一个银行 App 的支持助手没理由去写诗或给医疗建议,倒不是因为这些有害,而是因为它们偏离了使命、侵蚀信任。一道轻量的主题检查能让系统对"自己是干什么的"保持诚实。

要尽早养成的纪律是:不要因为输入来自你自家的 UI 就信任它。那个文本框是大门,而麻烦正是从大门走进来的。

过滤输出

输出护栏是多数团队投入不足的地方,而它往往是更重要的那一半。模型此刻已经生成了某样东西,在它抵达人或触发动作之前,你还有一次机会去捕获问题。

有用的输出检查包括:

  • 安全与政策。 不管它是被怎样提示的,模型是否产出了违反你既定政策的内容?这是你为输入层漏掉的注入和越狱企图所设的兜底防线。
  • 格式与结构。 如果你的代码期待一种特定的形态——一组特定的字段、一个来自固定列表的类别——在解析之前先验证它。一个在你期待结构化数据的地方返回了散文的模型,应该在这里被抓住,而不是由下游三个函数之外的一次崩溃来发现。
  • 接地。 对于依据某个知识源作答的系统,检查答案是否真的得到了检索材料的支持,而非凭空编造。这比其他检查更难,也很少完美,但哪怕是粗糙的版本也能抓住自信的捏造。
  • 泄露。 回应是否暴露了系统指令、内部标识符或另一位用户的数据?拿已知敏感字符串做一次简单核对,成本很低,值得一跑。

输出护栏之所以比看上去更重要,是因为它是最靠近后果的那一层。等到某样东西抵达输出检查时,上游所有的精巧操作都已经发生过了。这是最后一道诚实的闸门。

决定要多严格

每道护栏都有两种出错方式。它可能放过了本该拦截的东西(漏报),也可能拦下了完全没问题的东西(误报)。你无法把两者都压到零,假装能做到只会造出一个要么不安全、要么没法用的系统。

正确的平衡完全取决于赌注。一道护栏若挡在一个会动钱、或会给客户发邮件的动作之前,就应当偏严、并采取"失败即关闭"——拿不准时就拦截并上报。一道挡在头脑风暴助手前的护栏可以偏宽松,因为误报的代价(一个受挫的用户)超过偶尔漏报的代价(一个略微偏题、用户直接忽略的答案)。在你调优之前就先决定每道护栏落在这条光谱的哪个位置,因为"要多严格?"这个问题,在不知道闸门另一侧是什么之前,根本无解。

在不拖慢一切的前提下把它建起来

护栏会增加工作量,而工作量会带来延迟和成本。有几种模式能把这控制住。

先跑便宜的检查。简单的基于规则的过滤和字符串匹配几乎不花成本;把它们放在任何需要模型调用的检查之前,让一次提早的拦截把后续短路掉。把昂贵的"分类器加模型"检查留给那些已经通过了便宜闸门的输入。

在可以的地方让相互独立的检查并行运行,这样总延迟就是最慢的那道检查,而不是所有检查之和。再把拦截性检查和监控性检查分开:一道必须在用户看到回应之前通过的检查得内联运行,而一道你只为分析而想要的检查可以事后再跑,离开关键路径。

最后,记录每一次护栏决策——什么被触发了、针对什么、结果如何。护栏的好坏,完全取决于你能否看出它们在哪里太松、在哪里太紧,而这种可见性完全来自日志。

护栏做不到什么

诚实面对它的上限是值得的。护栏降低风险;它们不消除风险。一个执着的对手会找到你过滤器漏掉的措辞,而一个足够强大的模型偶尔也会产出某样令人意外、没有任何检查预料到的东西。护栏也不能替代模型本身首先就规矩——它们是一道防御层,而非唯一的防御。

把它们当作一个更大态势的一部分:这个态势还包括为任务而选择并提示的模型、为模型能触发的任何动作设置的最小权限、在赌注要求时引入的人工审查,以及当某样东西漏过去时的事件应对预案。一个能让你夜里安睡的护栏层,是所有这些合在一起的产物,而非单独一个聪明的过滤器。

总结

护栏,是一个模型与一个你能摆到真实用户面前的产品之间的区别。过滤输入以决定什么值得运行,过滤输出以决定什么可以安全地据此行动,并把每道闸门的严格程度调到与它身后之物相称。把便宜的检查放在前面、把昂贵的留得稀少,记录每一次决策,并对上限保持谦逊。模型给你能力;护栏给你那让能力可以安全交付的边界。

#guardrails#safety#llm-ops#moderation