Playwright + AI 智能体混合架构(三):AI 也失败时——降级、灰度与回滚
AI 智能体也不是万能的。当 AI 无法完成任务时,系统应该怎么做?降级检测指标、灰度切换、操作可逆性——兜底策略不必复杂但必须提前设计。
亿牛云技术团队2026年4月18日3 分钟阅读
AI 会失败
AI 智能体不是万能的。在我们的生产经验中,AI 失败的主要模式包括:
- 超时失败:智能体在复杂页面上花了超过 15 分钟,仍然无法完成操作
- 循环失败:智能体进入循环——"点击 → 检查 → 不对 → 重新点击 → 仍然不对",无法脱离
- 幻觉失败:智能体报告操作成功,但实际没有(Nanobrowser Validator 的典型问题)
- 成本失控:智能体在单次任务上消耗了预期的 3 倍以上的 Token
AI 失败不是会不会发生的问题,是何时发生的问题。兜底策略必须在设计时准备,而不是在事故时临时想。
降级检测指标
在触发任何兜底动作之前,需要客观的指标来判断 AI 是否真的"失败了"。
class AIDegradationDetector:
def __init__(self):
self.max_steps = 30 # 最大操作步数
self.max_time_seconds = 600 # 最大处理时间(10 分钟)
self.max_tokens = 50000 # 最大 Token 消耗
self.max_retries = 5 # 同一操作的最大重试次数
def check_health(self, agent_state):
alerts = []
if agent_state["step_count"] > self.max_steps:
alerts.append("step_limit_exceeded")
if agent_state["elapsed_seconds"] > self.max_time_seconds:
alerts.append("time_limit_exceeded")
if agent_state["token_consumed"] > self.max_tokens:
alerts.append("token_budget_exceeded")
if agent_state["consecutive_retries"] > self.max_retries:
alerts.append("retry_loop_detected")
return alerts这些指标不需要很精确——它们的作用是在情况明显异常时触发干预,而不是在边缘情况下误判。
降级策略层次
当检测到 AI 失败时,按顺序尝试以下降级策略:
第 1 级:重试(带变化)
用不同的提示词重试、增加截图为视觉输入、简化任务描述
第 2 级:简化任务
将当前步骤拆分为更小的子步骤,逐个子任务执行
第 3 级:切换模型
从快速/廉价模型切换到更强模型(Gemini Flash → Claude Sonnet)
第 4 级:人工上报
将任务标记为"需人工处理",进入等待队列
第 5 级:跳过 / 默认值
如果操作是可选的非关键路径,使用默认值跳过在代码中表达为:
class DegradationManager:
async def execute_with_degradation(self, task, page):
for level in [Level1_RETRY, Level2_SIMPLIFY, Level3_MODEL_SWITCH]:
result = await level.execute(task, page)
if result.success:
return result
# 所有自动降级都失败
if task.critical:
return await self.escalate_to_human(task)
else:
return await self.skip_with_default(task)操作可逆性
AI 操作的降级最难处理的不是"操作失败了",而是"操作执行了一半且不可逆"。
示例场景:智能体已经提交了支付表单,然后才发现地址填错了。
不可逆操作的处理方式不是在降级时补救,而是在执行前确认:
class IrreversibleOperationGuard:
"""不可逆操作的防护门"""
async def execute(self, operation, confirm_fn):
# 执行前验证
if not await confirm_fn():
raise PreconditionError("Pre-execution check failed")
# 捕获操作前的状态,用于可能的回滚
before_state = await self.capture_system_state()
try:
result = await operation.execute()
except Exception as e:
# 尝试回滚
await self.attempt_rollback(before_state)
raise
# 执行后验证
if not await self.verify_operation(result):
await self.attempt_rollback(before_state)
raise VerificationError("Post-execution verification failed")
return result在 AI 浏览器自动化场景中,不可逆的操作包括:
| 操作类型 | 回滚可能性 | 防护措施 |
|---|---|---|
| 表单提交 | 取决于目标网站 | 执行前截图确认、先模拟提交 |
| 删除操作 | 难回滚 | 要求人工二次确认 |
| 支付 | 不可回滚 | 必须有外部确认步骤 |
| 数据导出 | 可回滚(可删) | 记录操作日志用于审计 |
| 配置修改 | 可回滚(有备份) | 修改前备份原值 |
灰度切换
当你更新了脚本或者 AI 策略后,不要全量上线。使用灰度发布:
class GradualRollout:
"""灰度切流"""
def __init__(self, traffic_split=0.1, metric_threshold=0.95):
self.script_engine = ScriptEngine()
self.ai_agent = AIAgent()
self.traffic_split = traffic_split # 10% AI, 90% 脚本
self.metric_threshold = metric_threshold
async def route(self, task):
# 对比模式:同时用脚本和 AI 运行
if random.random() < self.traffic_split:
script_result = await self.script_engine.run(task)
ai_result = await self.ai_agent.run(task)
# 记录对比结果
await self.record_comparison(task, script_result, ai_result)
# 返回脚本结果(默认使用稳定的版本)
return script_result
return await self.script_engine.run(task)
async def should_increase_traffic(self):
"""根据指标决定是否提高 AI 流量比例"""
metrics = await self.get_comparison_metrics()
# 如果 AI 成功率 >= 95%,提高流量比例
if metrics["ai_success_rate"] >= self.metric_threshold:
self.traffic_split = min(1.0, self.traffic_split * 2)回滚触发条件
灰度过程中需要自动回滚的条件:
- 成功率下降超过 5%——AI 版本导致任务成功率显著低于脚本版本
- 平均耗时增加 2 倍以上——AI 处理时间超出预期
- 成本超过替代方案——AI 版本的 Token 消耗折算后比脚本版本更贵
- 错误率上升——新的错误类型出现(通常是页面结构变化没覆盖到)
回滚应该是自动的:
class AutoRollback:
async def monitor_and_rollback(self):
metrics = await self.get_recent_metrics()
if metrics["success_rate"] < self.baseline_success_rate - 0.05:
await self.rollback("success_rate_dropped")
elif metrics["avg_duration_ms"] > self.baseline_duration_ms * 2:
await self.rollback("duration_exceeded")
async def rollback(self, reason):
logger.warning(f"Rolling back: {reason}")
self.current_strategy = "script_only"
# 通知
await self.notify_team(f"AI strategy rolled back due to {reason}")总结
AI 浏览器自动化的降级设计遵循三个原则:
- 检测先行——定义客观的失败指标(步数、时间、Token、重试次数)
- 分级降级——从重试到简化到切换模型到人工上报,逐级尝试
- 操作可逆——不可逆操作在执行前做二次确认,可逆操作保留回滚路径
混合架构(D 系列三篇)的核心思想是:不要把所有鸡蛋放在一个篮子里。 脚本和 AI 各有优势和劣势,通过桥接层和降级机制把它们组合起来,系统的整体可靠性会远高于单独使用其中任何一种方案。
需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。