模式矩阵 /模式白皮书/A4

ADPS Agent 设计模式白皮书

A4 · Guardrail Sandwich · 护栏三明治

在 agent 每个有副作用或高风险的动作前后套上 pre-check 和 post-check 夹层,把它从"自由行动"约束到"被监督的行动"。

版本
v0.3
状态
公开评审稿
发布日期
2026-07-13
分类
行动 Action × 层级 Hierarchy(分)
目录地位
核心模式
许可
CC BY 4.0

文档状态:本页为公开评审稿。模式定义与分类可供讨论和引用;未附来源链接的数字与应用示例只用于说明机制,不作为行业基准。

坐标 行动 Action × 层级 Hierarchy(分)
成本 横切(跨切关注点,开销随风险分级浮动)
模式组 行动模式
模式简介 在 agent 每个有副作用或高风险的动作前后套上 pre-check 和 post-check 夹层,把它从"自由行动"约束到"被监督的行动"。

问题

前面四个模式都在教 agent "怎么干对",但生产级 agent 还要回答另一个问题:干错时怎么挡住。某银行的对公转账 agent 上线第三周,把客户邮件里的账号"...XX23"解析成了"...XX32",一笔 320 万元转到错误账户,12 小时后才被对账系统抓到,对方已提现一部分。整个过程 agent 自信地完成,没有任何检查环节——调用前没人核账号、核金额、核客户意图,调用后没人复核到账和合规。

问题不是 agent 笨,是没有夹层防护。OWASP 2026 年正式发布的 Agentic Top 10 里,A1(Agent Goal Hijack)和 A2(Tool Misuse)说的就是这件事;调研显示 88% 的组织至少出过一次 AI agent 安全事故。这不是会不会出事的问题,是哪天出事的问题。Guardrail Sandwich 给每个 destructive 动作套上结构化的事前事后审查,让事故在执行前被拦下、或在执行后被回滚。

分类依据:行动 × 层级

  • 纵轴 · 行动:它包装的是 agent 的动作执行——在工具调用的前、中、后插入守卫,属于行动端的执行控制。
  • 横轴 · 层级:pre-guard → tool call → post-guard 是一个层级包装结构,与 Web 框架的 middleware 完全同源——一层夹一层,外层先于内层执行、后于内层收尾。它和规划-执行(A2)虽同涉分层,但方向不同:A2 是"战略-战术"分层(先想后干),A4 是"安全-执行"分层(先审后干)。

解决方案与机制

最优工程实现是 hook——一个 hook 能 wrap 任何工具,配置一次、全 agent 受益,不用每个工具改一遍代码。Claude Code 的 hooks 系统铺了 12 个生命周期事件,最核心的是一对:

  • PreToolUse:工具调用前触发,是整个系统里唯一能 block 的 hook(退出码 2 直接阻断)。能拦截、改参数、加 context。典型用例是路径白名单、命令黑名单、quota 检查、approval gate。
  • PostToolUse:工具调用后触发,不能 undo 已发生的动作,只能验证 output、提示下一步、触发审计或 saga 回滚。典型用例是 output schema 校验、敏感数据扫描、副作用确认。

落地有三条关键纪律:

  • 按 risk_level 分级:读操作可以裸跑,不该套夹层;普通写挂 2 到 3 层;destructive 全套;金融、医疗这类 CRITICAL 动作全套加 Approval Gate。hook 配置文件本身就是 agent 的风险地图。
  • hook 顺序按"便宜先、贵的后":RBAC 检查(一次 dict 查询)排前面快速失败,AML 扫描(要查反洗钱库)排后面,省算力。
  • 三阶段部署:周 1-2 monitor mode(只 log 不 block,收集误报样本)、周 3-4 soft enforcement(拦明显违规、flag 边缘 case)、月 2 起 full enforcement。直接上 full enforcement 会让 agent 卡死、严重影响业务方使用——guardrail 调参和机器学习调参一样,必须在线收集数据再调。

适用条件

  • 有副作用且错调代价高的动作:转账、删数据、发消息、调外部 API。读操作(read file、search、fetch 只读)不必套——每加一层都是额外的延迟开销。
  • 强合规的垂直领域:金融、医疗、法律、政府。这类场景的硬约束(金额阈值、处方剂量、制裁名单)可以 1:1 编码进 pre-check。
  • 与 Approval Gate 配合的混合把守:低风险动作走 sandwich 自动放行,高风险动作 sandwich 加人工审批双重把守。

已知失效方式

  • Composition Bypass(组合绕过):单个动作每个都被允许(读文件、base64 编码、写 URL),串起来就是数据外泄。单点检查全过,因为它不分析序列。研究显示一个被攻陷的 agent 4 小时内能污染 87% 的下游决策,大半因此。应对是除了单点 hook,还要加 session 级的 scope analyzer,分析过去几分钟动作组合是否构成已知攻击模式——这是 LLM 时代的 SIEM。
  • Sandwich Overhead Tax(夹层税):所有工具一律套全套夹层,整体延迟涨 5 到 10 倍。读文件套 RBAC 加 AML 加审计是巨大浪费。应对是严格按 risk_level 分级,LOW 直接放行。
  • Schema Drift(schema 漂移):pre-check 校验的 schema 和下游工具实际期望的不一致,导致 pre 通过、tool 跑挂。应对是用 OpenAPI / JSON Schema 做 single source of truth,两边从同一份 schema 生成校验逻辑。

三种失败共同的根因是:Guardrail Sandwich 不是 plug-and-play,是工程治理——装上 hook 不等于做对治理,必须持续维护 hook 顺序、风险地图、schema 同源,就像数据库索引加了能跑快、不维护就成累赘。

验证指标

  • block 率(monitor 阶段观察,full enforcement 后健康区 <5%):直接上 full enforcement 时第一周 block 率常超 30%,那是阈值没调好的信号。
  • 误转账 / 错调率(健康区随业务定,金融场景 <0.01%):银行案例从 0.3% 降到 0.001%。
  • 夹层延迟开销(健康区与 risk_level 匹配):金融全套 6 hook 约增加 800ms,是合理代价;读操作若也涨这么多就是夹层税。
  • 审计留档完整率(健康区 100%):trace_id 串联全程,金融场景留档 7 年。审计是 sandwich 的副产品,不是额外功夫。

参考实现

wrap(tool, ctx):
    for hook in pre_hooks:            # 顺序: 便宜先,贵的后
        verdict = hook(ctx)
        若 verdict.block → 短路返回 blocked + trace
        若 verdict.改参数 → 更新 ctx.args
    result = tool(**ctx.args)          # 在隔离 sandbox 内执行
    for hook in post_hooks:
        verdict = hook(ctx, result)
        若 verdict.rollback → 触发 saga inverse,返回 rolled_back
        若 verdict.改结果 → 更新 result
    返回 ok + result + 完整 trace(每个 hook 的 passed/reason/延迟)

工程落地要点:所有 destructive 工具都用它包一层;hook 要 idempotent(重试安全,网络抖动不能让钱转两次);trace_id 落库做审计串联键。

应用示例

银行对公转账 agent 给所有 destructive 工具套上 sandwich,落地为六个决策点。pre 层:RBAC 权限校验、金额阈值三档分诊(10 万以下自动 / 10 到 100 万短信确认 / 100 万以上人审)、收款账号白名单匹配、制裁名单事前扫描。post 层:反洗钱事后扫描(高度可疑自动 saga 回滚、中度可疑 flag 给风控)、审计日志 7 年留档。hook 顺序极其关键——金额分诊在白名单之前,但都必须在制裁扫描之前,因为制裁是法律红线。装上之后误转账率从 0.3% 降到 0.001%,每笔交易延迟从 2 秒涨到 4 到 5 秒。回到开场,account_whitelist 这一层会先抓住"...XX32 不在客户白名单内"并要求短信二次确认——一个 hook 配置一次,挡掉一类事故。同一套结构换到医疗就是角色权限、处方剂量阈值、病史白名单、FDA 黑名单、药物相互作用扫描、HIPAA 审计——业务约束变了,模式不变。

相关模式

  • 工具调度(A1):嵌套互补。A1 的 quota、state refresh 是 dispatch 内置的轻量守卫,A4 是套在 dispatch 前后的通用夹层——A1 选对工具,A4 保证选错时也兜得住。
  • 规划-执行(A2):A2 plan 里的审批节点和合规校验,落地时常由 A4 的 pre-check 实现。
  • Approval Gate(治理模块):同源但分工不同。Approval Gate 是 human-in-loop(等人按批准),A4 是 deterministic check(机器直接做规则匹配)。两者常配合——低风险走 sandwich,高风险 sandwich 加 Approval Gate。
  • 失败日记(感知模块):组合绕过、记忆中毒这类失败 sandwich 单层挡不住,要配合记忆模块的 audit 一起防。

设计结论

Guardrail Sandwich 把人类几千年的程序正义智慧编码进了 agent 行动层——pre-check 是事前听证、execution 是判决执行、post-check 是事后救济。agent 工程的成熟标志不是 demo 跑得多酷,而是事故发生时它没出事。

企业证据

当前没有与本模式绑定的公开评审案例。模式定义不因此视为已经获得企业验证。

案例收录要求说明业务约束、实现结构、已知失败和迁移边界。参见 贡献与评审规则

引用建议:ADPS,《A4 守卫三明治》,Agent 设计模式白皮书 v0.3,2026-07-13。

模式目录 · 参考实现 · CC BY 4.0