本节摘要:本节是全书的工程收官:任何一次「上新」——新任务、新流程、换模型、扩并发——都要过一道显式清单。先立方法论:清单比记忆可靠,因为压力与兴奋状态下的人会跳步;清单的价值不在项目多,在每项可判定、有证据指针。五大块逐块展开:合规确认(授权范围、服务条款、速率与身份呈现——第 8 章四问的发布版)、速率限制(全局与按域名的阈值、峰值预算——第 10.1 节配置的验收)、凭证轮换(轮换流程演练过吗、所有持凭证方都覆盖了吗——第 7.1 节的承诺兑现)、回滚方案(版本、缓存、配置三层的回滚单元与触发条件,模型变更的回滚单独讲)、SOP 文档(值班手册、故障预案、升级路径)。发布节奏用灰度:小流量观察窗口、按第 11.2 节指标判晋级。模型变更流程单列:影子运行对照、提示词版本化。最后以全书合拢图收束:从第 0 章到第 11 章的能力地图。双语给一个清单执行器。
发布事故的复盘里,最常见的一句话是「这一步我们平时都做的」。压力与兴奋状态下人会跳步,这是人性不是失职;清单的作用是把「平时都做」变成「这次也做了,且有记录」。清单工程学的三条要求:每项可判定(能回答是或否,不写「注意合规」这种无法判定的句子)、每项有证据指针(指向文档、配置、演练记录)、执行留痕(谁在何时勾的)。五大块如下,逐块展开。
| 判定项 | 证据指针 | 出处 |
|---|---|---|
| 任务的三要素(站点、账号、操作)在授权范围内 | 授权文档或任务定义评审记录 | 第 8.2 节四问 |
| 服务条款与 robots 说明已复核,速率在可接受面 | 条款摘录加阈值配置 | 第 8.2 节 |
| 自动化身份如实呈现(标识可核实) | UA 与标识配置 | 第 8.2 节 |
| 审计留痕开启且脱敏规则生效 | 事件流样例加脱敏测试记录 | 第 8.3 节 |
这一块是第 8 章的发布版:四问清单从「任务接入评审」升级为「发布门槛」——没过合规块,后面四块没有意义。
速率块的判定项:全局与按域名两只令牌桶的阈值已配置并有数值依据(条款或站方说明,不拍脑袋);峰值预算覆盖第 10.1 节的池上限与救援风暴场景;演练记录显示限速在压力下真的生效(而不是配置了但被绕过)。
凭证轮换块回答一个尖锐的问题:**如果明天所有凭证泄露,系统多久恢复?**判定项:轮换流程演练过(不是「应该可以」,是「演练记录在这里」);所有持凭证方都覆盖(环境变量、密管、托管平台侧、第三方集成——第 7.3 节的坑表提过平台侧最容易被漏);轮换后系统的自检路径明确(哪些任务要重启、哪些缓存要失效)。
回滚的本质问题:**这次发布改了什么,怎么退回去?**浏览器智能体系统的变更分三层,回滚单元各不相同:
| 变更层 | 回滚单元 | 触发条件(示意) |
|---|---|---|
| 版本层(代码、依赖) | 上一版本镜像加发布开关 | 红色告警或发布窗口内成功率跌破线 |
| 缓存层(observe 缓存、选择器库) | 缓存文件回滚或整体失效 | 第 3.3 节失效率异动 |
| 配置层(速率、预算、白名单) | 配置版本回退(分钟级生效) | 任何异常的第一反应 |
模型变更单列:换模型不是普通的版本变更——同一个任务在新模型下的路径与判定都可能变化。流程三步:影子运行(新旧模型并行跑同任务集,对照成功率、步数、成本);提示词版本化(指令文本进版本管理,模型与提示词的组合是发布单元);灰度窗口延长(模型变更的观察窗比代码变更长,行为差异是渐进显形的)。第 10.2 节的模型分级配置正好是变更的落点。
SOP 块的判定项:值班手册存在且最近一次演练在三个月内(「页面打不开找谁、池满了怎么临时降载、红色告警的升级链」);故障预案覆盖三大场景(目标站点不可用、出口网络故障、模型服务故障);升级路径有名字有电话(不是「联系相关负责人」)。
发布节奏的阶梯(示意):百分之一流量跑半天(看错误分布)→ 十分之一跑一天(看四指标)→ 全量(留两天加密观察)。每一级的晋级判据用第 11.2 节指标写死在发布单里,不临场裁量。清单执行器把「过清单」变成留痕动作:
# launch_check.py —— 上线清单执行器(写法示意) import os from pathlib import Path CHECKS = [ ("合规:授权范围与速率依据已归档", Path("docs/auth-scope.md").exists()), ("速率:两档令牌桶阈值有数值依据", os.environ.get("RATE_BASIS") is not None), ("凭证:轮换流程近 90 天内演练过", Path("docs/rotation-drill.md").exists()), ("回滚:三层回滚单元与触发条件成文", Path("docs/rollback.md").exists()), ("SOP:值班手册与本季度演练记录", Path("docs/sop.md").exists()), ] def main() -> None: failed = [name for name, ok in CHECKS if not ok] for name, ok in CHECKS: print(("[通过] " if ok else "[未过] ") + name) if failed: raise SystemExit(f"还有 {len(failed)} 项未过,禁止发布") print("五块全过,进入灰度:百分之一流量,观察半天") main()
// launch_check.mjs —— 上线清单执行器(写法示意) import { existsSync } from "node:fs"; const CHECKS = [ ["合规:授权范围与速率依据已归档", existsSync("docs/auth-scope.md")], ["速率:两档令牌桶阈值有数值依据", process.env.RATE_BASIS !== undefined], ["凭证:轮换流程近 90 天内演练过", existsSync("docs/rotation-drill.md")], ["回滚:三层回滚单元与触发条件成文", existsSync("docs/rollback.md")], ["SOP:值班手册与本季度演练记录", existsSync("docs/sop.md")], ]; const failed = CHECKS.filter(([, ok]) => !ok); for (const [name, ok] of CHECKS) { console.log((ok ? "[通过] " : "[未过] ") + name); } if (failed.length > 0) { throw new Error(`还有 ${failed.length} 项未过,禁止发布`); } console.log("五块全过,进入灰度:百分之一流量,观察半天");
执行器的判定项是存在性与配置检查的示意——真实的清单多数项需要人来判定(演练的质量、文档的时效),执行器的角色是把判定结果留痕,不是替人判断。
十一章走完,把地图摊开:
第 0 章 导览 ─── 天花板、四流派、靶场 第 1 章 三原语 ─ act / extract / observe(全书的语法) 第 2 章 browser-use ─ 循环、信任边界 ┐ 第 3 章 Stagehand ─ 代码优先、渐进式固化 ├ 前半本:怎么看到、怎么点到、怎么省 第 4 章 结构化快照 ─ 无障碍树、双 MCP │ 第 5 章 视觉流派 ─ Midscene、Skyvern、基建路标 ┘ ─────────────────────────────────────────────── 第 6 章 验证与重试 ─ 断言三层、回退链 ┐ 第 7 章 会话与基建 ─ 登录态、沙箱、供给 │ 第 8 章 反检测与合规 ─ 检测面、红线、审计 ├ 后半本:怎么算对、怎么兜底、怎么合规、 第 9 章 从 Agent 到测试 ─ 固化、E2E 桥 │ 怎么扩、怎么运维 第 10 章 多智能体 ─ 并发、成本 │ 第 11 章 生产化 ─ flake、监控、上线 ┘
一条主线贯穿:三原语是语法,验证是句读,合规是边界,生产化是收口。前半本教你把任务跑起来,后半本教你把它交得出去——交得出去的标准就是本章的清单:每一次自动化都有授权、有节奏、有退路、有记录、有人负责。附录 A 到 C 是这本书的售后服务:术语表备查、工具速查备选、练习题备手痒。
正文至此收束。附录里见:术语表、工具速查、练习题——读者各取所需,愿你的每一次自动化都有授权、有节奏、有退路。