本节摘要:本节把第 8.3 节的审计事件流变成值班可用的仪表盘。先立错误 taxonomy:五类——网络(超时、连接重置、DNS)、选择器(定位失败、漂移)、权限(401/403、会话过期、授权变更)、业务逻辑(校验拦截、状态不符、流程断言失败)、模型误判(断言复核推翻、动作选错目标)——每类给信号、首诊处置与告警级别;分类的意义在于处置路由:五类的修复责任人在不同团队(网络找运维、选择器找自动化维护者、权限找账号管理、业务找产品、模型误判找提示词与模型配置)。然后是告警三级:红色(立刻有人响应:成功率骤降、熔断触发)、黄色(当日处理:单类错误占比异常、感知断言待复核队列堆积)、蓝色(周度回顾:成本异动、固化覆盖率停滞)。指标体系四件套上车:任务成功率、平均步数、token 成本(第 10.2 节台账)、固化覆盖率(第 3.3 节体征指标)。末尾给错误自动归因的规则分类器(双语)与看板版式示意。
| 类别 | 典型信号 | 首诊处置 | 责任归属 |
|---|---|---|---|
| 网络 | 超时、连接重置、DNS 失败 | 第 6.2 节瞬态路径自动退避;持续则查出口与目标站可用性 | 运维 |
| 选择器 | 定位失败、strict mode 冲突、候选为空 | 观察失败页面快照,判断漂移还是改版;刷新缓存或更新语义定位 | 自动化维护者 |
| 权限 | 401/403、跳登录页、授权提示 | 第 7.1 节信号表:重登或换号;持续则查授权变更 | 账号管理 |
| 业务逻辑 | 校验拦截、状态不符、流程断言失败 | 核对任务前提(时间窗、前置状态);业务规则变更走流程更新 | 产品与流程所有者 |
| 模型误判 | 复核推翻断言、动作落错目标 | 取第 8.3 节事件流的 basis 复盘;改指令或换模型档(第 10.2 节) | 提示词与模型配置 |
分类口径与第 6.2 节的失败分类学同源(那张表管「单次失败的即时反应」,这张表管「群体错误的运营归档」)。两条铁律:每个错误必须归入且只归入一类(未分类也是一类,但要持续收敛);分类字段在事件里是必填的——第 8.3 节事件结构补一个 error_class 字段,监控的聚合才有的放矢。
| 级别 | 条件(示意) | 响应预期 | 示例 |
|---|---|---|---|
| 红 | 核心指标突变:成功率五分钟均值跌破八成;熔断触发;池枯竭 | 立刻响应,值班升级路径启动 | 全量任务失败、出口网络中断 |
| 黄 | 结构性异常:单类错误占比超基线两倍;复核队列堆积;稳定率跌破门禁 | 当日处理,开归因工单 | 选择器类错误突增(疑似改版) |
| 蓝 | 趋势异动:成本周环比异常;固化覆盖率停滞;隔离区积压 | 周度回顾排期 | 成本缓慢爬升(救援变多) |
分级的纪律:红色必须少而准——红色泛滥的告警系统等于没有告警(第 11.1 节信号腐蚀的监控版);黄色的价值在「当日可见的趋势」,蓝色在看板而非消息推送里。第 9.2 节的感知断言归黄色(误判率决定了它不配拉红),纯代码断言与熔断归红色。
| 指标 | 口径 | 数据来源 | 健康形态 |
|---|---|---|---|
| 任务成功率 | 成功任务数除以总任务数(按任务类型分层) | 任务终态事件 | 平稳,波动先查红黄告警 |
| 平均步数 | 任务动作数的均值与分布 | 事件流动作计数 | 缓降(指令与固化改善) |
| token 成本 | 每任务成本的均值与分布(按通道分) | 第 10.2 节台账 | 均值稳、长尾收敛 |
| 固化覆盖率 | 固化步骤执行数除以总步骤执行数 | 缓存命中与测试运行记录 | 缓升后 plateau(第 3.3 节曲线) |
四个指标是一套「体检」而非孤立的数字:平均步数涨而成功率稳,多半是指令变啰嗦;成功率稳而成本涨,查救援深度;覆盖率停滞,回到第 9.1 节决策表看看候选池是不是空了。看板版式示意:
┌───────────── 浏览器智能体运维看板(示意) ─────────────┐ │ 任务成功率 97.2%(红门 80%) │ 固化覆盖率 71%(周 +2) │ │ 平均步数 8.4(周 -0.3) │ token/任务 4.1万(持平) │ ├──────────────────────────────┴────────────────────────┤ │ 错误分布(24h):网络 41% 选择器 33% 权限 12% │ │ 业务 8% 模型误判 4% 未分类 2% │ │ 告警:黄 2(复核队列堆积 / 选择器占比超基线) 红 0 │ └───────────────────────────────────────────────────────┘
第一道归因用规则做(便宜、可解释),分不了的进人工归因队列:
# error_taxonomy.py —— 五类错误的规则分类器(写法示意) TAXONOMY = [ ("网络", ("timeout", "net::", "reset", "dns", "econnrefused")), ("选择器", ("strict mode violation", "no element", "locator", "waiting for")), ("权限", ("401", "403", "unauthorized", "forbidden", "登录已过期")), ("业务逻辑", ("校验", "状态不符", "流程断言", "业务规则")), ("模型误判", ("ai_assert", "复核推翻", "意图偏差", "目标错误")), ] def classify(message: str) -> str: text = message.lower() for label, keys in TAXONOMY: if any(k in text for k in keys): return label return "未分类" for sample in ("waiting for selector timed out", "401 unauthorized", "复核推翻:断言语义误判"): print(sample, "->", classify(sample))
// error_taxonomy.mjs —— 五类错误的规则分类器(写法示意) const TAXONOMY = [ ["网络", ["timeout", "net::", "reset", "dns", "econnrefused"]], ["选择器", ["strict mode violation", "no element", "locator", "waiting for"]], ["权限", ["401", "403", "unauthorized", "forbidden", "登录已过期"]], ["业务逻辑", ["校验", "状态不符", "流程断言", "业务规则"]], ["模型误判", ["ai_assert", "复核推翻", "意图偏差", "目标错误"]], ]; /** 规则归因 @param {string} message 错误文本 @returns {string} 错误类别 */ function classify(message) { const text = message.toLowerCase(); for (const [label, keys] of TAXONOMY) { if (keys.some((k) => text.includes(k))) { return label; } } return "未分类"; } for (const sample of ["waiting for selector timed out", "401 unauthorized", "复核推翻:断言语义误判"]) { console.log(sample, "->", classify(sample)); }
规则表要与第 6.2 节分类器、第 11.1 节归因表共享词条来源(同一份配置),三处口径漂移会让指标互相打架。规则归因的准确率本身也是指标:未分类占比应随运营收敛到个位数百分比。
| 坑 | 现象 | 排查与处理 |
|---|---|---|
| 告警全红 | 没人看告警了 | 分级收严,红色只留给突变 |
| 错误只记 message | 分类靠人读日志 | error_class 必填进事件结构 |
| 看板只放成功率 | 成本与步数异动看不见 | 四指标成套,交叉解读 |
| 分类器三处各写一套 | 指标互相打架 | 规则表配置化、单一来源 |
| 模型误判混入选择器 | 改了定位还是错 | 复核队列的推翻结论回写分类 |
| 指标无分层 | 慢任务拉低整体成功率 | 按任务类型分层出成功率与成本 |
| 告警无值班归属 | 黄色告警无人接 | 每级告警绑定响应角色(SOP,第 11.3 节) |
系统稳定、可观测,最后一关是「上新」:换模型、发新流程、扩新任务之前该确认什么?下一节给出发布前的最后一道闸——上线清单五大块、灰度节奏、回滚与 SOP,并以一张合拢图收束全书。