失败分流、降级与人工接管¶
- 沉淀时间:2026-09-09
- 来源:IJZKZE / PR #2;IK37HX / PR #5 与补丁
8aab330 - 成熟度:
confirmed - 适用范围:包含模型调用、环境检查、数据库执行和自动验证的 Agent 工作流
先按失败类型分流¶
不同失败不能共用一个 fallback:
| 失败 | 自动动作 | 原因 |
|---|---|---|
| 主模型连接、超时、非 200 或异常响应 | 请求已配置的备用模型 | 输入与验证链未改变,替换执行服务仍可保持调用契约 |
| Python 运行环境缺失 | 暂停并让用户提供可用解释器或修复环境 | Agent 猜 venv、联网安装或改软链会扩大破坏面 |
| SQL baseline / execute 超时 | 进入人工处理终态 | EXPLAIN-only 不能替代真实性能与结果一致性验证 |
| 结果不一致或证据缺失 | 标记功能风险,禁止正优化 | 性能收益不能覆盖语义风险 |
| 主模型和备用模型都失败 | 返回明确错误并终止 | 继续生成会制造无来源结论 |
环境契约¶
运行时只接受明确的解释器路径,例如系统 python3 或用户配置的 SQL_OPT_PYTHON。环境检查脚本返回结构化诊断和下一动作;Agent 不扫描任意 venv、不联网安装、不修改 pyvenv.cfg 或软链。
人工接管要带完整信息¶
人工接管输出至少包含:
- case 与停止阶段;
- 错误类别和最后一次失败;
- 已生成、未生成的证据文件;
- 是否执行过数据库写操作;
- 可以安全继续的选项;
- 明确说明当前没有产生可交付优化结论。
反模式¶
- 环境失败后自动退化成“模型优化但未验证”,仍输出正式 result。
- SQL 超时后用 EXPLAIN 结果冒充性能验证。
- 无限重试同一 provider 或重复派发子 Agent。
- 把所有异常归入同一个“失败”状态,导致无法恢复或审计。
限制¶
自动切换备用模型要求主备接口兼容,并应记录实际使用的模型。硬编码模型和超时阈值是已知技术债,应迁移到配置层。