防护栏与重试:验证器、降级、超时与预算控制
前置知识
一句话定义
防护栏(Guardrails)是包在智能体行为外围的机器可执行约束层——输入/输出校验、分层验证器、有限重试、超时、预算与降级路径;它把「信任模型不出错」替换为「出错也出不了圈」。
直观类比
悬崖步道的防护设施:护栏(schema 校验)限制活动范围,安全员(验证器)抽查动作,绳索长度有限(预算),天黑关门(超时),走不通就原路返回(降级)。没有这些设施,教练再好也不能开放悬崖步道。
为什么重要
kp-020 的七类失败几乎都能被某个防护栏拦截或止损;kp-021 证明了验证器是级联抑制的最高性价比手段。防护栏是把演示级系统与可生产系统分开的分水岭——生产环境的第一特征不是「更聪明的智能体」,而是「每个失败路径都有预置处置」。
前置知识
kp-020(失败分类——防护栏按失败类型对位部署);kp-021(q 检出率——验证器选型的定量依据)。
核心概念
- 输入防护栏:入口 schema 校验、注入检测、越权请求拒绝;
- 输出防护栏:结构断言(JSON Schema、引用编号存在性)、领域断言(单元测试、数值范围)、语义验证(LLM judge 按 Rubric 评审);
- 有限重试:上限次数 + 退避 + 每次重试必须改变输入(改提示、换模型、补信息);
- 超时:单调用、单节点、全任务三层时限;
- 预算(Budget):token 数、调用次数、费用、递归深度四类硬上限(kp-017 递归上限的推广);
- 降级(Fallback):失败时的预置替代路径——换工具、缩小问题、给保守答案、转人工;
- Kill Switch:一键终止整个运行的开关。
原理与机制
验证器分三层部署(按成本升序,先便宜的):确定性断言(毫秒级、零成本、q 视规则而定——schema/引用/范围类问题 q 可达 0.9+)→ LLM judge(秒级、按 kp-021 配置 q)→ 人工审批(挂不可逆操作,见 kp-018 中断)。错误分级决定处置:瞬态错误(网络超时、限流、偶发解析失败)→ 可重试,指数退避加抖动;持久错误(需求矛盾、缺权限、模型能力不足)→ 重试无效,必须走结构修复或人工。判断口诀:不带变化的重试 = 花钱买同样的结果——第二次失败与第一次同因时,重试计数应触发升级(换策略/换模型/转人工)而不是第三次相同尝试。预算的四层设置:递归上限(图级)、单智能体调用上限(角色级)、任务 token/费用上限(运行级)、全局日预算(系统级);超预算的行为不是「报错」,而是预定义的止损动作(汇总已知结果并输出「部分完成」报告)。降级路径要提前设计:每个关键节点问一句「这一步彻底失败时,系统对用户说什么」——答案写进编排,而不是事故发生时临场发明。
图示
输入 ──▶ [输入防护栏: schema/注入检查] ──▶ 智能体执行 ──▶ [输出防护栏]
│ 拒绝 │
▼ ├ 断言失败(可修): 带错误回喂重试 ≤N次(每次变输入)
礼貌拒绝 ├ 持久失败: 降级路径(缩小问题/保守答案/转人工)
└ 超预算/超时: 止损输出 + kill switch 可用
预算四层: 递归上限(图) / 调用上限(角色) / 任务费用(运行) / 日预算(系统)实例或案例
报表生成智能体的防护配置:输出 schema 断言(列名与类型,q 高成本低);数值单元格走确定性范围断言(环比超 ±500% 即标记复核);LLM judge 只审「结论是否被表格支持」(kp-021:放级联点);生成失败重试 2 次,第二次换更强模型(改变输入原则);任务预算 200 万 token,触发后输出已完成部分加缺口清单;对外发送邮件这一步挂在审批门后(kp-018)。上线后失败工单从「结果离谱」变为「优雅的部分完成」。
公式或模型
重试期望成本:设单次尝试成本 c、每次成功率 r(重试间独立),最多重试 n 次的期望尝试次数 = (1 - r^(n+1))/(1-r)…… 工程要点在约束侧:不带输入变化时 r 不随尝试变化,若 r 很低则期望成本 ≈ n·c 且成功率仍低——这就是「无变化重试」的浪费公式化。验证器投入产出沿用 kp-021:目标是在给定预算内最大化 Σ(被覆盖级联点的 q·代价权重)。
常见误区
- 误区一:防护栏越多越好。 每层防护栏有误杀率,层层叠加会把正常产出也拦下(假阳性放大);按 kp-021 的级联点优先级布防;
- 误区二:重试是默认处置。 持久错误重试只会烧钱并推迟暴露;先分级再处置;
- 误区三:降级即「报错给用户」。 降级是设计出来的替代体验(部分结果、保守回答、转人工),不是异常堆栈。
与其他知识点的关系
断言依赖 kp-005 的输出契约(没有 schema 就没有断言);递归上限与图预算的落点在 kp-017;人工审批的机制在 kp-018;q 的配置计算在 kp-021。
自测题
- 三层验证器按成本排序及其适用对象?
要点:确定性断言(结构/引用/范围)→ LLM judge(语义/逻辑,放级联点)→ 人工审批(不可逆操作)。
- 「不带变化的重试 = 花钱买同样的结果」的依据?
要点:无输入变化则每次成功率不变,期望成本线性增长而成功率不升;第二次同因失败应触发升级而非重试。
- 预算四层分别限制什么?超预算的正确行为?
要点:递归深度/单角色调用/任务费用/系统日预算;执行预定义止损动作(部分完成输出),不是抛异常。
延伸阅读
Anthropic《Building Effective Agents》对 guardrails 的定位论述;各框架的重试与回调 API 是本知识点的直接载体。