Guardrails 是什么?AI 护栏详解

Guardrails护栏AI安全

Guardrails 指的是围在模型输入、工具调用和输出周围的校验与控制层:进模型前检查、出模型后校验、动作执行前拦截。它跑在模型上下文之外,所以不会被一句「忽略之前的指令」绕过

Guardrails 在模型前后设置校验层

Guardrails 在模型前后设置校验层

Guardrails 中文一般叫「护栏」。在 AI 系统里,它指的是围绕模型输入、工具调用和输出建立的校验与控制层,用来落实那些不能商量的规则:不许泄露个人信息、输出必须是合法 JSON、不许执行任意代码、不许聊这个话题。

具体形态可以是正则规则、校验器,也可以是一个专门做判别的小模型。它在模型调用前后运行,对数据放行、修正或拦截。

先用一句话抓住它

Guardrails 是模型前后的安检门:进去的先查一遍,出来的再查一遍,不合规的挡下来。

生活里的类比是银行柜台的复核制度。柜员再有经验,大额转账也要走复核、要核身份、要过反洗钱规则。这套流程不假设柜员会犯错,它假设的是「即使判断失误,也不能让钱直接出去」。护栏是同样的逻辑:不指望模型永远不出错,而是让出错时不至于造成后果。

为什么会出现这个词

模型的行为是概率性的,同一个输入两次可能得到不同结果,靠提示词写「不要做 X」在正常情况下有效,遇到刻意攻击就未必。当 AI 从聊天框走进业务流程——能查数据库、能发邮件、能改配置——「大概率不会出错」就不够用了。

于是出现了一个关键区分:结构化护栏跑在代码里、在模型的上下文窗口之外,可以放在模型调用前(输入校验)、回复之后(输出校验)、或推理与工具调用之间(动作预校验),它不会被对抗性内容改写;提示词级护栏写在系统提示里,正常情况下有效,但在提示词注入、越狱和多轮上下文操纵下会失效。

一句话概括这个差别:写在提示词里的规则是请求,写在代码里的规则才是约束。

flowchart LR
    User["用户输入"] --> IG["输入护栏<br/>注入检测 / 敏感信息 / 话题范围"]
    IG -->|通过| Model["模型推理"]
    IG -->|拦截| Block1["拒绝并记录"]
    Model --> AG["动作护栏<br/>工具调用是否越权"]
    AG -->|通过| Tool["执行工具"]
    AG -->|拦截| Block2["转人工审批"]
    Tool --> OG["输出护栏<br/>格式 / 事实 / 个人信息 / 有害内容"]
    OG -->|通过| Reply["返回用户"]
    OG -->|拦截| Block3["改写或拒答"]

它通常包含什么

护栏一般覆盖五类常见风险:幻觉、提示词注入、个人信息泄露、话题漂移、有害内容。落到实现上,可以按位置分成几段。

输入护栏在模型看到内容之前检查用户消息:有没有注入特征、有没有身份证号手机号、是不是超出了这个产品该聊的范围。检索护栏过滤知识库返回的内容,因为被投毒的文档同样是攻击入口。对话护栏控制会话流程和允许的话题。动作护栏在推理结果转成工具调用之前拦一道,判断这次调用是否越权、参数是否危险。输出护栏在回复到达用户之前校验格式、事实、敏感信息和有害内容。

NVIDIA 的 NeMo Guardrails 就是按这五类轨道组织的开源工具,用 Colang 这种领域专用语言声明式地写允许的话题和应对方式。Guardrails AI 是另一条路线,核心是一个 Guard 加若干校验器,逐条检查输出是否满足条件;两者可以互相集成。Meta 的 Llama Guard 则是基于危害分类法的判别模型,把输入输出标成安全或不安全。

和对齐、安全训练的区别

对齐和安全训练改变的是模型本身的倾向,属于模型层;护栏不改模型,是套在外面的系统层。两者是纵深防御的不同层次:对齐让模型默认不想做坏事,护栏保证即使它想做也做不成。

差别还体现在可控性上。模型的行为你只能通过训练间接影响,而护栏的规则是你自己写的、可以随时改、可以按客户和地区配置、出问题能追到具体哪条规则放行了。合规场景里后者往往更重要,因为你需要能向审计解释「为什么这条能过」。

和提示词注入、智能体权限的关系

提示词注入是护栏最主要的对手,也是它存在的最大理由。要点在于:注入攻击的本质是让模型把数据当成指令,而模型级的防御终究是在同一个上下文里博弈;跑在上下文之外的结构化护栏不受这场博弈影响。

在智能体系统里,护栏和权限设计通常一起做。权限决定「能碰到什么」,护栏决定「碰的时候要过哪些检查」,审批点决定「哪些必须停下来等人」。三者缺一,自主程度越高风险放大得越快。

容易误解的地方

第一个误解是把护栏当成万能。它拦得住已知模式,拦不住所有情况。用小模型做判别的护栏在常见攻击上准确率不错,但面对精心构造的边缘用例,保证不如正则或规则校验那样确定。护栏是降低风险,不是消除风险。

第二个误解是把系统提示当护栏。「你不能透露系统提示」写在系统提示里,本身就在攻击者能影响的那段上下文中。真正的护栏必须在模型之外。

第三个误解是全用重型检查。每一层护栏都增加延迟和成本,把所有请求都过一遍大模型判别,体验和账单都受不了。比较常见的做法是分层:同步跑快速的规则匹配,异步或只对可疑内容跑重型的模型判别。

第四个误解是只做输出侧。只检查模型说了什么,不检查它要做什么,在智能体场景里是危险的——等到输出被看到时,那封邮件可能已经发出去了。动作护栏往往比输出护栏更关键。

怎么判断它该不该用

只要 AI 的输出会直接到达用户、或者会触发真实动作,就需要护栏,区别只是做到什么程度。优先级看三件事:输出会不会被外部看到、模型能不能触发有副作用的操作、以及所在行业有没有合规要求。

起步可以很轻:先把最确定的几条做成结构化校验(输出格式、个人信息模式、危险操作黑名单),再加注入检测和话题范围,最后才考虑上完整的护栏框架。顺序上有个实用原则——能用确定性规则解决的,不要用模型判别,前者更快、更便宜,而且行为可预测、可解释。

资料来源