2025年10月8日

护栏设计

护栏是部署在模型调用链路中的约束与校验层,用来限制输入、上下文、工具调用和输出,降低不安全、不合规和不可靠行为的概率。

知识库大模型安全与护栏securityguardrails

护栏设计

先说结论

护栏是部署在模型调用链路中的约束与校验层,用来限制输入、上下文、工具调用和输出,降低不安全、不合规和不可靠行为的概率。

为什么我会单独记这一篇

仅靠模型对齐或系统提示词,通常无法覆盖真实生产环境里的:

  1. 提示注入与越狱。
  2. RAG 文档污染。
  3. 工具越权调用。
  4. 输出中的泄密、违规或幻觉风险。

护栏设计的目标,是把安全从“单个 prompt 的技巧”升级为“运行时纵深防御”。

核心机制

分层护栏

  • 输入护栏:识别越狱、敏感输入、违规请求。
  • 上下文护栏:处理检索文档、工具返回和跨会话污染。
  • 执行护栏:控制工具调用、参数范围和副作用审批。
  • 输出护栏:检测违规内容、泄密、幻觉性建议。
  • 审计护栏:记录规则命中、模型版本、trace 和人工处理结果。

常见手段

  • 输入分类
  • 策略路由
  • 结构化输出校验
  • schema 校验
  • 工具审批
  • 人机确认
  • 输出审查
  • 日志审计

设计时真正要权衡什么

  • 严格性 vs 可用性:规则太严会过拒,太松会漏检。
  • 中央策略 vs 业务定制:统一治理更稳定,但业务场景常常需要例外。
  • 同步阻断 vs 异步审计:同步更安全但增加延迟,异步更轻但只能事后发现。
  • 模型护栏 vs 规则护栏:模型分类更灵活,规则更可解释,工程上通常混合使用。

容易踩的坑

  • 只在输入或只在输出做过滤,忽略检索和工具结果。
  • 把系统提示词当作主要安全边界。
  • 只拦截文本,不限制“能做什么”。
  • 分类器异常时请求直接放行,没有 fail-closed。
  • 规则没有版本化,模型升级后护栏失效。

工程落地时我会怎么做

  • 把护栏做成 input -> retrieval/context -> tool call -> output -> audit 的分层链路。
  • 对支付、发信、删改数据、外呼 API 等高风险操作增加显式审批。
  • 优先要求结构化输出,再做 schema 校验。
  • 把策略与业务代码分离,支持版本管理、灰度和回滚。
  • 记录命中规则、模型版本、用户、request ID 和 trace ID。

如果要对外讲,可以怎么概括

“护栏不是一个分类器,也不是一句‘请安全回答’的系统提示。它是部署在整条链路上的运行时控制面。真正有效的护栏设计,必须覆盖输入、上下文、工具调用和输出四层,并且能和审计、回滚、人工审批联动。”

最后记几条

  1. 护栏是运行时防御,不是只靠 prompt。
  2. 分层护栏比单点护栏更可靠。
  3. 高风险动作必须和审批联动。
  4. 结构化输出能显著降低治理难度。
  5. 没有日志和版本化,护栏就无法持续演进。

参考资料

延伸阅读