安全护栏协议:工具调用前的授权检查
安全护栏协议:工具调用前的授权检查
1. 概念定义
安全护栏(Guardrails)是在工具调用执行前进行授权评估的安全机制。当 Agent 决定调用某个工具时,Guardrail 评估该调用是否被允许,并在拒绝时返回错误消息。
核心接口(GuardrailProvider 协议):
- 输入:工具调用请求(工具名、参数)
- 输出:允许(permit)或拒绝(deny + 错误消息)
2. Provider 类型
2.1 AllowlistProvider(内置)
零依赖的白名单方案:配置允许的工具列表,不在白名单中的工具调用一律拒绝。
guardrails: enabled: true provider: deerflow.config.guardrails:AllowlistProvider allowed_tools: - web_search - web_fetch - read_file2.2 OAP 策略 Provider
集成外部策略引擎(如 OAP — Open Agent Policy),支持更复杂的基于角色、环境、时间的授权规则。
2.3 自定义 Provider
用户实现 GuardrailProvider 协议,接入自有的授权逻辑。
3. 中间件集成
Guardrail 在中间件链中的位置:
... → LLM 错误处理 → [Guardrail 评估] → 沙箱审计 → 工具错误处理 → ...Guardrail 在 LLM 错误处理之后、工具执行之前运行。如果 Guardrail 拒绝,返回错误 ToolMessage,工具不会被执行。
4. 设计权衡
4.1 白名单 vs 黑名单
白名单(默认拒绝,仅允许配置的):更安全,但需要显式配置每个工具。 黑名单(默认允许,仅拒绝配置的):更方便,但可能遗漏未配置的危险工具。
推荐:生产环境使用白名单模式。
4.2 同步 vs 异步评估
同步评估(评估完成后才执行工具):简单可靠,但增加延迟。 异步评估(预检查 + 运行时监控):延迟低,但复杂度高。
推荐:工具调用前使用同步评估。
5. 陷阱与规避
5.1 Guardrail 性能
每次工具调用都经过 Guardrail 评估。如果 Guardrail 本身是网络调用(如远程策略引擎),可能引入显著延迟。
规避:简单规则(如白名单)在本地评估,复杂规则缓存结果。
5.2 误拒绝
Guardrail 可能拒绝合理的工具调用。
规避:
- Guardrail 拒绝时返回清晰的错误消息,帮助 Agent 调整策略
- 提供 Guardrail 审计日志,便于事后分析