运行时安全:护栏与内容审核
训练可以降低有害行为出现的概率,但部署需要比“模型通常会拒绝”更强的保证。已对齐模型自身的拒绝既有必要,却并不充分。每个请求都会带来新的输入,产品策略可以在不重训模型的情况下改变,攻击者也会刻意寻找训练没有覆盖的情形。输入和输出必须分别筛查,但筛查只是答案的一部分。策略条件分类器可以检测有害证据,却不能授权付款、隔离进程,也不能证明外部 API 做了什么。
运行时安全是请求处理时的契约:它检测证据、交由策略决定、让强制执行点落实决定,遏制仍然发生的问题,并记录实际经过。 对于使用工具的系统,核心规则很简单:模型可以提出动作,只有可信代码可以授权并提交。 这条规则把 第 55 章 讨论的外部控制,与本章的提示注入和流式传输问题连接起来。间接 提示注入(prompt injection) 使来源成为每项决定的一部分,服务层是否流式传输也会反过来约束安全设计。
五项工作,不是一个守卫模型
“护栏”这个词常常掩盖几种不同的机制。把它们的职责分开,才能避免把检测器不确定的预测误当成系统保证。
- 检测器提取信号,包括内容审核分数、恶意软件发现、秘密匹配、可疑目标地址和异常工具参数。
- 策略决定结合这些信号,以及经过身份验证的主体、动作、资源、租户、数据分类和策略版本。
- 策略执行点允许、阻止、改写、质询或延迟确切操作。
- 遏制措施在检测与策略同时漏过问题时限制损害,例如使用窄权限凭证、沙箱、配额和网络出站控制。
- 证据把请求、决定、尝试产生的效果和观察结果关联起来,使运营人员能够测试和调查系统。
分数不是决定,决定不是强制执行。请求被阻止并不能证明没有发生副作用。第 56 章 已经说明这些区别为何对授权重要;运行时安全把同样的区别应用于模型文本、检索数据、生成代码和工具调用。
输入审核可以在生成前阻止不允许的请求。输出审核覆盖只有生成后才可见的情况,例如请求本身无害,回答却包含有害内容。两者都看不到所有相关事实。检索文档可能在输入筛查后改变模型行为,工具也可能在输出筛查后把看似无害的字符串变成不可逆效果。因此,检查的位置和范围与分类器本身同样重要。
从检测器分数到策略决定
现代内容审核系统学习危害类别,而不只是匹配关键词。生产系统会结合有记录的分类法、经过认真复核的标签、主动学习,以及合成或对抗数据 (Markov et al. 2023)。Llama Guard 等模型可以随对话接收一套分类法,并分别对提示和回答进行分类 (Inan et al. 2023)。这是一种有用的配置能力,不是任意可编程性。策略文字不能让不受支持的类别变得可靠,给类别改名也不会凭空产生评估它所需的数据。
应把策略视为带版本的策略包,其中包含声明明确的模式、受支持类别、阈值和失效行为。策略包必须经过模式验证、上线前离线评估、分阶段发布和回滚。策略提示在验证前是不受信任的配置:格式错误或遭到注入的文字,不能悄悄改变当前启用的策略。
策略决定不能只有一道阈值,而要能够允许、审查或阻止。设内容 为待评估对象, 表示危害类别, 是检测器对该类别的分数, 表示策略版本。对于每个类别,策略 设置较低阈值 和较高阈值 ,并要求前者不高于后者。三个分支应分别理解:
这里的 是策略版本 下的决定。中间区域是一条明确的弃权路径:可以请求人工决定、改用更安全的模型、要求澄清,或者禁用工具。不能把不确定案例藏进“允许”。选择性分类正是把覆盖率与风险之间的取舍明确表示出来 (Geifman and El-Yaniv 2017)。
估计分数并不会自动成为概率。如果产品把它当作概率展示或据此推理,就必须用代表部署环境的流量进行校准 (Guo et al. 2017)。假阴性会放行违规内容,假阳性会阻止合规内容。召回率表示系统抓住了多少违规内容,精确率则表示被标记的内容中有多少确实违规。精确率取决于基准率:违规本来就很少时,即使平衡基准上的召回率和假阳性率表现良好,假阳性仍可能淹没审查队列。
校准、假阳性率、假阴性率和审查率应按类别、语言和重要用户群体报告,而不能只给全局平均值。分布偏移、混淆和自适应攻击都可能使原有工作点失效,因此发布评估既要包含普通流量,也要包含用于测量过度拒绝的对照案例 (Röttger et al. 2024) 和私有对抗测试集。阈值变化也是策略变化,应当采用与代码相同的审查和回滚纪律。
失效方式取决于实际效果。为低风险文本分类时发生超时,可以返回有界拒绝或降级响应。特权工具产生效果之前则必须在故障时关闭:所有必要检查返回有效决定之前,不得提交任何外部动作。
提示注入改变了威胁模型
在普通聊天请求中,直接提示注入把冲突文字放在用户消息里。对于智能体,间接提示注入会把这类文字放进系统稍后检索的网页、邮件、文档、数据库行、图像或工具结果。模型把可信指令与不受信任数据放进同一个上下文,不受信任数据可以影响特权决定。真实系统已经因此受到攻击 (Greshake et al. 2023),AgentDojo 和 InjecAgent 则提供了可复现的任务,用于测量攻击与防御行为 (Debenedetti et al. 2024; Zhan et al. 2024)。
注入成功还不等于利用成功。注入文字必须先改变模型提出的动作,使该动作请求有害操作,最后还要被强制执行点接受。这样的拆分为防守方提供了多个彼此独立的位置切断攻击链。
学习得到的防御可以在第一步提供帮助。一种方法是指令层级(指令层级(instruction hierarchy)),它训练模型优先遵守系统指令,而不是用户或工具内容 (Wallace et al. 2024)。聚光标记会标明不受信任片段的来源 (Hines et al. 2024)。内容审核与越狱分类器可以识别已知攻击形态,包括经过变换的样本 (Sharma et al. 2025)。这些学习得到的防御可以降低其评估分布上的实测攻击成功率,却不能建立安全边界。自适应输入仍可能被误分类,同一个模型也可能既解释数据,又决定这些数据意味着什么。
结构性控制回答的是另一个问题:即使模型受到影响,它能改变哪些控制流和数据流?先规划后执行、从固定集合中选择动作、上下文最小化和双模型设计,都能把可信规划与不受信任内容的处理分开 (Beurer-Kellner et al. 2025)。CaMeL 用能力层和数据流层明确实现这种分离,并只在已定义的威胁模型下陈述安全结果,而不是声称适用于所有智能体架构 (Debenedetti et al. 2025)。实际设计需要纵深防御:尽可能不让不受信任数据进入特权规划,为每项工具授予最小权限,并要求人工确认,而且确认必须绑定到不可逆动作的确切参数。
在每项实际效果前设置确定性闸门
第 41 章 中的运行框架会把生成的词元变成 API 调用、文件写入、查询和代码执行。运行时安全正是在这个转换点上变成可执行的约束。一条安全的效果路径应在模型之外的可信代码中完成以下检查:
- 按照带版本且有类型的工具模式(schema)解析提议。拒绝未知字段、无效编码、含义不明的数字和越界值。
- 只进行一次动作、资源和规范参数的规范化。同一种表示用于授权、审批、执行和审计。
- 针对确切的主体、动作、资源、租户和上下文取得授权。模型绝不能提供可信身份或策略事实。
- 对每一条出站连接执行目标地址策略。解析并验证 DNS 答案,只连接允许的地址范围,并验证每一个重定向目标。主机名允许列表本身无法阻止重定向和 DNS 重绑定,也无法阻止允许的服务暴露危险端点。
- 把凭证保存在凭证代理中。模型只能看到不透明句柄,代理也只为已获授权的目标地址和动作注入秘密。
- 执行不可逆操作前,持久化一条带幂等键的预写意图;操作结束后,存储提供商的效果回执或精确的失败记录。重试必须复用同一个幂等键,不能重复产生效果。
内容审核可以在第一步和第四步提供信号,却不能取代其中任何一步。“这个 URL 看起来安全”并不是网络强制执行,正如“这笔转账听起来合理”并不是授权。
生成代码需要单独的遏制边界。在 Linux 上,命名空间可以隔离进程、挂载点、用户和网络的视图,cgroups 可以施加资源限制,seccomp 则限制进程能够尝试的系统调用。Linux 文档明确说明,seccomp 过滤本身并不是沙箱 (Linux Kernel Documentation n.d.)。容器指南同样把隔离视为多项配置控制的组合,而不是镜像格式天然提供的属性 (Souppaya et al. 2017)。容器不是虚拟机;面对更强的攻击者或保密要求时,工作负载可能需要专用虚拟机或其他硬件支持的边界。
运行生成代码时,应确保它不带主机密钥,不挂载可写的主机目录,受到资源限制,并默认禁用网络出站,除非某项范围明确的任务确实需要出网。允许出网时,应使其经过工具所使用的同一套目标地址策略和凭证代理。沙箱限制后果,却不决定动作是否合适。它也不能修复内核逃逸、被挂载的凭证、过宽的网络策略或混淆的下游服务。因此,NIST 的生成式 AI 风险管理框架把监控、访问控制、事件处理和测试视为互补的风险处置手段,而不是一道通用过滤器 (Autio et al. 2024)。
流式传输形成两道发布边界
第 31 章 中的服务栈通过逐步发送词元来降低感知延迟。增量审核可以阻止后续生成,但已经发送给客户端的文字就已经披露。事后阻止无法收回客户端已经收到的秘密、侮辱性文字或指令。因此,分块大小只是在延迟与未检查前缀上限之间取舍,并不能消除这项取舍。
关键区别在于显示文本与可执行输出。如果产品能够容忍有界前缀,正文可以在增量审核后流式传输。工具调用、URL 获取、代码执行请求或交易则必须保持为提议,直到完整结构化值经过缓冲、解析和授权,再由可信代码提交。正文可以流式传输,可执行输出必须缓冲。否则,系统可能尚未看到用于拒绝操作的全部字段,部分流就已经变成提交的副作用。
服务方式决定了安全层在发布前能掌握多少信息。整段输出分类器需要先缓冲全部内容;增量审核虽然允许流式传输,却只能判断已经观察到的前缀。因此,第 33 章 不能把词元交付当作纯粹的呈现细节。运行时契约需要两个明确的提交点:一个用于向用户披露字节,另一个用于向外部世界提交实际效果。第二个提交点始终要等待完整、规范的操作通过所有确定性闸门。
运行时安全的运行契约
实现应为每个请求生成一个相互关联的记录。记录的模式带版本,并至少包含以下字段,同时不存储原始凭证,也要避免无谓保留敏感内容:
request_id、policy_revision,以及经过身份验证的主体和租户;input_provenance,用于区分用户、检索、系统和工具提供的内容;detector_revision_and_scores、decision_and_thresholds和审查结果;- 模型、提示、检索和
tool_schema_revision标识符; authorization_decision_id和canonical_action_and_parameters;sandbox_profile、资源限制和包含已解析目标地址的egress_decision;- 需要审批时的
approval_binding、有效期和一次性质询; effect_idempotency_key、预写意图和提供商effect_receipt;- 时间信息、
failure_mode和策略执行点的最终结果。
记录可以使失效重现,但测试必须真正触及这些边界。一套发布测试至少应包括:
- 针对正文和特权效果的检测器错误与守卫超时路径;
- 发布过程中的策略回滚和混合版本请求;
- 混淆、拆分编码、多语言改写和无害对照案例;
- 未知工具字段、重复键、非规范 URL 和超大参数;
- 重定向到被阻止的主机、DNS 重绑定、解析到私有地址,以及允许主机上的禁止路径;
- 审批过期、审批重放、审批后修改参数,以及重复投递同一效果;
- 跨租户资源引用、授权不可用和凭证已撤销;
- 沙箱逃逸探测、资源耗尽、访问秘密文件和被拒绝的网络出站;
- 只有经过多个分块才变得有害的部分流,以及不完整的工具调用绝不能执行。
还要测量假阳性、假阴性、审查覆盖率、策略决定延迟、强制执行失效、效果重复,以及策略或检测器更新到全体实例完成收敛所需的时间。红队结果补充这些契约,但不能取代它们。下一章将详细讨论这套对抗评估纪律(第 58 章)。
- 学习得到的守卫应当决定多少? 分类器可以适应确定性规则无法处理的语言和上下文,却也会继承校准漂移、对抗样本和不透明错误。不同产品对于哪些案例可以自动阻止,哪些需要人工审查或确定性证明,并没有一致答案。
- 通用智能体能否在不失去有用自主性的前提下抵抗间接注入? 结构性设计因为约束控制流和数据流,可以陈述更强的性质。这些约束也会拒绝一些必须由不受信任数据影响特权规划的任务。可部署边界是产品特定的权衡,不是已经解决的通用问题。
- 安全失效是否总应关闭系统? 对金钱转移、秘密访问和外部写入而言,在没有有效决定时提交操作通常无法辩护。对于低风险对话,检测器故障时一律拒绝也可能造成可用性和无障碍方面的损害。失效方式必须写进带版本的策略和威胁模型,而不能依靠一句口号决定。
运行时安全作为外部控制
运行时安全不要求相信某一个守卫模型牢不可破,而要求清楚每个组件能够支撑什么主张。检测器负责估计,策略负责决定,强制执行仲裁每一项实际效果,遏制措施限制漏检的后果,回执让结果可以测试。小型内容审核模型仍然有价值,因为它们可以在每个请求上运行,也能独立于生成模型更新。当不确定的分类结果进入明确的决定流程时,这种价值最强;把分类结果本身当作安全边界时,价值最弱。
这就是外部控制在服务阶段的形态。训练塑造模型倾向于提出什么,运行时架构决定这些动作获准披露或执行什么。
延伸阅读
- Inan et al., “Llama Guard: LLM-based Input-Output Safeguard for Human-AI Conversations” (开放、由分类法驱动的守卫模型), 2023. arXiv:2312.06674Llama Guard 是一个基于 Llama2-7b 的指令微调模型,依据可定制的安全性风险分类体系对用户输入和 LLM 输出同时进行分类,性能达到或超过现有内容审核 API。
- Zeng et al., “ShieldGemma: Generative AI Content Moderation Based on Gemma” (跨尺寸、经过校准的守卫模型), 2024. arXiv:2407.21772ShieldGemma 是一套基于 Gemma2 构建的大语言模型内容审核模型(2B 至 27B),可对用户输入和模型输出中的六类有害内容进行分类检测。
- Rebedea et al., “NeMo Guardrails: A Toolkit for Controllable and Safe LLM Applications with Programmable Rails” (为模型周围的控制流写脚本), 2023. arXiv:2310.10501NeMo Guardrails 是一个开源工具包,通过自定义对话流语言 Colang 在运行时为大语言模型(LLM)应用添加可编程护栏,无需修改底层模型。
- Markov et al., “A Holistic Approach to Undesired Content Detection in the Real World” (内容审核分类器及其分类法), 2023. arXiv:2208.03274OpenAI 提出一套面向真实流量的内容审核完整流程,结合内容分类体系设计、主动学习、质量管控标注与合成数据,用于检测性相关、仇恨、暴力、自我伤害和骚扰等不良内容。
- Bai et al., “Constitutional AI: Harmlessness from AI Feedback” (把性情挪进模型), 2022. arXiv:2212.08073Constitutional AI 通过成文原则、自我批判、修订与 AI 反馈,训练无害但不过度回避的助手行为。
- Beurer-Kellner et al., “Design Patterns for Securing LLM Agents against Prompt Injections” (六个结构性模式:动作选择器、先规划后执行、map-reduce、双 LLM、先生成代码再执行、上下文最小化), 2025. arXiv:2506.08837来自 ETH、Google、Microsoft 与 Invariant 的研究者系统化了六个设计模式,通过约束智能体的结构,使注入指令无法改写其特权动作。
- Meta AI, “Llama Guard 4 Model Card (Llama-Guard-4-12B)” (一个多模态守卫模型,按 MLCommons 分类法同时处理文本与图像), 2025. huggingface.coLlama Guard 4 模型卡介绍了一个按 MLCommons 风险分类法处理文本与图像的多模态安全分类器,并说明其预期用途和局限。
评论
登录后评论